当前位置: 首页 > news >正文

Text2SQL 自助式数据报表开发(Chat BI)

Text2SQL 自助式数据报表开发(Chat BI)

Q: 自助式报表是bi吗?
A: 对的 主要是 Text2SQL, 自然语言撰写SQL,进行数据表查询,可视化结果等。

Q: 是否必须安装mysql
A: 可以本地安装MySQL,或使用数据库的云服务器

Q:PDF里面复杂表哥不好提取内容,怎么搞?
A: 对,表格里可能会有复杂的情况,比如跨页或合并单元格的
MinerU 可以将PDF中的图表 图片 或公式进行解析,转换为文本内容
text2sql 原生不支持 pdf的复杂表格,需要先用表格提取工具(比如 minerU)提取表格内容。

Q:excel报表复杂的能识别吗?
A:excel是表格式结构化数据,可以直接解析。 直接用SQL提取表格内容

Q:Qwen-vl读取图表能力如何?
A:应该还行

Q:再知识库喂给大模型后,遇到了大模型思考过程正确,但是直接回答的错误,是啥原因呢? 什么策略?
A:知识库应该要经过归纳总结处理,再喂给大模型
可以换模型,比如使用 Qwen3系列
如果思考准确,可以提取部分的推理过程,作为上下文再让普通模型进行推理

非结构化数据:PDF、DOC、视频、音频
结构化数据: excel、SQL

SQL结构化 VS NO SQL 非结构化

基于LLM的 Text2SQL系统包含的步骤:

1 自然语言理解:分析用户输入的自热语言问题,理解其意图和含义
2 模式链接:将问题中的实体与数据库模式中的表,列名,函数关联起来
3 SQL生成:通过解析步骤2中的语义,生成对应的SQL查询
4 SQL执行:在目标数据库中,执行生成的SQL查询,将结果返回给用户

LLM模型选择(闭源模型)

GPT-o4
Claude 4.1
Gemini 2.5
Qwen-turbo 国内 线上调用其api

LLM模型选择(开源模型)

可以自己或给企业部署
DeepSeek-V3
DeepSeek-R1
Qwen3

LLM模型选择(代码大模型)

Qwen3-coder:能力强 要求机器性能高 推荐
SQLCoder: 专门写sql 不推荐了

如果不是专门部署代码大模型,大部分公司还是部署的通用大模型,如 Qwen3-8B, 32B, DeepSeek-R1
个人使用,推荐闭源的SaaS模型,比如 豆包,Qwen-Turbo-lastest

SQL Copilot 的方法

1 用 LangChain 框架
提供了 sql chain, prompt, retriever, tools, agent, 让用户通过自然语言执行SQL查询
优点:使用方便,自动通过数据库连接
缺点:生成结果不稳定,无法做复杂的逻辑查询

2 自己编写
本质是:LLM + RAG
选择合适的LLM,如 Qwen3-coder
RAG,可以分成:向量数据库检索+固定文件(比如本地数据表说明等)
优点:重点在于RAG的提供上,准确性高,配置灵活
不足:需要用户有一定的代码功底,部署成本高,比较麻烦

用LangChain方式的缺点:会导致频繁调用LLM,此时可以结合RAG,在RAG中查询到之前历史结果中相似的问题的sql结果,减少重复生成。同时还能兼容一些用户的输入错误,比如人名不够准确。

Q:如何核对数据是否正确
A:给出测试集(比如10个Query以及SQL查询之后的结果)
让AI给出SQL => SQL查询 => 得到结果,与真实结果进行比对

Q:很多场景都是查询内容数据,是不让用api的,是否可以本地部署?
A:是的,可以本地部署大模型

Q:PDF的较为复杂的表格,需要识别并组织出结构化的数据,并和Access数据进行对比检查,如何实现?
A:
Step1 识别PDF,提取表格信息
需要用到第三方的PDF识别工具,如MinerU
Step2 将提取的 .md中的表格 => 写入到 .csv(可以让LLM来)
Step3 让LLM撰写SQL,获取access数据的内容
Step4 对比,检查差异

