Dify 企业级应用案例
05
Text2SQL 数据分析助手(自然语言查数据库)
Agent + 数据库插件难度 ★★★★
中文提问 → 自动生成 SQL → 真实执行 → 返回结果(不是编数字):表结构放知识库、ReAct 多轮推理自修正,适配财务/库存/日志等任何 SQL 库。
解决什么问题
业务/运营想取数都要排队等数据同学写 SQL;分析师被「跑个数」淹没。口径不统一时各部门还会算出不同数字。
方案价值
- 中文提问 → 自动生成 SQL → 真实执行 → 返回结果(不是编数字)
- 表结构放知识库,加表/改表即时生效
- ReAct 多轮推理支持先看表结构再写 SQL 的自修正闭环
- 同样架构适用于财务、库存、日志等任何 SQL 库
架构与节点流程
开始(sys.query)→知识检索(表结构 DDL)→Agent(ReAct 策略)→Database 插件执行 SQL→直接回复
依据:火山引擎开发者社区《0 代码搭建 Text2SQL 智能查询》+ AWS 官方博客 Text2SQL 方案的同款范式(Dify 1.0.0+ Agent 节点)。
搭建步骤
1
配置系统模型与数据库账号
设置 → 模型供应商 → 系统模型设置:配置 Embedding(doubao-embedding / text-embedding-v4)与 Rerank(bge-reranker-v2-m3)。
安全第一
为 Dify 单独建一个只读账号(只 SELECT 权限、限定库表),生产必须如此——LLM 生成的 SQL 是会被真实执行的。
2
把表结构(DDL)做成知识库
整理一个 txt 文件,内容为各业务表的 CREATE TABLE 语句——COMMENT 写得越细,生成 SQL 越准(字段含义、单位、枚举值都写进注释)。示例:
schema.txt · 建表语句(节选)
CREATE TABLE `student_scores` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', `student_id` varchar(20) NOT NULL COMMENT '学号', `student_name` varchar(50) NOT NULL COMMENT '学生姓名', `class_name` varchar(50) NOT NULL COMMENT '班级名称', `subject` varchar(50) NOT NULL COMMENT '科目名称', `score` decimal(5,2) NOT NULL COMMENT '分数', `exam_date` date NOT NULL COMMENT '考试日期', `semester` varchar(10) DEFAULT NULL COMMENT '学期,如 2026-S1', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='学生成绩表';
上传建知识库:索引方式高质量,检索用混合检索。表多时按业务域拆多个文件,一个问题只召回相关的几张表。
3
安装插件
- 插件市场安装 Agent 策略(官方)与 Database(hjlarry/database)——支持 MySQL / PostgreSQL / SQLite / SQLServer / Oracle。
- Database 插件授权配置连接串(密码里的 @ 要转义成 %40):
连接串格式
MySQL: mysql+pymysql://readonly_user:pwd%40123@10.0.0.8:3306/report_db PostgreSQL: postgresql+psycopg2://readonly_user:pwd@10.0.0.8:5432/report_db SQLite: sqlite:///data/report.db
看到「已授权」才算配置成功。
4
编排 Chatflow:检索 → Agent → 回复
新建 Chatflow,节点顺序:开始(无需输入变量)→ 知识检索 → Agent → 直接回复。
- 知识检索
- 查询变量
sys.query,勾选 schema 知识库 - Agent · 策略
- ReAct(另一个选项 function calling,模型支持时也可)
- Agent · 模型
- DeepSeek-V3(实测该类强模型成功率高;两处模型——Agent 主体与 text-to-SQL 工具——都要选强模型)
- Agent · 工具
- 勾选 database 插件全部函数
- Agent · 查询参数
sys.query;迭代次数默认 3(模型弱可调大,代价是耗时)
Agent 指令(提示词,官方教程口径 + 企业加固版):
Agent · 指令(INSTRUCTION)
请根据用户输入的 {{#sys.query#}} 和 {{#知识检索节点ID.result#}} 相关内容实现 SQL 查询。
约束:
1. 只允许 SELECT 查询;禁止 INSERT/UPDATE/DELETE/DROP。
2. 先依据检索到的表结构确认字段存在再写 SQL;字段名、表名必须与 DDL 完全一致。
3. 结果集超过 100 行时自行加 LIMIT 并说明;聚合优先。
4. 运行出错时,阅读错误信息修正 SQL 重试(最多 3 次)。
5. 最终用中文回答业务问题,附上所用的 SQL。5
轻量替代:独立 AI Agent 版
表少(<10 张)时可以不用 Chatflow:直接新建 AI Agent应用,把建表 SQL 原文粘进系统提示词,工具加 database 插件,Agent Mode 选 ReAct。搭建 5 分钟,代价是 token 略费(每次都带全量 DDL)。
6
测试、验收与扩展
- 验收用例:行数统计(count)、条件筛选、分组聚合、时间范围各来一遍;再给一个表里没有的字段,正确行为是「字段不存在」而不是硬编一个。
- 业务口径沉淀:常用指标定义(GMV 口径、活跃定义)也写成文档放进 schema 知识库,回答自动对齐口径。
- 扩展:Agent 后接代码执行节点算同比环比、接 ECharts 渲染出图;或把「问题 → SQL → 结果」沉淀为问答对回流知识库。
坑(高频)
① 密码含 @ 未转义 → 连接报错且报错信息有误导性;② 模型太弱 → SQL 字段幻觉,Agent 与工具两处都换 DeepSeek-V3 级;③ 大表全表扫描——只读账号同时加
max_execution_time / 语句超时;④ 复杂多表 join 错误率高,把常用 join 关系写成视图(VIEW)暴露给模型。