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

以下管道解释了如何基于RAG实现Text2SQL功能:

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

在RAGFlow中使用Text2SQL
以下是关于如何在RAGFlow中使用Text2SQL的指南:
1. 从模板创建代理


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

DDL 知识库:一个LLM需要准确的DDL(数据定义语言)数据来生成SQL语句,例如表结构和字段信息。DDL知识库保存了正确的DDL数据,以便有效地进行数据库查询。解析DDL知识库的推荐配置如下:

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

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

示例: https://huggingface.co/datasets/InfiniFlow/text2sql/tree/main
3. 配置数据库
- Configure the required parameters for the database in the Execute SQL component, including:
- 数据库类型(目前支持 MySQL、PostgresDB 和 MariaDB)
- 数据库名称
- 数据库用户名
- 数据库IP地址
- 数据库端口号
- 数据库密码

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