一个让大模型写sql语句的最佳实践 用合适的 prompt

  1. 说明语言类型 --language: SQL
  2. 将SQL建表语句放到SQL prompt中,因为大语言是通过SQL建表语句来理解表格
    3)SQL编写用 ```sql 的形式,放到prompt最后
    注意:prompt的首尾很重要

示例:
prompt = f"“” --language: SQL

Question: {query}

Input:{create_table_sql}

Response:

Here is the SQL query I have generated to answer the question ‘{query}’:

“”"

Q: LLM + RAG 的方式怎么处理安全问题,比如SAAS平台里的数据,只能查询自己租户的数据,不能查询其他租户的数据
A:用权限管理,MYSQL有权限管理,会指明具体用户的数据表的权限
RAG 向量数据库,可以保存:向量 原始文本 metadata(如文件名 创建时间 作者 标签)
标签:财务,那么让财务只能访问有财务表情的数据

Q:原始内容要额外db存放吗?
A:是的,有很多工具可以存放,比如 Redis, MySQL
数据量小,用redis放到内存中,非常快
数据量大,用MYSQL管理元数据

实践发现 直接写一个 exc_sql 的函数,调用会快些

function call 函数调用:exc_sql

Q: 怎么确保大模型生成的SQL是正确的?
A:大模型生成的SQL可能有出错的情况,
可以让 模型A:生成SQL;模型B:判断生成的SQL是否正确

Vanna的使用

Vanna是一个开源的RAG框架,是一个框架,主要解决text2SQL问题。

特点:

开源与可定制化:支持本地部署,允许自定义大模型 向量数据库 和 关系型数据库

RAG增强的准确性:复杂查询准确率高

多场景支持:适用于企业数据分析 智能客服 电商搜索 金融报告等场景,让非技术人员可直接查询数据库

灵活的基础设施:支持多种LLM(如OpenAI 本地部署的 Ollama),向量数据库(如 ChromaDB),可拓展至非默认支持的数据库。

Vanna工作原理:

训练RAG模型:输入数据库的元数据 比如建表语句 术语解释 示例SQL。模型将这些信息转换为向量并存储到向量库中,用于后续检索。

生成SQL:用户提问时,系统从向量库中检索相关上下文,组装成 Prompt发送给LLM。LLM生成SQL后,自动执行并返回结果(表格或图表)。

Vanna需要openAi 的 api key

Vanna相比于langchain和自定义prompt的优势:

1)向量数据库的管理(支持DDL 文档 错题本)
2)画图

Q:LLM生成的SQL不能保证完全正确,如何说服用户接受?
用测试集(多样性 异常情况)作为金标准,比如准备1000条测试query,让AI大模型进行生成,进行评分。
一个好的实践是宁可不回答也不要给出错误答案。

http://www.dtcms.com/a/324311.html

相关文章:

  • 《解锁 C++ 起源与核心:命名空间用法 + 版本演进全知道》
  • Spring Boot 注解详解:@RequestMapping 的多种用法
  • Docker 跨主机容器之间的通信macvlan
  • 攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DHCP欺骗、DHCP饿死)
  • Spring Boot与WebSocket构建物联网实时通信系统
  • LeetCode 子集
  • Java基础-Map接口
  • 香橙派 RK3588 部署 DeepSeek
  • SQL约束:数据完整性的守护者
  • Linux中rsync数据镜像工具的解析与应用实战
  • 如何在 Ubuntu 24.04 LTS Linux 上安装 MySQL 服务器
  • JavaScript防抖与节流:拯救你的网页卡顿危机!
  • GitHub 趋势日报 (2025年08月09日)
  • 通过Certbot自动申请更新HTTPS网站的SSL证书
  • vue中使用h5plus
  • 一些js数组去重的实现算法
  • 黑马SpringBoot+Elasticsearch作业2实战:商品搜索与竞价排名功能实现
  • 使用正则表达式检测Base64字符串并提取图片类型及正文的JavaScript函数,代码精简且高效
  • 250810-OpenWebUI集成Dify应用
  • 《设计模式》策略模式
  • STM32的计数模式和pwm模式
  • 亚麻云之数据安家——RDS数据库服务入门
  • sqli-labs-master/Less-62~Less-65
  • 01.【面试题】在SpringBoot中如何实现多数据源配置
  • (Python)爬虫进阶(Python爬虫教程)(CSS选择器)
  • 2025年全国青少年信息素养大赛Scratch编程践挑战赛-小低组-初赛-模拟题
  • Linux系统编程Day11 -- 进程状态的优先级和特性
  • 移动端音频处理实践:59MB变声应用的技术实现分析
  • 机器学习-增加样本、精确率与召回率
  • LeetCode 869.重新排序得到 2 的幂:哈希表+排序(一次初始化)