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】。

  1. 首先是如何得到详细描述数据库表的信息,这一个需要具体业务部门(用户)有一个深入的理解;

  2. 过滤掉与用户问题无关的数据表描述信息(简单、详细、过滤不必要冗余信息);

解决方法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)的提示工程方法。

精度/通用性与模型大小是一个矛盾点,高精度意味着需要跟多的参数(记住所有信息)。如何落地优选平衡二者之间的关系,可以从下面出发:

  1. 预算足够(有钱),直接使用开源的大模型,通用性能广、理解用户的需求能力更强;
  2. 预算不足,那就做垂直领域的大模型,基于非房/房订单业务数据(SQL对话数据)对大模型进行微调,数据质量直接决定模型的上线,并且数据的收集需要时间。其次可以通过提示词工程等引导大模型回答;

1.2.2 开源大模型选择

text2SQL : 目标:具备coder、function calling 能力;

本地部署会占用大量内存,下面是目前几个开源大模型。当然如果需要再进行微调,那么需要更多的内存,比如选择Adam优化器,需要额外3倍的模型大小内存,共计4倍(比如deepSeek V2,需要16 * 4 = 64G)

常见底座模型概览:(深度求索、智谱、零壹万物、阿里)

大模型下载地址:

  1. HuggingFace: Hugging Face – The AI community building the future.

  1. 魔塔社区: 魔搭社区

  1. Ollama: 统一管理部署

1.2.3 嵌入大模型

目标:为了RAG提供理论模型支持(多维度1024,英文+中文),提前找到与用户问题相关的表和列;

BAAI/bge-large-zh-v1.5

未来主要技术工作内容:

  1. 提示词工程:新表信息完善、few-shot库构建+ 召回/COT技术;

  1. RAG:词向量嵌入,表召回、列召回、粗排到精排;

  1. 大模型微调;

  1. SQL语法修正,多路执行结果投票;

1.3 数据分析与报表

  • 智能分析:提供数据理解能力、数据趋势解析等等,可借助业务文档提出切合业务的问题分解,支持归因、TopN、维度下钻、时序预测等等算法,以及动态的操作推荐;

  • 智能图示:根据SQL查询结果(或者代码)提供给前端按照具体图例展示;

  • 动态预警:借助大模型的动态趋势预警能力,实现数据自动找人,将业务数据的异常波动主动推送到相关人,帮助业务部门及时发现问题并采取有效措施。

  • 智能洞察:具备时序异常检测、因果关联、波动归因等主动洞察能力,自动的发现有用结论。

1.4 明确目标

  1. 用户定位;

  1. 数据源以及权限定位:所有库表是否有使用限制等条件,需要业务完善相关表信息

功能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 - 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

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 - 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5596.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Idea调试的时候字符串路径乱码 poi解析时表单中文名字正确,但是找不到

目录 原因 解决措施 POI表单中文名字正确但是找不到 原因 1.编码格式冲突 2.文件编码多次转换&#xff0c;已经凌乱 解决措施 1.找到工程目录下的文件夹【.idea】 2.进入【encodings.xml】文件 3.将【encodings.xml】中&#xff0c;除了<file url"PROJECT"&g…

LAYA3.0 组件装饰器说明

原文 在LayaAirIDE中&#xff0c;如果想在IDE内展示组件脚本的属性&#xff0c;需要通过装饰器的规则来实现。下面分别介绍四种装饰器。 文章目录 一、regClass()二、property()2.1 组件属性的常规使用2.2 属性访问器的装饰器使用2.3 是否序列化保存2.4 组件属性是否在IDE中显…

精选100+套HTML可视化大屏模板源码素材

大屏数据可视化以大屏为主要展示载体的数据可视化设计。 “大面积、炫酷动效、丰富色彩”&#xff0c;大屏易在观感上给人留下震撼印象&#xff0c;便于营造某些独特氛围、打造仪式感。 原本看不见的数据可视化后&#xff0c;便能调动人的情绪、引发人的共鸣。 使用方法&…

Unity中实现伤害跳字效果(简单好抄)

第一步骤安装并导入Dotween插件&#xff08;也可以不用导入之后直接下载我的安装包&#xff09; 官网DOTween - 下载 第二步&#xff1a; 制作跳字预制体 建议把最佳适应打开&#xff0c;这样就不怕数字太大显示不全了。 第三步&#xff1a;创建一个空对象并编写脚本JumpNumbe…

Java复习第四天

一、代码题 1.相同的树 (1)题目 给你两棵二叉树的根节点p和q&#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1: 输入:p[1,2,3]&#xff0c;q[1,2,3] 输出:true示例 2: 输…

【2024年华为OD机试】(C/D卷,200分)- 5G网络建设 (JavaScriptJava PythonC/C++)

一、问题描述 题目描述 现需要在某城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N。接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通。不同基站之间假设光纤的成本各不相同&#xff0c;且有些节点之间已经存在光纤相连。 …

