背景

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

简单的梳理了下流程。

脚本

我先把在 DeepSeek+dify知识库,查询数据库的两种方式(api+直连)里写的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', '')
        
        # 去除结尾的 ``<EOF>``
        querySql = querySql.replace('\n<<EOF>>', '')
        
        # 去除多余的空格和换行符
        querySql = querySql.strip()
        # 将换行符替换为空格(如果需要保持多行,可以省略这一步)
        querySql = querySql.replace('\n', ' ')
        querySql = querySql.replace('```', ' ')
        # 去除多余的空格
        querySql = ' '.join(querySql.split())
        
    if not 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()

        if not 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 表格 """
    if not 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 可以不断的优化提示词,优化sql
  • 5 deepseek一直返回思考过程,可以在后端去掉或者在dify中通过代码来移除
  • 6 这只是一个示例,生产需要不断的调试

相关资料

清华DeepSeek相关资料
https://pan.quark.cn/s/5c1e8f268e02
https://pan.baidu.com/s/13zOEcm1lRk-ZZXukrDgvDw?pwd=22ce

北京大学DeepSeek相关资料
https://pan.quark.cn/s/918266bd423a
https://pan.baidu.com/s/1IjddCW5gsKLAVRtcXEkVIQ?pwd=ech7

零基础使用DeepSeek
https://pan.quark.cn/s/17e07b1d7fd0

https://pan.baidu.com/s/1KitxQy9VdAGfwYI28TrX8A?pwd=vg6g

ollama的docker镜像

https://pan.baidu.com/s/13JhJAwaZlvssCXgPaV_n_A?pwd=gpfq

deepseek的模型(ollama上pull下来的)
https://pan.quark.cn/s/dd3d2d5aefb2

https://pan.baidu.com/s/1FacMQSh9p1wIcKUDBEfjlw?pwd=ks7c

dify相关镜像

https://pan.baidu.com/s/1oa27LL-1B9d1qMnBl8_edg?pwd=1ish

ragflow相关资料和模型
https://pan.baidu.com/s/1bA9ZyQG75ZnBkCCenSEzcA?pwd=u5ei

公众号案例
https://pan.quark.cn/s/18fdf0b1ef2e
https://pan.baidu.com/s/1aCSwXYpUhVdV2mfgZfdOvA?pwd=6xc2 ]( https://pan.baidu.com/s/1aCSwXYpUhVdV2mfgZfdOvA?pwd=6xc2 )

总入口(有时候会被屏蔽):
https://pan.quark.cn/s/05f22bd57f47提取码:HiyL

https://pan.baidu.com/s/1GK0_euyn2LtGVmcGfwQuFg?pwd=nkq7

系列文档:

DeepSeek本地部署相关

ollama+deepseek本地部署
局域网或断网环境下安装DeepSeek

DeepSeek相关资料

清华出品!《DeepSeek从入门到精通》免费下载,AI时代进阶必看!
清华出品!《DeepSeek赋能职场应用》轻松搞定PPT、海报、文案

DeepSeek个人应用

不要浪费deepseek的算力了,DeepSeek提示词库指南
服务器繁忙,电脑配置太低,别急deepseek满血版来了
DeepSeek+本地知识库:真的太香了(修订版)
DeepSeek+本地知识库:真是太香了(企业方案)
deepseek一键生成小红书爆款内容,排版下载全自动!睡后收入不是梦
最轻量级的deepseek应用,支持联网和知识库

当我把公众号作为知识库塞进了智能体后

个人神级知识库DeepSeek+ima 个人学习神器

dify相关

DeepSeek+dify 本地知识库:真的太香了

Deepseek+Dify本地知识库相关问题汇总
dify的sandbox机制,安全隔离限制
DeepSeek+dify 本地知识库:高级应用Agent+工作流
DeepSeek+dify知识库,查询数据库的两种方式(api+直连)
DeepSeek+dify 工作流应用,自然语言查询数据库信息并展示
聊聊dify权限验证的三种方案及实现
dify1.0.0版本升级及新功能预览

ragflow相关

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)
DeepSeek+ragflow构建企业知识库之工作流,突然觉的dify又香了

关于我

资深全栈技术专家 | 互联网领域十年架构沉淀
技术纵深:高并发架构 | 应用调优 | 分布式系统
技术版图:Java/Vue/Go/Python
管理沉淀:8年技术团队管理 | 百万级DAU经验
专注输出:
✓ 架构思维 × 技术管理 × 全栈实战
✓ 新技术应用 × 行业趋势前瞻

📢【三连好运 福利拉满】📢

🌟 若本日推送有收获:
👍 点赞 → 小手一抖,bug没有
📌 在看 → 一点扩散,知识璀璨
📥 收藏 → 代码永驻,防止迷路
📤 分享 → 传递战友,功德+999
🔔 关注 → 关注5ycode,追更不迷路,干货永同步

💬 若有槽点想输出:
👉 评论区已铺好红毯,等你来战!
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