利用 RAGFlow 的 RAG 功能构建 Text2SQL Agent

 Text2SQL 代理弥补了自然语言处理 (NLP) 和结构化查询语言 (SQL) 之间的差距。其主要优势如下:

  • 帮助非技术用户使用 SQL并非所有用户都具有 SQL 背景或了解查询所涉及的表的结构。使用 Text2SQL 代理,用户可以用自然语言提出问题或请求数据,而无需深入了解数据库结构或 SQL 语法。

  • 提高 SQL 开发效率对于熟悉 SQL 的用户,Text2SQL 代理简化了流程,使用户能够快速构建复杂查询,而无需手动编写每个部分的代码。

  • 最大限度地减少错误手动编写 SQL 查询很容易出错,尤其是对于复杂的查询或不熟悉数据库结构的用户。Text2SQL 代理可以解释自然语言指令并生成准确的 SQL 查询,从而减少潜在的语法和逻辑错误。

  • 提升数据分析能力在商业智能和数据分析中,快速从数据中获取见解至关重要。Text2SQL 代理有助于更直接、更方便地从数据库中提取有价值的信息,从而有助于加快决策。

  • 自动化和集成Text2SQL 代理可以集成到更大的系统中,以支持自动化工作流程,例如自动生成报告和数据监控。它还可以与其他服务和技术无缝集成,提供更丰富的应用可能性。

  • 支持多种语言和多种表达方式人们可以用多种方式表达同一个想法。一个有效的 Text2SQL 系统应该能够理解各种表达方式并准确地将其转换为 SQL 查询。

       总之,Text2SQL 代理致力于使数据库查询更加直观和用户友好,同时确保效率和准确性。它迎合了广泛的用户群体,从完全不懂技术的个人到经验丰富的数据分析师和开发人员。

       然而,传统的 Text2SQL 解决方案通常需要模型微调,当在企业环境中与 RAG 或 Agent 组件一起实施时,这会大大增加部署和维护成本。RAGFlow 基于 RAG 的 Text2SQL 利用现有的(连接的)大型语言模型 (LLM),允许与其他 RAG/Agent 组件无缝集成,而无需额外的微调模型。

       基于RAG提供的Text2SQL的工作流程:

图片

数据准备

数据库环境

Mysql-8.0.39

