Text2SQL(NL2SQL, 大模型问数据库)有什么成熟、准确率高的解决方案?

60 天前
 NothingExist

https://ex.noerr.eu.org/t/1124121?p=1#reply78

领导让我针对公司的某个数据库做一个 AI 问数平台,给上级领导和业务人员使用,开始上手之后,我发现这个事情第一部简单,但要保证输出的 SQL 与预想中的一样极难,对输出的内容也非常不自信。

#问题: 核心问题:数据不涉及多表查询,但是数据的维度很大,有六个维度,这六个维度唯一确定一条记录,指标也有 14 个之多。

当维度比较少的时候,比如一个时间维度+两个其他维度,这个时候输出的内容勉强可以接受,但是当维度进一步放大,比如一个时间维度+三个其他维度(比如产品类型、渠道类型、销售地区),此时,输出的 SQL 就很容易遗漏某个维度。

其他问题:不了解用户会问什么问题,我调制的 prompt 只对我设想的问题工作,但其他人随便想一个问题,这些 prompt 就不起作用了;或者一些小词换一个问法,就出不了结果。

#尝试过的技术方案:

  1. DIFY Workflow 2.SuperSonic (目前在用)

#目前想到的解决方案: 1.精简数据表,把原来的六七个维度,精简到一个三个(一个时间维度+两个其他维度) 2.进一步寻找解决方案

1900 次点击
所在节点    程序员
23 条回复
yb2313
60 天前
看来这是每个领导都会幻想的东西
shyrock2026
60 天前
啥?单表查询应该很简单吧? DDL 都可以用 prompt 写清楚。

我的困难是多表查询,因为 DDL 太大塞不进 prompt ,我没找到办法让 llm 搞清楚有哪些表和字段。。。
krixaar
60 天前
我是直接给挡回去了,公司的数据库不允许外网使用,表结构算商业秘密,LLM 必须本地部署,然后参数少的又太傻,得上参数多的,就得加钱上设备,算起来不如直接让人导数据做报表。
Suger828
60 天前
你这种很简单啊, 那种 先查 a 表的内容然后用 a 表内容查 b 表内容 各自分组的 才复杂
yshan
60 天前
直接做个 bi 报表不更简单吗
xiaohuokevin
60 天前
可以试试不直接输出 sql, 而是在 prompt 里面告诉模型有哪些维度(每个维度给些示例维度值),指标,让模型输出结构化的数据比如 json, 根据用户的 query 让模型返回查询的维度,指标,时间范围,排序规则,筛选条件(维度:维度值)。 自己再根据这个 json 组装 sql
sinnosong1
60 天前
看看 Prompt Engineering guide 呢,github 上的项目
xjh1024
60 天前
如果领导不在乎 生成 sql 的话,应该用接口 mcp 来实现
接口里更好描述各个参数,描述可以怎样搭配查出来什么样的数据,然后在接口里去写好各类查询条件的排布
多种格式的话,也可以是多个方法,让 ai 自动甄别使用哪个接口用哪些参数
比直接丢个数据库 会 减少很多错误,就是需要人提前想好一些预设了,麻烦点,但是能满足领导的想象
realJamespond
60 天前
试试微调模型
030
60 天前
固定的表格结构,还是单表,算是非常简单的落地场景了
sssjjjjj
60 天前
@shyrock2026 表太宽还是表太多?可以试着把问题+所有的表名/comment 喂给 AI 先筛选几张表,然后在把 DDL+sample data 一起喂过去,我试过这么弄效果不错
shm7
60 天前
不涉及多表查询,就是单表啊,6 个 column ?
1. 每种定义好范围和类型,让 LLM 分别分段提取每个 column 取值或范围
2. 然后拼接 where 语句
3. 最后再让 LLM 做 sql 检查

感觉不会太难呐,甚至有一个 prompt 就完成的可能性。
silyboy
60 天前
用 Vanna-ai 实现了一个, 查询很慢. 除非命中缓存. 然后只能查询简单语句. 最后还是放弃 Text2SQL, 把现有一些 api 包装为 mcp, 这样 ai 工具就能用了. 速度也有了很大的提升.
snow0
59 天前
换个推理模型试试,准确率应该能提高但是会变慢
jones2000
59 天前
直接把整个库的内容都给本地 ai 读一遍, 然后直接问 ai 你要的内容, 这样 sql 也不用写了。
NothingExist
56 天前
@jones2000 数据量太大
NothingExist
56 天前
@silyboy 感谢提供思路,请问把什么 API 包装为 MCP 呢,有什么 API 能够实现 AI 问数这个需求吗
NothingExist
56 天前
@shm7 这是一个很好的思路,谢谢
NothingExist
56 天前
@shm7 但是涉及一个难点,用户不可能完整提供整个六个 column ,有时候只是简单地给一两个信息,而且还不能与数据库的数据对应,这种情况下我要求用户进行补全维度,涉及到多次问询,还没有找到很好的方案。
NothingExist
56 天前
@xiaohuokevin 好的 谢谢你提供的思路

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1142776

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX