使用dify构建一个查询数据库的工作流
前提条件
dify配置
dify 1.9.2,安装教程见官网
模型供应商添加一个深度求索(当然也可以使用其他模型)
安装插件“数据库查询”,插件地址:跳转地址

数据库
准备一个数据库结构描述文件,这里我准备了一个excel,然后又两个工作表,分别如下:
表信息:
| 模式 | 表 | 备注 |
|---|---|---|
| wos | USERS | 用户信息 |
| wos | USER_REGISTER | 用户注册信息 |
字段信息:
| 模式 | 表 | 字段 | 类型 | 备注 | 关联外键 |
|---|---|---|---|---|---|
| wos | USERS | ID | VARCHAR(32) | 主键 | |
| wos | USERS | USERNAME | VARCHAR(100) | 用户名 | |
| wos | USERS | PASSWORD | VARCHAR(100) | 密码 | |
| wos | USER_REGISTER | ID | VARCHAR(32) | 主键 | |
| wos | USER_REGISTER | USER_ID | VARCHAR(100) | 用户ID | wos.USERS.ID |
| wos | USER_REGISTER | REGISTER_DATE | VARCHAR(100) | 注册时间 |
插入数据:
1 | INSERT INTO wos.USERS (ID, USERNMAE, PASSWORD) VALUES ('1', 'user1', 'password1'); |
编写流程

开始节点
添加两个输入变量
- input,类型为文本
- ddl,类型为文件

这里我为了避免运行的时候上传文件,所以对ddl设置了默认值,并且将其隐藏了。实际应用中可以在执行工作流的时候传递。
提取关键字
上下文选择开始节点的input变量,输入下面的提示词
1 | 你是一个关键词提取器,根据用户输入的{{#1761707244261.input#}},解析出用户想要查询的数据库表名和查询条件,如果可能涉及多个表,你需要全部返回,直接返回关键词即可 |

提取表结构
上下文选择开始节点的ddl变量

构建SQL
上下文选择提取表结构的ddl变量,输入下面的提示词
1 | {{#context#}}是对MySQL一个表或多个表的描述(多个表使用外键进行关联),根据这个描述编写一个对这个表的查询SQL,直接返回纯文本的SQL,不要用markdown格式,例如 SELECT column from table。请基于{{#1761720485233.text#}}表结构,以及用户查询的表和条件{{#1761707260422.text#}}组装一个查询sql |

SQL查询
在该节点需要录入你的数据库信息,该插件目前支持的数据库有: MySQL,Oracle,SQLServer,PostgreSQL
SQL查询语句选择构建SQL节点的text变量,输出格式这里选择JSON

结束节点
输出变量选择SQL查询节点的输出信息

执行测试
输入“查询注册2025年10月15日之后注册的用户”进行测试,返回结果显示查询到了ID为2的用户记录,查询结果正确。

通过追踪查看构建SQL节点的输出结果如下:
1 | { |
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自Jarome'Blog




