我们造了一个编译器,让你不必再赌 AI 的正确率了

我们造了一个编译器,让你不必再赌 AI 的正确率了。不是因为模型不够准,而是行业一直让它做不该做的事。

你有没有遇到过 AI 给的 SQL 能跑、能过检查,上线后才发现边界错了一行,却不报错?

我们为什么要造编译器

我们曾经把一句需求丢给 AI,几秒就拿到一段漂亮的 CTE,窗口函数套窗口函数,review 挑不出毛病。直到对账才发现分组错了一位,兜底的那行丢了。

那一刻我们明白,行业都在卷模型更准,我们换了一条赛道:别让模型负责复杂的终态 SQL。

AI 擅长把口语拆成步骤,编译器擅长把步骤翻成 SQL。各干各的,就不用赌了。

Picture5png

一个跑得通但得靠祈祷的例子

需求很简单,却足够让我们捏着鼻子上线。

事件表 events 按时间排序,相邻 value 相同时属同一组,要输出每组的开始时间 effective_from 与下一组开始时间 effective_to,末组 effective_to 约定为 9999-12-31。

源数据表的 value 字段是序列 1,2,2,1,1,1,2,2,1,相邻相同并为一组:

id

value

timestamp

1

1

2023-11-10 13:00:00

2

2

2023-11-11 13:00:00

3

2

2023-11-12 13:00:00

4

1

2023-11-13 13:00:00

5

1

2023-11-14 13:00:00

6

1

2023-11-15 13:00:00

7

2

2023-11-16 13:00:00

8

2

2023-11-17 13:00:00

9

1

2023-11-18 13:00:00

期望结果只有 5 行:

id

value

effective_from

effective_to

1

1

2023-11-10 13:00:00

2023-11-11 13:00:00

2

2

2023-11-11 13:00:00

2023-11-13 13:00:00

4

1

2023-11-13 13:00:00

2023-11-16 13:00:00

7

2

2023-11-16 13:00:00

2023-11-18 13:00:00

9

1

2023-11-18 13:00:00

9999-12-31 00:00:00

我们把一句话需求丢给 AI,拿到的 SQL 长下面这样,6 个 CTE 还套着子查询,LAG、SUM、LEAD 全齐,还多套了一层意义不明的过滤,看起来完全正确,你敢直接上线吗?

WITH Value AS (
    SELECT id, value, timestamp FROM events
),
Value1 AS (
    SELECT Value.*, LAG(value) OVER (ORDER BY timestamp ASC) AS prev_value
    FROM Value
),
Value2 AS (
    SELECT id, value, timestamp,
        SUM(CASE WHEN value <> prev_value THEN 1 ELSE 0 END) OVER (ORDER BY timestamp ASC) AS gid
    FROM Value1
),
Grouped AS (
    SELECT gid, MIN(id) AS id, MIN(value) AS value, MIN(timestamp) AS effective_from
    FROM Value2
    GROUP BY gid
),
t_1 AS (
    SELECT gid, id, value, effective_from,
        LEAD(effective_from, 1) OVER (ORDER BY gid) AS effective_to
    FROM (
        SELECT * FROM Grouped WHERE id IN (SELECT id FROM Grouped WHERE effective_from IS NOT NULL)
    ) inner_q
),
cte_final_v2 AS (
    SELECT gid, id, value, effective_from, effective_to FROM t_1 WHERE 1 = 1
)
SELECT * FROM cte_final_v2 ORDER BY gid;

不逐组跑一遍,你能看出哪里错了吗?这类 SQL 最危险的地方不是语法,而是三处藏起来的偏差:ORDER BY 丢了空值排序分支,SUM 后漏了加 1 导致 gid 从 0 起计,LEAD 漏了默认值。其中 LEAD 这处直接让末组兜底值变成 NULL:错一行,不报错,只能祈祷;另外两处遇到边界数据同样会爆。
不是模型不够准,是交付形态错:它一次吐出终态 SQL,错了只能重写提示词整段重生成,逻辑偏差自然撤不掉。
错的正是最后一行:

期望:9 | 1 | 2023-11-18 13:00:00 | 9999-12-31 00:00:00
实际:9 | 1 | 2023-11-18 13:00:00 | NULL

我们让AI做了最不该做的事

AI 擅长规划步骤,却不擅长保证最终 SQL 一定正确。

旧范式是“提示词→AI→不确定的终态 SQL”,黑盒交付,只能让它整段重猜。

新范式应该是“提示词→AI→规范步骤→编译器→确定性 SQL”,每一步可验证。

AI writes the logic. A compiler writes the SQL.

SQLazy里,这件事只要5

同样的有效期逻辑(就是上面那种取每组起止时刻的逻辑),在 SQLazy 里是 5 步,每一步都能点开看中间表。

Name

Anchor

Statement

t1

events

sort timestamp

t2


segment value; change; as gid

t3


summarize first timestamp as effective_from, first id as id; group gid, value

t4


compute ifn(effective_from[1],datetime("9999-12-31 00:00:00")) as effective_to

result


derive delete gid


Picture6png
5 步干了什么,一眼看完:排正时序,按 value 变化自动切段,每段取首条,顺手带出下一组开始,最后清掉辅助列。你完全不用知道 LAG 怎么写。
还记得前面那 3 个藏起来的偏差吗?在这里它们连藏的地方都没有。想验哪步就点开哪步,分段切得对不对,看一眼 gid 列就行。

Picture7png
错在第 2 步就只改第 2 步,不用推倒重来。你敢改,是因为每一步都看得见。
编译后 SQL 是编译器按固定规则翻译的,可追溯,可审计:

WITH Value AS (
    SELECT id, value, timestamp FROM events
),
Value2 AS (
    SELECT gid, id AS id, value AS value, timestamp AS effective_from
    FROM (
        SELECT id, value, timestamp,
            SUM(CASE WHEN value <> col__5 THEN 1 ELSE 0 END)
                OVER (ORDER BY CASE WHEN timestamp IS NULL THEN 1 ELSE 0 END, timestamp ASC) + 1 AS gid
        FROM (
            SELECT Value.*, LAG(value) OVER (ORDER BY CASE WHEN timestamp IS NULL THEN 1 ELSE 0 END, timestamp ASC) AS col__5
            FROM Value
        ) sub__6
    ) Value1
    GROUP BY gid
)
SELECT gid, id, value, effective_from,
    LEAD(effective_from, 1, TO_DATE('9999-12-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS')) OVER (ORDER BY gid) AS effective_to
FROM Value2
ORDER BY gid;

这段 SQL 没有猜的成分,是编译器把 5 步固定翻译出来的,同一 workflow 永远同一结果,不会编造字段。

Picture8png

简单增删改查,直接让 AI 写就行,这种分段取首尾的逻辑再用 SQLazy。

把你最可疑的那段AI SQL贴进来

你上线过最可疑的 AI SQL 是哪段?是凭空编了个不存在的字段,还是分区键漏写了,抑或聚合口径悄悄偏了?

别再陷入“重写提示词→重跑→碰运气”的循环了。把那段最不放心的 AI SQL 贴进 Playground,照着上面的样子做一遍同样可验的流程,并晒出你的案例。

在线体验与本例运行:

链接

说明

github.com/SPLWare/SQLazy/examples

开源示例库

www.sqlazy.com/?3IT

playground 本文例子,点击直接运行

AI plans, compiler guarantees - zero hallucinations.