跳转到主内容

使用 RAGFlow 实现 Text2SQL

阅读5分钟

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. 配置数据库

  1. Execute SQL 组件中配置数据库所需参数,包括
    • 数据库类型(目前支持 MySQL、PostgresDB 和 MariaDB)
    • 数据库名称
    • 数据库用户名
    • 数据库 IP 地址
    • 数据库端口号
    • 数据库密码

  1. 完成配置后,点击 测试 按钮检查连接是否成功。
  2. 配置 循环 参数

RAGFlow 中的 Text2SQL 具有自动反思功能。如果生成的 SQL 被认为能够正确查询,结果将直接返回。但是,如果查询失败,RAGFlow 的 Text2SQL 将根据数据库返回的错误信息自动更正 SQL 语句并重试查询。此过程——查询失败、SQL 语句更正和重试——将持续迭代,直到达到循环参数设置的最大限制。如果达到此最大值,Text2SQL 过程将终止,提示用户在再次尝试之前优化他们的问题或知识库数据。

  1. 配置 TopN此参数限制查询中返回的记录数,因为查询通常涉及记录。

4. 尝试 Text2SQL

点击 运行 执行操作。

故障排除

数据库连接失败

未能连接到数据库。要解决此问题

  1. 点击 Execute SQL 组件,确保所有参数均已正确设置。
  2. 再次检查部署 RAGFlow 的机器是否可以使用提供的连接信息连接到数据库。
  3. 点击 测试 检查数据库连接是否成功建立。

未找到 SQL 语句!

用户查询无法转换为 SQL 语句,主要原因是知识库不足或不完整。建议扩展上述三个知识库。

数据库中没有记录!

SQL 查询未能从表中检索到任何记录,原因可能是过滤条件过于严格或表本身不包含数据。

达到最大循环次数。无法通过 SQL 语句查询到正确数据。

生成的 SQL 语句无法准确查询数据库。请检查以下内容

  • 确保数据库包含相关数据。
  • 验证用户问题是否恰当。
  • 确认 生成 SQL 语句 LLM修复 SQL 语句 LLM 组件生成的 SQL 语句是否正确。
© . This site is unofficial and not affiliated with InfiniFlow.