在RAGFlow中实践Text2SQL

RAGFlow 0.10 正式发布,应广大社区用户要求,引入了Text2SQL特性。传统上Text2SQL依赖于对模型微调,而在企业场景中,经常会面临RAG/Agent搭配Text2SQL的场景,这时如果再部署一个微调的大模型,势必会影响部署和维护成本。因此RAGFlow基于RAG也推出了Text2SQL功能,这样可以仅依赖现有的大模型即可提供Text2SQL能力,方便让Text2SQL搭配其他RAG/Agent算子共同工作。

那么如何基于RAG来提供Text2SQL能力呢?工作流程可以参见下图:

我们需要准备一个专门用于生成Text2SQL提示词的知识库,该知识库包含各类自然语言到SQL的样例数据。当用户向RAGFlow发起一个Text2SQL提问时,先到该知识库中进行搜索,找到相似结果后拼接成生成SQL的提示词,再把该提示词发给大模型,让大模型生成最终的SQL。该SQL可以直接用来查询数据库,如果返回结果出现错误,证明产生的SQL不对,那么需要继续调用大模型让它产生一个正确的SQL直到错误次数超过上限。

因此,Text2SQL依赖于Agent框架来实现多次交互任务的编排,在0.10.0 版本的RAGFlow中,Text2SQL被固化为内置的Agent算子,方便参与到整个用户侧的工作流中。在后续版本中,当返回结果出错后,以上的工作流程会做进一步调整,就是让人工介入输入正确的SQL,该SQL会被更新到知识库当中,方便未来的提问生成正确的SQL,如上图的虚线箭头所示意。

下边是在RAGFlow中使用Text2SQL的操作指南:

Text2SQL 结果展示

如何在RAGFlow中使用Text2SQL

  1. 在RAGFlow Agent中创建DB Assistant 模板

2. 配置Text2SQL 知识库

在RAGFlow中需要提供三种知识库来确保Text2SQL结果的质量,分别是:DDL知识库 ,Q->SQL知识库,DB Description知识库。

DDL知识库:大语言模型生成SQL语句需要准确的数据库DDL数据,包含但不限于表结构,表字段信息等等,因此在DDL知识库中需要提供准确的所查询数据库的DDL数据,DDL知识库解析配置建议设置为如下:

DDL知识库数据参考:https://huggingface.co/datasets/InfiniFlow/text2sql/tree/main。

Q->SQL知识库:在Text2SQL生成过程中,对大语言模型提供samples往往能提高生成的SQL语句的质量,因此在Q->SQL知识库中需要提供自然语言->对应的SQL语句的samples,如果能够提供所查询的数据库Q->SQL的samples,则Text2SQL结果质量更高。Q->SQL知识库解析配置建议设置如下:

Q->SQL知识库数据参考:https://huggingface.co/datasets/InfiniFlow/text2sql/tree/main

DB Description知识库:该知识库包含准确的所查询数据库的相关信息,包括但不限于数据库表的含义,数据库表中不同字段所代表的含义,依据详细的数据库各项描述信息,大语言模型能够更加精准的将用户的问题转换为SQL语句。DB Description知识库解析配置建议设置如下:

DB Description知识库数据参考:

https://huggingface.co/datasets/InfiniFlow/text2sql/tree/main

3. 配置数据库

将所需查询的数据库各项参数在Execute SQL中进行配置,包括:

1)数据库的类型(目前支持Mysql,PostgresDB和MariaDB)

2)数据库名称

3)数据库用户名

4)数据库IP地址

5)数据库端口号

6)数据库密码

配置完成后可以点击Test按钮来测试是否连接成功

Loop参数:RAGFlow中Text2SQL具备自动反思迭代的能力。针对用户的问题,如果大语言模型生成的SQL查询成功则会直接将结果进行返回。 如果大语言模型生成的SQL查询失败,则RAGFlow Text2SQL则会针对数据库查询返回的错误信息和SQL语句进行自动更正进行再次查询,该过程(查询失败->更正SQL语句->再次查询)最大迭代次数则为Loop参数的值,如果迭代次数超过Loop值,查询结果仍然失败,则程序自动结束Text2SQL过程,请优化用户问题或知识库数据再次尝试。

TopN参数:数据库查询中往往包含大量的记录,该参数用于限制所返回的记录数量。

4. Go

接下来点击Run就可以执行了。

常见问题

1. Database Connection Failed!

数据库连接失败,需要检查Execute SQL组件中数据库各项参数是否正确,确保部署RAGFlow的机器按照所填的信息是能够连接到数据库的,点击test进行测试数据库是否能够连接成功。

2. SQL statement not found!

这意味着Text2SQL不能将用户问题转化为SQL语句,对于LLM来说可能所需要的咨询太少或不完整,可丰富上面提到的三个知识库。

3. No record in the database!

表示该SQL查询从数据库表中查询到的记录数为0,有可能过滤条件过为严苛,或数据库该表为空表。

4. Maximum loop time exceeds. Can't query the correct data via SQL statement.

该问题表示Text2SQL对用户问题转化之后对应的SQL语句不能正确的从数据库中进行查询,请检查数据库中是否包含该查询对应的内容,用户问题是否合适,Generate SQL Statement LLM 组件和Fix SQL Statement LLM组件生成的SQL语句是否正确。

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值