Text2SQL智能报表方案技术详解
Text2SQL智能报表方案技术详解
Text2SQL智能报表方案通过自然语言处理技术,让用户能够以自然语言的形式提出问题,并自动生成相应的SQL查询,从而获取所需的数据报表。本文将详细介绍该方案的技术框架、实现方法以及相关产品。
0 背景
Text2SQL智能报表方案旨在通过自然语言处理(NLP)技术,使用户能够以自然语言的形式提出问题,并自动生成相应的SQL查询,从而获取所需的数据报表。用户可以根据得到的结果进行展示和分析,为结论提供支撑。此外,该方案还可以通过对结果数据与用户问题的拆解,帮助识别可能存在的异常问题。
1 技术框架
智能报表整体架构分为5层,分别为资源配置层、数据存储模块、LLM、智能体开发框架、功能应用。在设计时需要考虑如何选型与适配各个层之间的交互,因为数据与大模型的本质决定了功能的上限。
1.1 资源配置层
- 机器算力:大模型部署需要足量的内存(RAM)与显存(GPU)。例如,部署7B(FP32/4Byter)可能需要7G左右内存,如果要进行微调则需要GPU的支持(如果部署在GPU上推理速度会更快)。
1.2 数据存储模块
- 知识库(外挂RAG):包含用户需要查询的数据库表的详细描述信息(包含库、表、详细字段);智能体系统描述信息,比如系统可能包含Text2SQL智能体、数据分析智能体,需要具体的系统描述信息(角色定位、工具信息描述,输出限制等)。
- 业务数据库:为数据分析等场景提供支持。
- 向量数据库:对知识库(表结构)进行向量化,方便快速检索。
1.3 大模型
- 使用方法分类:
- API接口调用(前期资源不到位情况可暂时使用API接口调用)
- 本地部署(数据属于保密资产时选择本地部署以解决泄漏问题)
- 功能分类:
- 大语言模型
- 词向量嵌入模型
1.4 开发框架应用
提供了一系列工具来简化大模型业务流程,支持快速开发迭代。
1.5 服务产品
可按照实现模块进行分期实现,优先实现Text2SQL、报表图示、报告生成、智能客服等功能。
1.6 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.7 大模型
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.8 数据分析与报表
- 智能分析:提供数据理解能力、数据趋势解析等,可借助业务文档提出切合业务的问题分解,支持归因、TopN、维度下钻、时序预测等算法,以及动态的操作推荐;
- 智能图示:根据SQL查询结果(或者代码)提供给前端按照具体图例展示;
- 动态预警:借助大模型的动态趋势预警能力,实现数据自动找人,将业务数据的异常波动主动推送到相关人,帮助业务部门及时发现问题并采取有效措施。
- 智能洞察:具备时序异常检测、因果关联、波动归因等主动洞察能力,自动发现有用结论。
1.9 明确目标
- 用户定位;
- 数据源以及权限定位:所有库表是否有使用限制等条件,需要业务完善相关表信息
功能:
- 为用户提供参考SQL语句;
- 执行SQL代码;
- 为前端提供图(图片),还是为前端提供具体执行代码等。
2 成熟的产品
名称 | 简介 | 特性 | 文章来源 | Star | 缺点 |
---|---|---|---|---|---|
Chat2DB(阿里开源 Chat2DB:一款多数据库客户端工具!) | Chat2DB 是一个功能强大的 SQL 客户端和数据分析工具,支持对话式数据分析,能够辅助生成 SQL。它提供网页和客户端两种使用方式,支持几乎所有流行的数据库,并且开源了7B的SQL模型。 | SQL生成、智能报告、数据探索 | github: GitHub - CodePhiliaX/Chat2DB: ???AI-driven database tool and SQL client, The hottest GUI client, supporting MySQL, Oracle, PostgreSQL, DB2, SQL Server, DB2, SQLite, H2, ClickHouse, and more. | GitHub Star 18K | |
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 - vanna-ai/vanna: ?? Chat with your SQL database ??. Accurate Text-to-SQL Generation via LLMs using RAG ??. | 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 - tencentmusic/supersonic: SuperSonic is the next-generation AI+BI platform that unifies Chat BI (powered by LLM) and Headless BI (powered by semantic layer) paradigms. | 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