Kubernetes 集群中安装和配置 Kubernetes Dashboard

前言 上篇成功部署Kubernetes集群后&#xff0c;为了方便管理和监控集群资源&#xff0c;安装Kubernetes Dashboard显得尤为重要。Kubernetes Dashboard 是一个通用的、基于 Web 的 UI&#xff0c;旨在让用户轻松地部署容器化应用到 Kubernetes 集群&#xff0c;并对这些应用进…

前端【7】javascript-dom操作

目录 DOM 加载与脚本执行的时序问题 1. 将 <script> 标签放到 HTML 末尾 2.使用 defer 属性 3. 使用 window.onload 一、获取元素 1、getElementById 2、getElementsByClassName 3、getElementsByTagName 4、querySelector和querySelectorALL 5、对象的属性关…

python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖

【1】引言 前序学习了使用numpy创建单通道的灰色图像&#xff0c;并对灰色图像的局部进行了颜色更改&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;九&#xff09;用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 之后又学习了使用numpy创…

【2024年终总结】我与CSDN的一年

&#x1f449;作者主页&#xff1a;心疼你的一切 &#x1f449;作者简介&#xff1a;大家好,我是心疼你的一切。Unity3D领域新星创作者&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6; &#x1f449;记得点赞 &#x1f44d; 收藏 ⭐爱你们&#xff0c;么么哒 文章目录 …

MySQL主从配置

一、 主从原理 MySQL 主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。主从同步的核心原理是将主服务器上的二进制日志复制到从服务器&#xff0c;并在从服务器上执行这些日志中的操作。 二、主…

【SpringCloud】黑马微服务学习笔记

目录 1. 关于微服务 ?1.1 微服务与单体架构的区别 ?1.2 SpringCloud 技术 2. 学习前准备 ?2.1 环境搭建 ?2.2 熟悉项目 3. 正式拆分 ?3.1 拆分商品功能模块 ?3.2 拆分购物车功能模块 4. 服务调用 ?4.1 介绍 ?4.2 RustTemplate?的使用 4.3 服务治理-注册中…

windows git bash 使用zsh 并集成 oh my zsh

参考了 这篇文章 进行配置&#xff0c;记录了自己的踩坑过程&#xff0c;并增加了 zsh-autosuggestions 插件的集成。 主要步骤&#xff1a; 1. git bash 这个就不说了&#xff0c;自己去网上下&#xff0c;windows 使用git时候 命令行基本都有它。 主要也是用它不方便&…

解决leetcode第3418题机器人可以获得的最大金币数

3418.机器人可以获得的最大金币数 难度&#xff1a;中等 问题描述&#xff1a; 给你一个mxn的网格。一个机器人从网格的左上角(0,0)出发&#xff0c;目标是到达网格的右下角(m-1,n-1)。在任意时刻&#xff0c;机器人只能向右或向下移动。 网格中的每个单元格包含一个值coin…

opengrok_windows_环境搭建

目录 软件列表 软件安装 工程索引 ​编辑 工程部署 问题列表 软件列表 软件名下载地址用途JDKhttps://download.java.net/openjdk/jdk16/ri/openjdk-1636_windows-x64_bin.zipindex 使用java工具tomcathttps://dlcdn.apache.org/tomcat/tomcat-9/v9.0.98/bin/apache-tom…

c++ 与 Matlab 程序的数据比对

文章目录 背景环境数据保存数据加载 背景 ***避免数据精度误差&#xff0c;快速对比变量 *** 环境 c下载 https://github.com/BlueBrain/HighFive 以及hdf5库 在vs 中配置库 数据保存 #include <highfive/highfive.hpp> using namespace HighFive;std::string fil…

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路&#xff0c;希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年&#xff0c;年初拿高绩效&#xff0c;但感觉逐渐被公司一点点剥离出中心&#xff1b;年中一直在学习防患于未然&#xff1b…

unity插件Excel转换Proto插件-ExcelToProtobufferTool

unity插件Excel转换Proto插件-ExcelToProtobufferTool **ExcelToProtobufTool 插件文档****1. 插件概述****2. 默认配置类&#xff1a;DefaultIProtoPathConfig****属性说明** **3. 自定义配置类****定义规则****示例代码** **4. 使用方式****4.1 默认路径****4.2 自定义路径**…

总结 uniapp 上不适配iphone的:new Date 时间、border线条、渐变

1、border样式缺了一边 这是错误样式&#xff1a; 需要添加: border: 1rpx solid #57c7bb; transform: rotateZ(0deg);//加入此代码解决iphone 不适配问题2、时间出现NaN 原因是因为ios中使用new Date 的时候出了问题 解决方案: 1.调整时间格式:将时间格式从"yyyy-MM-d…

【深度学习】Java DL4J 2024年度技术总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…