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

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.xdnf.cn/news/17455.html

相关文章:

  • “骑行热”正当时,维乐Eden ANGEL坐垫守护舒适与健康
  • Kafka 生产者与消费者分区策略全解析:从原理到实践
  • 消息队列系统测试报告
  • 一周学会Matplotlib3 Python 数据可视化-绘制条形图(Bar)
  • 【Vue✨】Vue3 中英文切换功能实现
  • java生成用户登录token
  • 人工智能-python-机器学习-模型选择与调优实战指南:从交叉验证到朴素贝叶斯分类
  • MyBatis的xml中字符串类型判空与非字符串类型判空处理方式
  • Pytorch深度学习框架实战教程12:Pytorch混合精度推理,性能加速147%的技术实现
  • 深度解析Linux设备树(DTS):设计原理、实现框架与实例分析
  • 算术运算符指南
  • 如何用分析方法解决工作中的问题?
  • Day11 原理篇
  • 滚动条开始滚动时,左侧导航固定,当左侧内容触底到footer时左侧内容取消固定并跟随滚动条滚动
  • 【Python 小脚本·大用途 · 第 2 篇】
  • 女子试穿4条裤子留下血渍赔50元引争议:消费责任边界在哪?
  • 【星闪】Hi2821 | UART通用异步收发器 + 串口中断收发例程
  • 【人工智能99问】BERT的原理什么?(23/99)
  • 开启单片机
  • 编程基础之多维数组——矩阵交换行
  • 【YOLOv8改进 - C2f融合】C2f融合Outlook Attention:将细粒度特征编码到 token 中, 提高在图像分类和语义分割等任务中的性能
  • 【算法题】:斐波那契数列
  • 【Python】常用内置模块
  • 安全运维工具链全解析
  • Android快速视频解码抽帧FFmpegMediaMetadataRetriever,Kotlin(2)
  • 大模型开发工具的汇总
  • SQL Server从入门到项目实践(超值版)读书笔记 23
  • cursor, vscode黄色波浪线警告问题
  • 从零到精通:嵌入式BLE开发实战指南
  • 计算机网络:(十四)传输层(下)详细讲解TCP报文段的首部格式,TCP 可靠传输的实现与TCP 的流量控制