V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
NothingExist
V2EX  ›  程序员

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

  •  
  •   NothingExist · 2025 年 7 月 3 日 · 2567 次点击
    这是一个创建于 198 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://v2ex.com/t/1124121?p=1#reply78

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

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

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

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

    #尝试过的技术方案:

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

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

    第 1 条附言  ·  2025 年 7 月 7 日
    我看很多朋友都说很简单,实际上是有六个维度,这六个维度唯一确定一条记录,每条记录又有 10 个指标,但是别人提问题的时候不会把这个六个维度全部提供给 AI ,所以还需要进行多轮问询,远远不是一个简单的 prompt 可以解决的。

    之前做过一个 DIFY 的方案,实际生成出来的 SQL 问题很多。
    23 条回复    2025-07-13 21:49:48 +08:00
    yb2313
        1
    yb2313  
       2025 年 7 月 3 日
    看来这是每个领导都会幻想的东西
    shyrock2026
        2
    shyrock2026  
       2025 年 7 月 3 日
    啥?单表查询应该很简单吧? DDL 都可以用 prompt 写清楚。

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

    感觉不会太难呐,甚至有一个 prompt 就完成的可能性。
    silyboy
        13
    silyboy  
       2025 年 7 月 4 日
    用 Vanna-ai 实现了一个, 查询很慢. 除非命中缓存. 然后只能查询简单语句. 最后还是放弃 Text2SQL, 把现有一些 api 包装为 mcp, 这样 ai 工具就能用了. 速度也有了很大的提升.
    snow0
        14
    snow0  
       2025 年 7 月 4 日
    换个推理模型试试,准确率应该能提高但是会变慢
    jones2000
        15
    jones2000  
       2025 年 7 月 4 日
    直接把整个库的内容都给本地 ai 读一遍, 然后直接问 ai 你要的内容, 这样 sql 也不用写了。
    NothingExist
        16
    NothingExist  
    OP
       2025 年 7 月 7 日
    @jones2000 数据量太大
    NothingExist
        17
    NothingExist  
    OP
       2025 年 7 月 7 日
    @silyboy 感谢提供思路,请问把什么 API 包装为 MCP 呢,有什么 API 能够实现 AI 问数这个需求吗
    NothingExist
        18
    NothingExist  
    OP
       2025 年 7 月 7 日
    @shm7 这是一个很好的思路,谢谢
    NothingExist
        19
    NothingExist  
    OP
       2025 年 7 月 7 日
    @shm7 但是涉及一个难点,用户不可能完整提供整个六个 column ,有时候只是简单地给一两个信息,而且还不能与数据库的数据对应,这种情况下我要求用户进行补全维度,涉及到多次问询,还没有找到很好的方案。
    NothingExist
        20
    NothingExist  
    OP
       2025 年 7 月 7 日
    @xiaohuokevin 好的 谢谢你提供的思路
    NothingExist
        21
    NothingExist  
    OP
       2025 年 7 月 7 日
    @yshan 也是个好主意 有什么好的工具推荐吗
    NothingExist
        22
    NothingExist  
    OP
       2025 年 7 月 7 日
    @sssjjjjj 表太宽,导致输出的时候 经常会遗漏信息
    silyboy
        23
    silyboy  
       2025 年 7 月 13 日
    @NothingExist 我用的 fastmcp, 把公司已有的金融数据 api 接口的 openapi 文档,转为 mcp 工具. 这样问 ai 股票信息, 就可以获取最新的数据.
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2818 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:35 · PVG 21:35 · LAX 05:35 · JFK 08:35
    ♥ Do have faith in what you're doing.