作者设计LLM订单处理考试,发现正常case仅占4/29,绝大部分失败来自非订单内容(价格咨询、库存查询、取消改期等),精心设计的陷阱题才是评估核心。
上次我给 LLM 做了一道阅题考试,结果作为出题者我输了 5 次。
今天讲讲这道题是怎么设计出来的。结论先说——出漂亮的题纯属浪费纸。
先从 happy path 入手
让任何人出题,他都会从能通过的情况开始。"5 箱 250 物流箱,请发 250 物流箱 5 箱。"通过了,感觉良好,皆大欢喜。
但这些分都白出了。模型很少在正常 case 上翻车。出问题的都是一切不正常的情况。
我的 29 道题分布如下:
正常订单 4
非订单类内容 6 ← 最大的一组
变更与取消 4
歧义题 5
拼写错误和极端简写 3
学习生效后的情况 7
正常题是最少的一组。故意为之。
为什么"非订单"占了最多题
这个程序最严重的事故是发出去的东西没人订过。所以考试题要冲着这个事故来,比什么都重要。
250 物流箱的尺寸是什么?
产品名:有。数:有。但这不是订单。这是询问。
一个把"发现产品名"当作"检测到订单"的程序,到这里就调卡车了。所以我埋了六道这种题:询价、库存查询、配送问题、寒暄、发票申请。
变更和取消更棘手。
我订了 5 箱 250——请只发 3 箱
两个数字。只读前半截,就是一个完美订单。把它当新订单处理,货就发两遍了。
在目录数据里也埋陷阱
不光是难题的问题。要让数据本身变得混乱。
两种透明胶带——48mm 和 60mm
五个以"250"开头的产品
每箱包装数量不同——50、40、25、10 张
一些散货根本没有箱规
一个原因:真实数据本来就是这样。真实产品目录永远有近亲兄弟。
用干净的数据跑考试会发生这种事——全过。然后接上生产数据,崩了。考试过了但生产出事故,那不是模型的错,是考试的错。
最重要的陷阱:"学习生效之后"
这个程序有学习能力。当人类选择一次匹配,它就记住了。"250" → 250 物流箱。之后就自动了。
坦白说:我的前 22 道题没有任何学习场景。"修一次就自动生效"是这个程序存在的理由,而我连这条路都没测过一次。后期补了 7 道题。
这 7 道题告诉我一些可怕的事。学习不只是便利功能——它可能是生成事故的功能。
陷阱一。程序学会了"胶带 = 48mm"。然后来了这个:
把学到的匹配原样应用,48mm 就发出去了。客户要的是 60。显式规格必须压过学到的匹配。
陷阱二。程序学会了"250 = 物流箱"。然后来了这个:
250 的尺寸是什么?
它学得越多,程序就越自信。用这种自信去把问题读成订单,就完了。学没学过,问题就是问题。
两道都过了。很好。但如果我从来没写出这些题?它就带着没人知道能否通过这些题的状态上线了。
如何按顺序出题
先列最严重的事故清单——发错货 / 货物发重 / 未订购的货发出
每种事故至少设计一道题来触发它
在数据里埋近亲兄弟
写"学习生效后"的题——那些学习反而引发事故的情况
正常题放最后,几道就够了。它们反正会过的。
如果考试很友好,考试就过了——然后生产环境出事故。
P.S. 全部 29 道题和有陷阱的目录都公开了 → github.com/ramses203/llm-test-harness
下一篇:评分——为什么及格/不及格评分会把你坑惨。