前言
RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不同的复杂格式数据提供可靠的问答以及有理有据的引用。
如果还没安装RAGFlow的小伙伴可以参考这个帖子:RAGFlow部署
前置条件
本篇将介绍如何通过RAGFlow实现一个TextToSQL的agent。默认你已部署好RAGFlow,并配置了聊天模型和嵌入模型。
数据库环境:MySql8.0
配置知识库
TextToSQL需要以下三个知识库:
(a)DDL:数据库建表语句。
(b)DB Description:表和列的说明。
(c)Q->SQL:参考SQL。
1.配置DDL知识库
a.DDL内容:
CREATE TABLE `vendor` ( `id` varchar(66) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , `status` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'Normal', `sync_mode` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , `description` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , `created_time` datetime(0) NULL DEFAULT NULL , PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; CREATE TABLE `vendor_task` ( `id` varchar(66) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `vendor_id` varchar(66) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , `status` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , `type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , `error_msg` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `retry_num` tinyint(4) NULL DEFAULT 0 , `next_retry_date` datetime(0) NULL DEFAULT NULL , `created_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
b.新建DDL知识库
路径:Knowledge>Create knowledge base
嵌入模型选择自带的模型,分块方式选择General就可以了。选择好后点击保存。
然后上传DDL.txt文件进行解析。
2.新建DB Description知识库
a.DB Description内容如下:
### vendor(厂商表) vendor表记录了厂商的详细信息。以下是该表中每个字段的含义: id:厂商唯一标识符。 name:厂商名称。 status:厂商状态。其中Normal代表正常;Disabled代表禁用。 sync_mode:同步模式。其中SystemAuto代表系统自动模式;Human代表人工无确认模式;HumanConfirm代表人工确认模式。 created_time:创建时间。 ### vendor_task(厂商任务表) vendor_task表记录厂商任务的详细信息。以下是该表中每个字段的含义: id:厂商任务唯一标识符。 vendor_id:外键,引用vendor表中的id,指示哪个厂商的任务。 status:任务状态。其中NO_SYNC代表不同步;DEFAULT 待同步;PROCESSING 处理中;SUCCESS 成功;FAILED 失败;CANCELLED 取消;UNCONFIRMED 待确认;CONFIRMED 已确认。 type:任务类型。其中OpenCard 开卡;LossCard 挂失;UnLossCard 解除挂失;ReturnCard 退卡;ReplaceCard 换卡。 error_msg:错误信息。 reamrk:备注。 content:任务内容。 retry_num:任务重试次数。 next_retry_date:任务下次重试时间。 created_time:创建时间。
b.同样的方式,设置DB Description知识库
3.新建Q->SQL知识库
这是我配置的参考SQL,列举了一些任务失败、异常任务和正常重试任务的例子。
问题:列举所有的厂商 回答:select id,name,description from vendor; 问题:开卡失败的任务数量 回答:select count(*) 'total_count' from vendor_task where status = 'FAILED' and type = 'OpenCard'; 问题:获取异常的任务 回答:SELECT t.id,v.`name`,t.type,t.created_time FROM vendor_task t LEFT JOIN vendor v ON t.vendor_id = v.id WHERE t.`status` = 'DEFAULT' AND t.retry_num > 0 AND next_retry_date < NOW(); 问题:列表10条最新的异常任务 回答:SELECT t.id,v.`name`,t.type,t.created_time FROM vendor_task t LEFT JOIN vendor v ON t.vendor_id = v.id WHERE t.`status` = 'DEFAULT' AND t.retry_num > 0 AND next_retry_date < NOW() ORDER BY t.created_time DESC LIMIT 10; 问题:获取正在重试的任务 回答:SELECT t.id,v.`name`,t.type,t.created_time FROM vendor_task t LEFT JOIN vendor v ON t.vendor_id = v.id WHERE t.`status` = 'DEFAULT' AND t.retry_num > 0 AND next_retry_date >= NOW() ORDER BY t.created_time DESC;
最终要整理成Excel,格式如下:
a.新建Q->SQ知识库
这里要注意,因为我们要上传的是Excel,所以解析方式要选择Q&A。
b.上传QA.xlsx
4.构建TextToSQl的Agent
路径:Agent -> Create agent -> Text To SQL
新建后系统默认生成一个模板。我们只需要添加一个ExeSQL插件即可。如图所示:
然后分别对DDL、Q->SQL、DB_Description、GenSQL和ExeSQL进行配置。
a.DDL
单击DDL,Input选择Interface,知识库选择之前新建的DDL知识库。
b.DB Description
c.Q->SQL
d.LLM
e.ExeSQL
5.运行
完成以上配置后,点击Run,我们就可以提问了。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章