背景
在写连接外部数据库查询的时候,我就想普通的业务人员没有编程背景,不懂数据库,可他们想查询统计一些东西怎么办?只能找对应的开发人员写sql了,那我是不是可以用工作流解决这个问题。
简单的梳理了下流程。
脚本
我先把在 xxx里写的python脚本改下,由关键词检索改成sql检索。
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("接收到请求")
# 获取查询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), 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的能力忽高忽低,得找个代码模型。
后记
1
表结构的注释很关键2
分段也很关键3
匹配度0.3
就可以了4
可以不断的优化提示词,优化sql5
deepseek一直返回思考过程,可以在后端去掉或者在dify中通过代码来移除6
这只是一个示例,生产需要不断的调试
?【三连好运 福利拉满】?
? 若本日推送有收获:
? 点赞 → 小手一抖,bug没有
? 在看 → 一点扩散,知识璀璨
? 收藏 → 代码永驻,防止迷路
? 分享 → 传递战友,功德+999
? 关注 → 追更不迷路,干货永同步
? 若有槽点想输出:
? 评论区已铺好红毯,等你来战!