Dify 实战案例:用 Dify+ 知识库 + Agent 构建 Text2SQL 智能查询系统,自然语言秒变 SQL 代码

Text2SQL(或称NL2SQL)是一种自然语言处理技术,旨在将自然语言(Natural Language)问题转化为关系型数据库中可执行的结构化查询语言(Structured Query Language,SQL),从而实现对数据库的查询和交互。这项技术的核心目标是通过自然语言描述,无需用户具备SQL语法知识,即可完成复杂的数据库查询任务

具体来说,Text2SQL的任务包括以下步骤:

  1. 输入分析:用户以自然语言形式输入问题,例如“查找平均工资高于整体平均工资的部门名称”。
  2. 语义解析:系统将输入的自然语言问题解析为数据库中的结构化查询语句。
  3. SQL生成:根据解析结果生成对应的SQL语句,如“SELECT department_name FROM departments WHERE average_salary > (SELECT AVG(salary) FROM employees)”。
  4. 执行与反馈:系统执行SQL查询并返回结果,同时可能对结果进行进一步的解释或分析。

Text2SQL拥有广泛的应用领域,像智能客服、数据分析、金融、医疗、教育等领域都有它的身影,该技术能够极大地提升用户与数据库交互的效率,为用户带来更多便利。另外,随着大型语言模型(LLMs)的不断发展,Text2SQL技术在处理复杂查询以及多轮对话方面也有了重大突破。

之前给大家介绍过dify整合数据库实现图表生成的案例,也分享过基于database插件实现Text2sql数据库查询图表工作流的dify案例。

有小伙伴提出疑问,SQL是写到大模型的提示词里的,要是想查询其他语句,之前工作流的text2sql方案就存在问题。确实,当时为了方便演示,我们设置了3个业务场景,并且提前写好了SQL语句。当时主要是为了给大家提供演示便利,毕竟很多非技术人员并不熟悉SQL语句的编写。而且,目前主流的text2sql方案也并非十分成熟。今天就带大家实现一个简单的、基于企业知识库的AI Agent的text2sql方案,当然,这个方案属于比较基础的类型。接下来,直接带大家看看效果。

1、工作流AI Agent演示效果

image-20250423165316892

上图我们就通过简单的自然语言查询到student_scores 有多少条记录。

2、AI Agent 演示效果

image-20250423165540692

同样我们使用AI Agent 也实现了text2SQL 的效果。

那么上面的工作流和 AI Agent是如何实现的呢,下面说一下我们的具体实现思路。

3、工作流的制作

在工作流制作之前我们需要用到dify的知识库,之前我很少提到知识库,主要是dify知识库做的不太好。因为这个工作流用到知识库,所以我们顺便把这个知识点说一下。

3.1、知识库创建

在知识库创建之前我们需要向量模型,所以我们需要在系统模型设置里面填写一下 向量模型。

打开右上角设置-模型供应商

image-20250423170131896

我们在找一下右上角有一个系统模型设置。

在这里插入图片描述

在弹开的模型设置里面,我把Embedding 模型、Rerank 模型 设置选一下。

image-20250423170324449

这里Embedding 模型 我们选择了火山引擎提供的 “doubao-embeding”,Rerank 模型 我们这里选择硅基提供的bge-reanker-v2-m3

上面配置好完成我们去知识库面板创建一个知识库

image-20250423171330082

我们点开“创建知识库”。进入文件上传页面

image-20250423171422780

我们需要上传一个创建表的SQL 语句,文件类型是txt

image-20250423171523110

上面txt文本内容如下:

