Text2SQL 智能报表方案介绍
0 背景
Text2SQL智能报表方案旨在通过自然语言处理(NLP)技术,使用户能够以自然语言的形式提出问题,并自动生成相应的SQL查询,从而获取所需的数据报表,用户可根据得到结果展示分析从而为结论提供支撑,其次可通过对结果数据与用户问题拆解然后对异常可能存在的问题提供解析。
1 技术框架
智能报表整体架构分为5层,分别为资源配置层、数据存储模块、LLM、智能体开发框架、功能应用。我们要做的就是如何选型与适配各个层之间的交互,数据与大模型本质决定了功能的天花板。
-
机器算力: 大模型部署需要足量的内存(RAM)与显存(GPU),比如部署7B(FP32/4Byter)可能需要7G左右内存,如果要进行微调则需要GPU的加持(如果部署在GPU上推理速度会更快);
-
数据存储
- 知识库(外挂RAG):包含用户需要查询的数据库表详细的描述信息(包含库、表、详细字段);智能体系统描述信息,比如我们系统可能含有一个Text2SQL智能体、数据分析智能体,那么需要一个具体的系统描述信息(角色定位、工具信息描述,输出限制等等);
- 业务数据库:为数据分析等场景提供支持;
- 向量数据库: 对知识库(表结构)向量化,方便快速检索;
-
大模型:
-
从使用方法可分为 :1 API接口调用(前期资源不到位情况可暂时使用API接口调时)2 数据属于保密资产,需要选择本地部署的方式解决泄漏问题;
-
从功能可分为: 1 大语言模型; 2 词向量嵌入模型;
-
-
开发框架应用:提供了一系列工具来简化大模型业务流程,快速开发迭代;
-
服务产品:可按照实现模块进行分期实现,可优先实现Text2SQl 、报表图示、报告生成、智能客服等等;
1.1 Text2SQL
功能:Text-to-SQL(或者Text2SQL,text2Code的子任务),顾名思义就是把文本转化为SQL语言,更学术一点的定义是:把数据库领域下的自然语言(Natural Language,NL)问题,转化为在关系型数据库中可以执行的结构化查询语言(Structured Query Language,SQL),因此Text-to-SQL也可以被简写为NL2SQL。· 输入:自然语言问题,比如“查询表t_user的相关信息,结果按id降序排序,只保留前10个数据 ”· 输出:SQL,比如“SELECT * FROM t_user ORDER BY id DESC LIMIT 10”
优点: Text2SQL 应用主要是帮助用户减少开发时间,降低开发成本。“打破人与结构化数据之间的壁垒”,即普通用户可以通过自然语言描述完成复杂数据库的查询工作,得到想要的结果。
目标:自然语言查询语句 -> SQL 结构化查询语言;
已知:数据库中的有限表,测试集合《text_question,SQL_answer,My_sql_result》
解决方法: PE + LLM
案例1 表少、简单
一个最基础、最直观的提示工程方案是,输入数据库的 Database Schema,即数据库的基本结构(包括表名、列名、主外键关系等等),以及用户的问题,提示模型输入该问题对应的 SQL 语句。这种提示范式可以很方便让 LLM 适应各种不同的数据库与对应的用户查询。近期的一些研究表明,(提示词越精确)在输入中,额外增加表和列的文本描述、小样本示例(即 few-shot Question-SQL pairs)、一定格式描述的数据样本(即数据库中每一个表的随机几行数据样本)等信息有助于 LLM 更好地理解数据库结构,从而生成更准确的 SQL【比如:RSL-SQL】。
-
输入问题提示词以及相关的表结构信息,让大模型产出结果,如下:(通义千问)
解决方法2:PE + RAG / KAG +LLM
案例2 :真实的业务场景面对的是多库、多表、多字段,并且存在表字段描述信息存在语义,在提示中包含完整的数据库信息会导致输入 token 过多,计算成本增加,更重要的是会引入大量噪音。在生成 SQL 之前,用一些方法提前找到与用户问题相关的表和列,然后,输入给大模型的是被显著简化后的 Database Schema,从而达到减小输入噪音并增强 SQL 生成性能的目的【RAG】。
-
首先是如何得到详细描述数据库表的信息,这一个需要具体业务部门(用户)有一个深入的理解;
-
过滤掉与用户问题无关的数据表描述信息(简单、详细、过滤不必要冗余信息);
解决方法3: PE+RAG+SFT+LLM
案例3:存在大量的表、并且已经收集到大量的训练数据;
-
基于积累的训练数据进行微调,得到特定领域的大模型(按照业务、主题划分);
注意:
-
1 记录用户的提问日志,分析用户的行为信息,为下次用户使用提供参考;
-
2 模型微调数据收集:是否正确,如果正确直接放到标注数据中,不正确可以把查询的语句写入;
-
3 如果大模型能力有限,可按照业务或者主题进行切分,增加模型的抗干扰能力;
1.2 大模型
1.2.1 语言大模型(预训练数据库)
目前,基于 LLM 的 Text-to-SQL 主要分为两类技术路线,一类是对一些开源的参数较小的 LLM(如 Deepseek-7B) 进行微调,另一类则是基于闭源的参数较大的 LLM (如 GPT-4、GPT-4o)的提示工程方法。
精度/通用性与模型大小是一个矛盾点,高精度意味着需要跟多的参数(记住所有信息)。如何落地优选平衡二者之间的关系,可以从下面出发:
- 预算足够(有钱),直接使用开源的大模型,通用性能广、理解用户的需求能力更强;
- 预算不足,那就做垂直领域的大模型,基于非房/房订单业务数据(SQL对话数据)对大模型进行微调,数据质量直接决定模型的上线,并且数据的收集需要时间。其次可以通过提示词工程等引导大模型回答;
1.2.2 开源大模型选择
text2SQL : 目标:具备coder、function calling 能力;
本地部署会占用大量内存,下面是目前几个开源大模型。当然如果需要再进行微调,那么需要更多的内存,比如选择Adam优化器,需要额外3倍的模型大小内存,共计4倍(比如deepSeek V2,需要16 * 4 = 64G)
常见底座模型概览:(深度求索、智谱、零壹万物、阿里)
大模型下载地址:
-
HuggingFace: Hugging Face – The AI community building the future.
-
魔塔社区: 魔搭社区
-
Ollama: 统一管理部署
1.2.3 嵌入大模型
目标:为了RAG提供理论模型支持(多维度1024,英文+中文),提前找到与用户问题相关的表和列;
BAAI/bge-large-zh-v1.5
未来主要技术工作内容:
-
提示词工程:新表信息完善、few-shot库构建+ 召回/COT技术;
-
RAG:词向量嵌入,表召回、列召回、粗排到精排;
-
大模型微调;
-
SQL语法修正,多路执行结果投票;
1.3 数据分析与报表
-
智能分析:提供数据理解能力、数据趋势解析等等,可借助业务文档提出切合业务的问题分解,支持归因、TopN、维度下钻、时序预测等等算法,以及动态的操作推荐;
-
智能图示:根据SQL查询结果(或者代码)提供给前端按照具体图例展示;
-
动态预警:借助大模型的动态趋势预警能力,实现数据自动找人,将业务数据的异常波动主动推送到相关人,帮助业务部门及时发现问题并采取有效措施。
-
智能洞察:具备时序异常检测、因果关联、波动归因等主动洞察能力,自动的发现有用结论。
1.4 明确目标
-
用户定位;
-
数据源以及权限定位:所有库表是否有使用限制等条件,需要业务完善相关表信息
功能1 为用户提供参考SQL语句;
功能2 执行SQL代码;
功能3 为前端提供图(图片),还是为前端提供具体执行代码等等;
2 成熟的产品
名称 | 简介 | 特性 | 文章来源 | Star | 缺点 |
---|---|---|---|---|---|
Chat2DB (阿里开源 Chat2DB :一款多数据库客户端工具!) | Chat2DB 是一个功能强大的 SQL 客户端和数据分析工具,支持对话式数据分析,能够辅助生成 SQL。它提供网页和客户端两种使用方式,支持几乎所有流行的数据库,并且开源了7B的SQL模型。 | SQL生成、智能报告、数据探索 | https://www.zhihu.com/search?type=content&q=%E9%98%BF%E9%87%8C%E5%BC%80%E6%BA%90%20Chat2DB%20 github: | GitHub Star 18K | 1 目前 Chat2DB 似乎只支持对单个表格的query。如果想要对多个表格进行操作,需要自己写 prompt。 2 Chat2DB 的使用体验在很大程度上依赖于 LLM 的能力; |
SQL Chat | SQL Chat 是一个基于聊天的 SQL 客户端,使用自然语言与数据库进行交互,支持对数据库的查询、修改、新增和删除等操作。它目前支持MySQL,Postgres,SQL Server和TiDB无服务器。 | 自然语言交互、数据库增删改查 | 9个优秀的Text2Sql(Chat2Sql)开源项目、资源-CSDN博客 github: GitHub - sqlchat/sqlchat: Chat-based SQL Client and Editor for the next decade | GitHub Star 4K | |
VannaAI | Vanna 是麻省理工学院授权的开源 Python RAG(检索增强生成)框架,用于 SQL 生成和相关功能。 | 只需两个步骤——在数据上训练 RAG 模型,然后提出问题,这些问题将返回 SQL 查询,这些查询可以设置为在数据库上自动运行。 | github: | GitHub Star 7.7K | 1 Vanna 需要事先知道数据库的结构信息,包括表名、字段名等。这意味着我们需要先将数据库结构信息导入到 Vanna 中,才能正确地生成 SQL 查询语句。 |
Dataherald | Dataherald 是一个自然语言到 SQL 引擎,专为企业级问答构建。它允许您从数据库中设置一个 API,用简单的对话进行问答。Dataherald 包含四大模块:引擎、管理控制台、企业后端和 Slackbot。 | 模块化设计、核心模块可替换、文本到 SQL 转换、评估模块、易于设置和使用主要数据仓库、主动学习 | GitHub - Dataherald/dataherald: Interact with your SQL database, Natural Language to SQL using LLMs | GitHub Star 3.1K | |
Supersonic | SuperSonic 融合了 Chat BI(基于 LLM)和 Headless BI(基于语义层),打造新一代 BI 平台。通过 SuperSonic 的问答对话界面,用户能够使用自然语言查询数据,系统会选择合适的可视化图表呈现结果。 | 内置 Chat BI 界面以便业务用户输入数据查询、内置 Headless BI 界面以便分析工程师构建语义模型、内置基于规则的语义解析器、支持文本输入联想、多轮对话、查询后问题推荐等高级特征、支持权限控制 | GitHub Star 2.6K | ||
MaxKB | MaxKB = Max Knowledge Base,是一款基于大语言模型和 RAG 的开源知识库问答系统,广泛应用于智能客服、企业内部知识库、学术研究与教育等场景。 | 支持对接各种大语言模型,包括本地私有大模型(包括Llama 3 / Qwen 2等)、国内公共大模型(包括通义千问、腾讯混元、字节豆包、智谱 AI、百度千帆、Kimi、DeepSeek等),以及国外公共大模型(包括OpenAl、Azure OpenAI、Gemini等); |
看好MaxKB!
参考:RSL-SQL. Robust Schema Linking in Text-to-SQL Generation
论文标题:
RSL-SQL: Robust Schema Linking in Text-to-SQL Generation
论文链接:
https://arxiv.org/abs/2411.00073
代码链接:
https://github.com/Laqcce-cao/RSL-SQL
原文地址:https://blog.csdn.net/qq_28611929/article/details/145264851
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!