文章目录
前言
上篇文章中,笔者在Windows平台安装了docker和RAGFlow,建立了本地知识库。本文接下来要介绍如何使用 RAGFlow 实现 Text2SQL。
一、什么是Text2SQL?
Text2SQL利用自然语言处理(NLP)技术,将用户用日常语言提出的问题(如“北京客户的总订单额是多少?”)转化为对应的SQL查询(如SELECT SUM(amount) FROM orders JOIN customers ON orders.customer_id = customers.id WHERE city = ‘北京’;)。
旨在帮助用户无需掌握SQL语法即可直接通过自然语言与数据库交互。
二、RAGFlow中对text2sql的实现方法:agent
2024年9月,RAGFlow提供了一份官方教程。接下来以此为基础,详细介绍下如何运行。
步骤1. 新建agent,并使用DB Assistant模板
步骤2. 配置知识库
首先需要访问:https://huggingface.co/datasets/InfiniFlow/text2sql/tree/main …科学上网
把三个文件下载下来。
接下来要利用上面三个文件,分别创建三个知识库;在导入文件后,解析之前,配置每个知识库的切片方式。
DB Description 知识库:该知识库包含了查询到的数据库的准确信息,包括但不限于数据库表的含义以及这些表中不同字段的意义。借助数据库中的详细描述,大型语言模型可以更准确地将用户问题转换为 SQL 语句。建议配置 DB Description 知识库解析设置如下:
DDL 知识库:LLM 需要准确的 DDL(数据定义语言)数据来生成 SQL 语句,例如表结构和字段信息。DDL 知识库保存正确的 DDL 数据,以便进行有效的数据库查询。解析 DDL 知识库的推荐配置如下:
Q->SQL 知识库:在 Text2SQL 过程中,向 LLM 提供自然语言样本及其相应的 SQL 语句对可以提高生成的 SQL 语句的质量。Q->SQL 知识库存储此类对。解析 Q->SQL 知识库的推荐配置如下:
进入刚刚新建好的agent,找到红框,并分别选中三个知识库。
步骤3. 配置数据库
选中红色框Execute SQL 组件中配置数据库所需的参数,填入你自己的数据库信息。如果是docker安装的RAGFlow,在主机地址那里,需要填host.docker.internal。(我试过127.0.0.1或者localhost,不行)填好后,点击右下角test,查看连接是否成功
步骤4. 接入好用的api
需要注意的是,如果你将红框选中了比较弱的模型(比如本地安装的deepseek14b等),那么你提问它会回答:ERROR。让我误以为我自己的配置有问题…
所以此处建议使用apikey,接入比较强的模型,才能回答出正确的答案。本文接入了阿里千问的MAX模型。当然,我是刚注册,可以白嫖token…
使用
单击运行按钮,可以进行对话。
单表查询
如上图所示,数据库中只有一张表格。提问:表格course中共有多少条数据?它能够正确回答:4
多表查询
如上图所示,数据库中有三张表格。提问:学生’谢逊’的学号是多少?无法回答。。。
总结
本文介绍了RAGFlow中agent的使用,尝试了单表查询和多表查询。结果表明,目前的多表查询性能弱。