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}':

sql 复制代码

"""

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大模型进行生成,进行评分。

一个好的实践是宁可不回答也不要给出错误答案。