DeepSeek+dify知识库,查询数据库api 方式
文章目录
- DeepSeek+dify知识库,查询数据库api 方式
- 本地准备
- 接口开发
- 配置工作流
- 解决deepseek返回think标签处理
DeepSeek+dify知识库,查询数据库api 方式
想干这事之前先梳理下流程
- 用户输入问题,根据用户的问题提出关键词
- 通过http调用外部服务接口,根据关键词查询数据库
- 返回200,调用大模型,将用户问题和知识进行梳理
- 返回其他,直接输出
本地准备
要求:
- 有一个python环境
- 安装pymysq和flask 组件python -m pip install pymysql flask
- 有一个mysql,或其他的数据库,我有mysql直接用了
接口开发
让kimi给我生成一个文章表,并且插入10条数据,我们可以告诉kimi,文章长度多大,这样内容可以丰富些。
直接让kimi生成一个暴露接口查数据库的服务,有简单的优化了下,将下面的内容放入到server.py文件中
from flask import Flask, request, jsonify
import pymysql
app = Flask(__name__)
# 数据库配置
DATABASE_CONFIG = {
'host': '', # 自己的数据库地址
'user': '', # 自己数据库的账户
'password': '', #自己数据库的密码
'db': 'demo', # 自己数据库的库名
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor
}
@app.route('/query', methods=['POST'])
def query_database():
print("接收到请求")
# 获取关键字
keyword = request.json.get('keyword')
print("keyword为:"+keyword)
ifnot keyword:
return jsonify({"error": "Keyword is required"}), 400
# 参数化查询,避免 SQL 注入,修改成自己的库
query = "SELECT * FROM articles WHERE content LIKE %s"
params = ('%' + keyword + '%',)
try:
# 建立数据库连接
connection = pymysql.connect(**DATABASE_CONFIG)
with connection.cursor() as cursor:
# 执行查询
cursor.execute(query, params)
result = cursor.fetchall()
connection.commit()
connection.close()
ifnot result:
return"未查询到有效数据", 400
# 生成 Markdown 表格
markdown_table = generate_markdown_table(result)
return markdown_table, 200
except Exception as e:
return str(e), 500
def generate_markdown_table(results):
""" 生成 Markdown 表格 """
ifnot results:
return""
# 获取列名
columns = results[0].keys()
# 表头
table_md = "| " + " | ".join([col for col in columns]) + " |\n"
# 分隔线
table_md += "| " + " --- |" * len(columns) + "\n"
# 表格内容
for row in results:
table_md += "| " + " | ".join([str(cell) for cell in row.values()]) + " |\n"
return table_md
if __name__ == '__main__':
# 注意这里绑定本机的内容ip,省事点,就0.0.0.0即可。不要绑定127.0.0.1,docke内访问不到
app.run(host='10.1.0.65', port=8000)
启动服务
python .\server.py
配置工作流
创建一个空白应用。
在开始节点添加一个输入字段context
添加一个LLM,把开始节点设置的context字段作为上下文传入,并设置提示词提取关键词。
添加一个http请求节点,把我们在接口开发里的地址和接口名填写进去2,然后把大模型的输出作为关键词填写到请求body里3,我们关闭重试机制4。
这里要注意下:json的引号是中文的,最好在外面写好校验过了再放进去。
在HTTP请求的输出变量里,我们只关注status_code 响应状态码和响应内容即可。
添加一个条件分支1,然后设置HTTP响应码为200的时候,连接到大模型。其他直接结束。
添加大模型,将HTTP请求的响应体作为上下文给大模型,输入提示词,让大模型根据知识,验证,并进行合理性的验证,最后结构化返回。
在结束节点中,我们把大模型整理的内容输出。
试运行效果。