跳转到内容

01|为什么 AI 问数“不可信”

把自然语言问数想成一次跨语言出版:

  • 用户给出中文需求,相当于“作者意图”;
  • LLM 是译者,负责把意图转换成机器能处理的结构;
  • SQL 是最终印刷稿;
  • 数据库是印刷机,收到什么就执行什么。

直接让 LLM 写 SQL,相当于让译者同时负责理解、排版、审稿和开机印刷。一处口径误解或标点错误,都可能得到“语法合法但业务错误”的结果。Forge 在中间增加术语表、结构化稿件、编译器、审稿和留档。

层次典型问题Forge 的处理
口径“销售额”“活跃用户”“复购率”到底怎么算?Registry 记录组织定义,必要时先澄清。
生成JOIN 类型、窗口、HAVING、NULL 语义写错。受约束 DSL、校验、编译器和 lint。
执行AI 生成的 SQL 是否会直接跑?会不会拖垮库?人工审核、只读校验、超时、行数上限。
追溯为什么错、谁确认、下次如何避免?Audit、EMS、feedback、staging 和测试回放。
兼容“支持 PostgreSQL”是能编译还是已在生产执行?分层证据矩阵,不把编译支持等同生产支持。
算法模型根本不知道需要日期序列、自关联或统计方法。明确能力边界;DSL 不会凭空补足推理。

模型知道意图,但把它翻译错了,例如:

  • 本应 LEFT JOIN 却用了 INNER JOIN;
  • 用 NOT IN 排除数据,却忽略子查询中的 NULL;
  • 将 COUNT(*) > 5 放进 WHERE;
  • 忘记窗口函数的 OVER。

这是 DSL、Schema、Compiler 和 Lint 的主要靶心。

模型无法从参数中知道一家公司的私有定义。例如复购率分母可能是注册用户、下单用户或付费用户。模型再强,也不能凭空知道会议里确认过的口径。这是 Registry 的主要靶心。

如果问题要求生成缺失月份、做复杂同比、统计建模或多层自关联,模型首先要知道正确算法。DSL 可以确保“表达出来的意图被稳定编译”,却不能保证模型选择了正确算法。

Forge 不追求:

对任意陌生数据库、任意问题、任意模型都自动给出 100% 正确答案。

Forge 追求:

在明确支持的查询范围内,把组织语义、生成约束、执行控制和证据回放做成工程闭环。

这也是“已知边界内的确定性,优于未知范围内的概率性”的含义。

5. 为什么强模型也不能消除全部问题

Section titled “5. 为什么强模型也不能消除全部问题”

强模型会减少语法和常见 SQL 模式错误,因此 DSL 相对裸 SQL 的增益可能收窄。但以下事实不会因为模型升级而消失:

  1. 企业私有口径不在模型参数里;
  2. 数据权限和数据库资源必须由系统控制;
  3. 审核者需要知道最终执行了什么;
  4. 线上错误需要追溯、复现并沉淀为规则或测试。

因此 Forge 的长期价值不只在“约束 SQL 语法”,更在 Registry、可信执行和证据链。

  1. “复购率分母理解错误”属于哪一类?为什么编译器不能解决?
  2. 一条 SQL 能成功执行,是否代表业务结果正确?
  3. 为什么“应用层判定只读”不能替代数据库只读账号?

参考答案:依次是业务逻辑错误;不能,语法正确不等于口径正确;应用层规则可能有遗漏,数据库权限才是最终强制边界。