-- 创建学生成绩表
CREATE TABLE `student_scores` (
  `id` bigintNOT 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` dateNOT NULL COMMENT '考试日期',
  `semester` varchar(20) NOT NULL COMMENT '学期',
  `grade` varchar(20) NOT NULL COMMENT '年级',
  `created_at` datetime NOT NULLDEFAULTCURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime NOT NULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
  KEY `idx_student_id` (`student_id`),
  KEY `idx_exam_date` (`exam_date`),
  KEY `idx_subject` (`subject`),
  KEY `idx_class` (`class_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='学生成绩信息表';

我们需要把他上传。

image-20250423171659988

因为这个比较简单我们就用高质量的索引方式创建文本向量,创建完成后,我们完成创建表的SQL 语句知识库创建。

image-20250423171825327

3.2、 工作流制作

我们回到dify 工作台 创建一个 chatflow工作流,前面文章都有提到如何创建chatflow,这里就不做详细展开。

3.2.1、 开始

这个开始节点我们这里不需要用户输入提示词,所以这个节点什么都不需要设置。

image-20250423172202431

3.2.2、知识检索

image-20250423172353392

我们按照上面的步骤完成知识检索节点创建。

查询变量 输入sys.querystring

知识库这里我们点击添加上面配置好的知识库。

image-20250423172523476

添加完成后,我们就设置好知识库检索这个节点。

image-20250423172605019

3.3、 Agent

接下来我们在工作流中添加一个叫做“Agent”工作流节点. (这个Agent是dify 1.0.0之后版本中出现的,之前0.XX系列版本是没有的)

image-20250423173113833

这里我们需要2个工具1个是 agent策略工具 1个是 database 插件。 这2个都是可以在插件市场找到

3.3.1、agent策略工具

image-20250423173309122

3.3.2、database 插件

image-20250423173344754

关于database 插件 可以看我之前的文章dify案例分享-基于database插件实现Text2sql的数据库查询图表工作流

我们可以在https://marketplace.dify.ai/plugins/hjlarry/database?language=zh-Hans 市场上找到这个项目

image-20250409133631280

目前这个项目支持的数据库有mysql, postgresql, sqlite, sqlserver, oracle

mysql+pymysql://root:123456@localhost:3306/test
postgresql+psycopg2://postgres:123456@localhost:5432/test
sqlite:///test.db
mssql+pymssql://<username>:<password>@<freetds_name>/?charset=utf8
oracle+oracledb://user:pass@hostname:port[/dbname][?service_name=<service>[&key=value&key=value...]]

我们在插件市场把它安装好后,就需要对它配置。

image-20250409133852474

我们用的是mysql参考上述链接字符串

mysql+pymysql://root:123456@localhost:3306/test

这里还有一个小技巧,就是如果数据库密码是带有@符号的,我们需要转义一下。否则会出现错误。

image-20250409134100638

上述因为密码也带有特殊符号“@” 和后面的数据链接符号@产生了歧义 这样程序连接就会报错

3.3.3、 如何解决

若要借助转义的方式来处理包含特殊字符 @ 的连接字符串,在标准的数据库连接字符串里,一般没有通用转义符号能直接用在字符串里。不过可以对特殊字符 @ 进行 URL 编码,@ 对应的 URL 编码是 %40

最后的变成

mysql+pymysql://root:zzz%40123@192.168.11.84:19030/test_db

这样修改后再连接就OK 了

image-20250409134212354

image-20250409134627114

看到已授权完成配置。

上面2个工具安装和配置完成后,我们进入Agent策略工具的配置操作。

我们从下拉选项中选中我们前面装的Agent,如果只装了一个这里只有一个下拉选项。Agent 策略中有两个,一个是function calling ,另外一个是ReAct 我们选择第二个“ReAct”

image-20250423173855683

下面的模型选择就非常重要的了。建议你选择火山引擎的deepseek v3 模型,其他模型我测试效率效果不太好。AI agent对模型要求比较高。有的模型达不到效果,后面测试的时候这块很容易翻车。切记用我推荐的模型,其他模型跑不出来就别说没看我文章了。

image-20250423174343651

工具列表中,我们选择databse, 里面有个函数我们都选中它。

image-20250423174500827

这里我们还需要有个设置,在text to SQL 点击设置,弹出对话框中 设置一下数据库模型。

image-20250423174700902

这个地方的模型我们也使用火山引擎的deepseek v3 模型,这2块的操作是本工作流的重点,细节比较多,如果不按照我文档的里面步骤 也很容易翻车。如果你翻车了建议你把这块文章在好好看一下,注意哪地方没设置好。

指令这块填写如下内容:

请根据用户输入的{{#sys.query#}}语句和{{#1745388821686.result#}}相关内容实现SQL语句查询

image-20250423174919168

查询这块我们填入 sys.query

迭代次数默认3次,如果模型能力弱可以把这值在该大一点。

image-20250423175022460

以上我们就完成了Agent 节点的配置。

3.4、 直接回复

下面的直接回复就很简单了,直接把上面Agent输出返回即可。

image-20250423175143715

以上我们就完成了工作流流AI Agent 的搭建了。

4、AI Agent制作

我们回到工作流 创建一个 AI agent

image-20250423175433108

进入AI agent界面,这个地方配置就比较简单了。

系统提示词 我们这里输入 上面的SQL 语句脚本

image-20250423175539098

接下来 在工具里面配置一下database工具。这个配置比较简单,注意就是模型这个地方

image-20250423175731385

右上角 Agent Mode 我们就选择默认的 ReAct

image-20250423175815487

模型这里我们还是选择火山引擎的deepseek v3 模型

image-20250423175921298

image-20250423175901161

以上我们就完成了AI agent 制作。

5、验证及测试

5.1、 工作流AI Agent测试

我们在工作流AI Agent工作流,点击“预览按钮” 输入我们的问题

请帮我查询一下student_scores有多少条记录

image-20250423180224438

我们查询一下数据库有多少条记录

image-20250423180450699

OK 数据量对的。

5.2、 AI Agent测试

接下来我们回到AI Agent 对话窗口中,输入下面的问题

请帮我查询一下student_scores有多少条记录

image-20250423181137977

上面我们通过简单的自然语言实现了一个text2sql,这工作流也可以分享给其他人使用。

6、总结

今天主要带大家了解并实现了基于 Dify 知识库与 AI Agent 的 Text2SQL 工作流方案。借助 Dify 提供的功能,我们首先创建了知识库,上传创建表的 SQL 语句文本,完成文本向量的创建。接着制作工作流,添加开始、知识检索、Agent 和直接回复等节点,对每个节点进行细致配置,尤其在 Agent 节点配置中选择合适的工具、模型和策略,完成工作流 AI Agent 的搭建。之后,我们又创建了 AI Agent,配置系统提示词、工具及模型等

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

### 使用 Dify 实现 Text2SQL 的功能 Dify 是一种强大的工具,能够结合大语言模型(LLM)和知识库来生成 SQL 查询语句,并将其应用于 PostgreSQL 数据库或其他关系型数据库中。以下是关于如何使用 Dify 来实现从自然语言SQL 转换的具体方法。 #### 创建表结构并插入数据 为了使 Dify 正常运行,首先需要准备好目标数据库中的表结构以及相应的测试数据。这一步可以通过标准的 SQL 命令完成[^1]: ```sql CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(100), department VARCHAR(50), salary NUMERIC ); INSERT INTO employees (name, department, salary) VALUES ('Alice', 'HR', 7000); INSERT INTO employees (name, department, salary) VALUES ('Bob', 'Engineering', 9000); INSERT INTO employees (name, department, salary) VALUES ('Charlie', 'Marketing', 8000); ``` #### 导入知识库 在实际应用之前,还需要向 Dify 提供有关业务逻辑的知识库文件。这些文件通常包含领域特定术语及其对应的 SQL 表字段映射关系等内容。例如,在员工管理场景下可能定义如下规则: - “部门”对应 `department` 字段; - “薪资高于 X 元”的条件表达式应翻译成 `salary > X`。 #### 配置 Dify 工作流以支持 SQL 查询 接下来要做的就是设置好整个工作流程让其具备处理用户请求的能力。具体来说,这意味着指定哪些 API 接口负责接收前端传来的 Prompts 并返回解析后的结果;同时也涉及调整内部参数使得最终输出更加贴近预期效果^。 #### 设定 Prompt 模板 Prompt 模板的设计直接影响着 LLM 对于输入的理解程度及生成质量的好坏。因此建议尽可能清晰简洁地描述需求的同时保留足够的灵活性以便适应不同类型的询问形式[^2]。比如针对上述例子可以采用这样的模板:“请告诉我所有来自 {Department} 部门且工资大于等于 {Salary} 的雇员名单。” #### Agent 配置与对话界面集成 最后一点则是关于 Agents 的部署位置还有 UI/UX 方面考量因素等问题讨论。理想状态下应当让用户感觉不到背后复杂的技术细节存在,仅仅通过简单的文字交流就能获得所需信息反馈回来。 ```python from dify import DifyAgent agent = DifyAgent(api_key="your_api_key") response = agent.query(prompt="找出所有属于工程部并且薪水超过八千元的人", db_connection_string="postgresql://user:password@localhost/mydb") print(response) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值