数据库表创建
    SET NAMES utf8mb4;
    -- ------------------------------ Table structure for Customers-- ----------------------------DROP TABLE IF EXISTS `Customers`;CREATE TABLE `Customers` (  `CustomerID` int NOT NULL AUTO_INCREMENT,  `UserName` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,  `Email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,  `PhoneNumber` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,  PRIMARY KEY (`CustomerID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
    -- ------------------------------ Table structure for Products-- ----------------------------DROP TABLE IF EXISTS `Products`;CREATE TABLE `Products` (  `ProductID` int NOT NULL AUTO_INCREMENT,  `ProductName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,  `Description` text COLLATE utf8mb4_unicode_ci,  `Price` decimal(10,2) DEFAULT NULL,  `StockQuantity` int DEFAULT NULL,  PRIMARY KEY (`ProductID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
    -- ------------------------------ Table structure for Orders-- ----------------------------DROP TABLE IF EXISTS `Orders`;CREATE TABLE `Orders` (  `OrderID` int NOT NULL AUTO_INCREMENT,  `CustomerID` int DEFAULT NULL,  `OrderDate` date DEFAULT NULL,  `TotalPrice` decimal(10,2) DEFAULT NULL,  PRIMARY KEY (`OrderID`),  KEY `CustomerID` (`CustomerID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
    -- ------------------------------ Table structure for OrderDetails-- ----------------------------DROP TABLE IF EXISTS `OrderDetails`;CREATE TABLE `OrderDetails` (  `OrderDetailID` int NOT NULL AUTO_INCREMENT,  `OrderID` int DEFAULT NULL,  `ProductID` int DEFAULT NULL,  `UnitPrice` decimal(10,2) DEFAULT NULL,  `Quantity` int DEFAULT NULL,  `TotalPrice` decimal(10,2) DEFAULT NULL,  PRIMARY KEY (`OrderDetailID`),  KEY `OrderID` (`OrderID`),  KEY `ProductID` (`ProductID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    配置知识库

            对于 RAGFlow 基于 RAG 的 Text2SQL,通常需要以下知识库:

    • DDL数据库表创建语句。
    • DB_Description表和列的详细描述。
    • Q->SQL自然语言查询描述以及相应的 SQL 查询示例(问答对)。

           然而,在专门的查询场景中,用户查询可能包括领域特定术语的缩写或同义词。如果用户引用领域特定术语的同义词,系统可能无法生成正确的 SQL 查询。因此,建议整合同义词词库,以帮助代理生成更准确的 SQL 查询。

    • TextSQL_Thesaurus涵盖特定领域术语及其同义词的同义词库。
    配置DDL知识库
    1. 1.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;

      2.设置 DLL 知识库的块数据, 嵌入模型选择自带的模型,分块方式选择General就可以了。选择好后点击保存。
      https://img1.sycdn.imooc.com/84b5c56709d2a2ac09380860.jpg
      然后上传DDL.txt文件进行解析。

      https://img1.sycdn.imooc.com/251e746709d2a3b518230670.jpg

      配置DB_Description知识库

      1.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:创建时间。

        2.设置 DB_Description 知识库的块数据

        https://img1.sycdn.imooc.com/9c81516709d2a54f18210582.jpg

        配置Q->SQL知识库QA.xlsx

        这是我配置的参考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,格式如下:

          https://img1.sycdn.imooc.com/09610f6709d93c3114910612.jpg

          这里要注意,因为我们要上传的是Excel,所以解析方式要选择Q&A。

          https://img1.sycdn.imooc.com/8227526709d93b4708490818.jpg

          上传QA.xlsx

          https://img1.sycdn.imooc.com/6189306709d93bdf18900808.jpg

          构建TextToSQl的Agent

              路径:Agent -> Create agent -> Text To SQL

              新建后系统默认生成一个模板。我们只需要添加一个ExeSQL插件即可。如图所示:

          https://img1.sycdn.imooc.com/c5687f6709d93d8419200927.jpg

          然后分别对DDL、Q->SQL、DB_Description、GenSQL和ExeSQL进行配置。

              a.DDL

              单击DDL,Input选择Interface,知识库选择之前新建的DDL知识库。

          https://img1.sycdn.imooc.com/72e1ae6709d93e4716700868.jpg

            b.DB Description

          https://img1.sycdn.imooc.com/cdad076709d93ebe16710864.jpg

            c.Q->SQL

          https://img1.sycdn.imooc.com/4454e66709d93f1d16580881.jpg

              d.LLM

          https://img1.sycdn.imooc.com/9556666709d93f6c16850860.jpg

            e.ExeSQL

          https://img1.sycdn.imooc.com/c1d0a86709d9404c16730861.jpg

          5.运行

              完成以上配置后,点击Run,我们就可以提问了。

          https://img1.sycdn.imooc.com/77363b6709d9418216750861.jpg

          📢喜欢的小伙伴欢迎

           

           如何学习AI大模型?

          我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

          我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

          第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

          第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

          第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

          第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

          第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

          第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

          第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。


          👉学会后的收获:👈
          • 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

          • 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

          • 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

          • 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。


          1.AI大模型学习路线图
          2.100套AI大模型商业化落地方案
          3.100集大模型视频教程
          4.200本大模型PDF书籍
          5.LLM面试题合集
          6.AI产品经理资源合集

          👉获取方式:
          😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

          ### 使用RAG方法实现从文本到SQL查询的转换 在处理从自然语言描述转化为结构化查询语言(SQL)的任务时,采用检索增强生成(Retrieval-Augmented Generation, RAG)的方法能够显著提升模型的表现。为了高效地从数据源中检索相关文档,在创建高效的检索器方面存在诸多挑战[^1]。 #### 准确语义表示 对于如何达成精准的语义表达这一问题,可以利用预训练的语言模型来编码输入文本以及数据库模式(schema),从而获得高质量的向量表示。这些向量不仅捕捉到了单词级别的特征,还包含了更深层次的意义信息。通过这种方式,即使面对复杂的查询请求也能得到较为理想的解析结果。 ```python from transformers import AutoTokenizer, RagRetriever, RagSequenceForGeneration tokenizer = AutoTokenizer.from_pretrained("facebook/rag-token-nq") retriever = RagRetriever.from_pretrained("facebook/rag-token-nq", index_name="exact", use_dummy_dataset=True) model = RagSequenceForGeneration.from_pretrained("facebook/rag-token-nq", retriever=retriever) def encode_input(text_query): inputs = tokenizer([text_query], return_tensors='pt') return model.generate(inputs['input_ids']) ``` #### 对齐查询与文档间的语义空间 针对使查询和文档之间的语义空间相匹配的问题,可以通过微调特定领域内的大规模预训练模型来解决。具体来说就是收集大量关于将自然语言映射成对应SQL语法的数据集,并以此为基础调整参数直至达到预期效果为止。此过程有助于缩小两者间差距并提高最终输出的质量。 #### 调整检索器输出以适应大型语言模型偏好 最后一点则是要确保检索出来的片段能很好地迎合下游任务——即在此处是指生成有效的SQL命令。这通常涉及到对候选答案进行排序筛选操作;优先考虑那些最有可能满足实际需求的结果。此外还可以引入额外机制比如基于规则过滤或是人工设定权重等方式进一步优化整个流程。 综上所述,借助于上述三个方面的努力便可以在一定程度上克服构建有效检索系统的难题,进而更好地服务于诸如由文本转SQL这类应用场景之中。
          评论
          添加红包

          请填写红包祝福语或标题

          红包个数最小为10个

          红包金额最低5元

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

          抵扣说明:

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

          余额充值