DeepSeek+dify 工作流应用,自然语言查询数据库信息并展示

360影视 2025-02-24 16:35 1

摘要:在写连接外部数据库查询的时候,我就想普通的业务人员没有编程背景,不懂数据库,可他们想查询统计一些东西怎么办?只能找对应的开发人员写sql了,那我是不是可以用工作流解决这个问题。

在写连接外部数据库查询的时候,我就想普通的业务人员没有编程背景,不懂数据库,可他们想查询统计一些东西怎么办?只能找对应的开发人员写sql了,那我是不是可以用工作流解决这个问题。

简单的梳理了下流程。

我先把在 xxx里写的python脚本改下,由关键词检索改成sql检索。

from Flask import Flask, request, jsonifyimport pymysqlapp = 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('```sql\n', '') # 去除结尾的 ```` 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), 500def 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_mdif __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的能力忽高忽低,得找个代码模型。

来源:正正杂说

相关推荐