使用 RAGFlow 实现 Text2SQL
RAGFlow根据社区需求引入了 Text2SQL 功能。传统的 Text2SQL 需要模型微调,这在企业环境中与 RAG 或 Agent 组件一起使用时,会显著增加部署和维护成本。RAGFlow 基于 RAG 的 Text2SQL 利用现有的(已连接的)大型语言模型 (LLM),实现了与RAG/Agent 组件的无缝集成,无需额外的微调模型。<!--truncate-->

以下流程解释了如何实现基于 RAG 的 Text2SQL 功能

一般来说,你需要为生成 Text2SQL 提示准备一个知识库,其中包含自然语言转换为 SQL 语句的各种示例。用户查询首先发送到此知识库以检索相似示例。然后将检索到的示例串联到 LLM 的提示中,以生成最终的 SQL 语句。生成的 SQL 直接用于查询数据库。如果返回结果不正确,或者更糟的是,什么都没有检索到,则生成的 SQL 将被视为不正确,并再次调用 LLM 以重新生成 SQL 语句,直到达到预设的上限。
因此,Text2SQL 依赖多轮编排。RAGFlow 将此 Text2SQL 功能封装到一个方便的内置 Agent 组件中。在即将发布的版本中,我们计划调整此工作流程。目标是让用户能够手动添加或更新知识库中的 text2SQL 示例,如上面的虚线箭头所示。
Text2SQL 演示

在 RAGFlow 中使用 Text2SQL
以下是在 RAGFlow 中使用 Text2SQL 的指南
1. 从模板创建 Agent


2. 配置知识库
在提供的 DB Assistant 模板中,RAGFlow 使用三种类型的知识库来确保 Text2SQL 的性能
- DDL 知识库
- Q->SQL 知识库
- 数据库描述 知识库

DDL 知识库:LLM 需要准确的 DDL(数据定义语言)数据来生成 SQL 语句,例如表结构和字段信息。DDL 知识库包含正确的 DDL 数据,以实现有效的数据库查询。DDL 知识库的推荐解析配置如下

示例:https://hugging-face.cn/datasets/InfiniFlow/text2sql/tree/main
Q->SQL 知识库:在 Text2SQL 过程中,向 LLM 提供自然语言及其对应的 SQL 语句对的示例可以提高生成 SQL 语句的质量。Q->SQL 知识库存储此类对。Q->SQL 知识库的推荐解析配置如下

示例:https://hugging-face.cn/datasets/InfiniFlow/text2sql/tree/main
数据库描述 知识库:此知识库包含有关查询数据库的准确信息,包括但不限于数据库表的含义以及这些表中不同字段的意义。通过数据库的详细描述,大型语言模型可以更准确地将用户问题转换为 SQL 语句。建议将数据库描述知识库解析设置配置如下

示例:https://hugging-face.cn/datasets/InfiniFlow/text2sql/tree/main
3. 配置数据库
- 在 Execute SQL 组件中配置数据库所需参数,包括
- 数据库类型(目前支持 MySQL、PostgresDB 和 MariaDB)
- 数据库名称
- 数据库用户名
- 数据库 IP 地址
- 数据库端口号
- 数据库密码

- 完成配置后,点击 测试 按钮检查连接是否成功。
- 配置 循环 参数
RAGFlow 中的 Text2SQL 具有自动反思功能。如果生成的 SQL 被认为能够正确查询,结果将直接返回。但是,如果查询失败,RAGFlow 的 Text2SQL 将根据数据库返回的错误信息自动更正 SQL 语句并重试查询。此过程——查询失败、SQL 语句更正和重试——将持续迭代,直到达到循环参数设置的最大限制。如果达到此最大值,Text2SQL 过程将终止,提示用户在再次尝试之前优化他们的问题或知识库数据。
- 配置 TopN:此参数限制查询中返回的记录数,因为查询通常涉及记录。
4. 尝试 Text2SQL
点击 运行 执行操作。
故障排除
数据库连接失败
未能连接到数据库。要解决此问题
- 点击 Execute SQL 组件,确保所有参数均已正确设置。
- 再次检查部署 RAGFlow 的机器是否可以使用提供的连接信息连接到数据库。
- 点击 测试 检查数据库连接是否成功建立。
未找到 SQL 语句!
用户查询无法转换为 SQL 语句,主要原因是知识库不足或不完整。建议扩展上述三个知识库。
数据库中没有记录!
SQL 查询未能从表中检索到任何记录,原因可能是过滤条件过于严格或表本身不包含数据。
达到最大循环次数。无法通过 SQL 语句查询到正确数据。
生成的 SQL 语句无法准确查询数据库。请检查以下内容
- 确保数据库包含相关数据。
- 验证用户问题是否恰当。
- 确认 生成 SQL 语句 LLM 和 修复 SQL 语句 LLM 组件生成的 SQL 语句是否正确。
