DeepSeek+dify 工作流应用,自然语言查询数据库信息并展示
作者:youqing · 2025-11-10 · 阅读时间:5分钟
本文介绍了一种结合DeepSeek和Dify的工作流应用,旨在帮助普通业务人员通过自然语言查询数据库信息并以Markdown表格形式展示结果。作者通过Python脚本实现了一个后端服务,接收自然语言输入,将其转换为SQL查询语句,并从数据库中获取数据。同时,通过创建知识库和优化工作流节点设置,实现了对数据库表结构的智能检索和SQL生成。文章还强调了表结构注释、分段设置和匹配度阈值的重要性,并指出可以通过不断优化提示词和SQL语句来提升查询效果。
引言
在写连接外部数据库查询的时候,我就想普通的业务人员没有编程背景,不懂数据库,可他们想查询统计一些东西怎么办?只能找对应的开发人员写sql了,那我是不是可以用工作流解决这个问题。
简单的梳理了下流程。
代码示例
我先把在 xxx里写的python脚本改下,由关键词检索改成sql检索。
if name == ‘main‘:
app.run(host=’10.1.0.65’, port=8000)
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("接收到请求")
# 获取查询sql
querySql = request.json.get('querySql')
print("querySql为:"+querySql)
# 去除 Markdown 标识和不必要的字符
if querySql:
# 去除开头的 ```sql
querySql = querySql.replace('```sqln', '')
# 去除结尾的 `<EOF>`
querySql = querySql.replace('n<>', '')
# 去除多余的空格和换行符
querySql = querySql.strip()
# 将换行符替换为空格(如果需要保持多行,可以省略这一步)
querySql = querySql.replace('n', ' ')
querySql = querySql.replace('```', ' ')
# 去除多余的空格
querySql = ' '.join(querySql.split())
ifnot querySql:
return jsonify({"error": "querySql is required"}), 400
try:
# 建立数据库连接
connection = pymysql.connect(**DATABASE_CONFIG)
with connection.cursor() as cursor:
# 执行查询
cursor.execute(querySql)
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__':
app.run(host='10.1.0.65', port=8000)
执行命令python .server2.py,启动服务
搭建知识库 步骤
数据准备与结构分析
我把库表结构从数据库里导出一份表结构,导出到相同的文件里,建立一个知识库。要求数据库表必须有完整的注释。
我们可以看到导出的表结构我们可以用DROP TABLE IF EXISTS 分割文本。
创建知识库
将导出的表结构,上传到知识库。
按照DROP TABLE IF EXISTS分割文本,将2设置为4000,预览下分段,效果还行,把最大分段长度调大,防止同一个表结构被分到不同的段落。
我们使用混合检索,Score的阈值不要调太大,一般0.3即可,别看图。
复制工作流
回到工作室,我们复制一个工作流出来。
![]() 改下名称。
节点设置
添加一个知识检索节点,把开始节点的用户输入context作为查询变量,添加刚才添加的数据库知识库。
我们把LLM节点调整下,修改下2的名称,上线文2改成知识检索的结果.调整下提示词让它根据知识和用户需求生成查询sql。
调整下HTTP请求中的查询字段,我改成了querySql,根据自己的代码来。
结束节点直接把HTTP的body返回。
最后整体流程。
调试
写sql的能力忽高忽低,得找个代码模型。
总结
- 表结构的注释很关键
- 分段也很关键
- 匹配度
0.3就可以了 - 可以不断的优化提示词,优化sql
- deepseek一直返回思考过程,可以在后端去掉或者在dify中通过代码来移除
- 这只是一个示例,生产需要不断的调试
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密
最新文章
- 十大企业级 API 管理工具全景指南
- Meta×Google 云计算协议:2025 多云/混合云 API 极速落地 AI 出海成本降 40%
- Kimi Chat API入门指南:从注册到实现智能对话
- 5种最佳API认证方法,显著提升…
- API接口重试的8种方法
- AI 推理(Reasoning AI)优势:超越生成模型的架构、算法与实践指南
- 如何使用 DeepSeek 构建 AI Agent:终极指南
- AI 智能体 ReAct 架构设计模式剖析
- 深入解析谷歌翻译API:基于Gemini的规模化高质量翻译与创新应用
- 面向开发者的5个开源大型语言模型API
- 如何使用Python创建API – Ander Fernández Jauregui
- API 集成成本全景解析:从 2 千到 15 万美元的隐藏账单与 ROI 攻略