alitrack

怎么证明 AI 答对了:golden 快照与评测的坑

AI 写 SQL 查数据,答对答错怎么判定?

直觉做法:拿 AI 的结果和「标准答案」比。但医疗数据没有标准答案:同一个问题,不同写法、不同条件,结果都不一样。我们做了 31 道题的评测,踩过四个坑,每个坑都改变了一次评测设计。

● ● ●

坑一:结果比对没有「等值」概念

第一版评测:AI 生成的 SQL 跑出来的结果,和人工标注的 golden 结果比对,完全一致算对。

第一个问题马上出现:结果集有顺序差异。SQL 没有 ORDER BY 时,同一查询每次返回的行序可能不同。A 查出来是 [张三, 李四],B 查出来是 [李四, 张三],数据一模一样,字符串比对却判错。

修法:结果先排序再比对,或者用「集合相等」(行集相同即对,不看顺序)。

● ● ●

坑二:fingerprint 对无 ORDER BY 的视图不可比

第二版升级:算结果的 fingerprint(哈希指纹),快且能发现细微差异。

然后我们发现了更隐蔽的问题:MIMIC 的模板视图大多没有 ORDER BY。同一个视图,这次查 100 行、下次查 100 行,但中间行的顺序是数据库自由决定的。fingerprint 比对两次独立查询的「同一视图」,经常对不上:不是结果错,是顺序抖。

这个坑最难排查:fingerprint 不一致,你以为 AI 答错了,其实是判定标准本身不可靠。最后我们放弃 fingerprint,改用「行数 + 列数」双层判定:行数一致且列数一致,算通过;不一致再深入看。

● ● ●

坑三:评测题本身设计有缺陷

第三版跑完,31 题错 3 题。逐题看,发现 2 个错不是 AI 的问题,是评测题自己写错了:

一道题问「患者的平均住院时长」,golden 答案是「首次住院的平均值」;AI 算的是「所有住院的平均值」。问题语义是「患者平均」,答案是「住院平均」——题目和答案口径不一致,AI 按题目理解答对了,评测却判错。

另一道题问「首次入住 ICU 的数据」,golden 取的也是首次,但问题表述成「入住 ICU 的数据」,AI 理解成全部入住。同样是题目语义模糊。

教训:评测题要像产品需求一样评审。题目、预期答案、判定逻辑三者口径必须一致,否则测出来的不是模型能力,是出题人的失误。

● ● ●

坑四:模型输出抖动(chosen 为空)

第四版:AI 选模板路由时,偶发输出为空(chosen 字段没生成)。第一次遇到,以为是模型挂了,重跑一遍又好了。

这是 LLM 的输出抖动:同一输入,大部分时候正常,小概率返回空或格式错误。处理方式不是修模型,是加重试逻辑:chosen 为空就重试一次,仍空才判失败。加了重试后,这类错误从偶发变成几乎为零。

● ● ●

我们最终的评测设计

评测判定流程:行数列数双层校验 + 输出抖动重试

评测判定流程:行数列数双层校验 + 输出抖动重试

四轮迭代后,最终的评测流程长这样:

  1. 01问题集
    :31 道临床问题,覆盖 31 个模板的高频场景
  2. 02golden 快照
    :53 个(部分模板多参数组合),记录「这个模板这个参数下应该返回多少行多少列」
  3. 03执行
    :AI 选模板填参数 → 确定性执行 SQL
  4. 04判定
    :行数 + 列数双层校验,通过才算对
  5. 05重试
    :输出抖动(chosen 空)自动重试一次
  6. 06记录
    :每题保留完整日志(问题、模板、参数、结果、判定),可追溯

这套设计跑完 31 题:30/31(96.8%)。唯一的「错」最后发现是模板语义边界(两个模板描述重叠,合理歧义),不是能力问题。

● ● ●

给做评测的人

  1. 01先定义「对」
    。等值(集合相等)还是等序(完全一致)?无 ORDER BY 的数据只能比集合
  2. 02别迷信 fingerprint
    。无 ORDER BY 的视图指纹不稳定,行数+列数是更稳的基线
  3. 03评审你的评测题
    。题目、golden、判定口径必须一致。评测题的错误会伪装成模型错误
  4. 04重试是评测的一部分
    。LLM 输出有抖动,不给重试机会的评测会系统性低估模型

AI 评测的本质是把「答得对不对」从感觉问题变成工程问题。判定标准设计得不好,测出来的数字会骗你:不是模型骗你,是你的评测设计骗你。

● ● ●

参考来源

  1. 01
    本系列第三篇《复现 MotherDuck:Qwen3.8 27B 在 MIMIC 上做到 96.8%》(评测流程应用)
  2. 02
    MIMIC-IV 官方文档(模板视图与数据口径):https://mimic.mit.edu/docs/iv/
  3. 03
    EHRSQL 基准(公开医院问答 SQL 评测):https://github.com/glee4810/EHRSQL
  4. 04
    本文配套的评测脚本与 golden 快照(行数列数校验实现)——本系列实验数据