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
- 说明语言类型 --language: SQL
- 将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大模型进行生成,进行评分。
一个好的实践是宁可不回答也不要给出错误答案。