语言模型把一切输出成文字,包括本该是结构的东西 —— 一个决定、一个数、一条「这件事我不确定」。 于是每个调用方都要再写一个解析器,去猜模型刚才想说什么。
我们做相反的事:把输出的类型先定下来,再让模型填。 需要数值的地方给精确值,带单位,可以逐位核对; 候选里没有正确答案时,返回的就是「没有对的」, 而不是从错的里面挑一个最像的。
三个模型各做一件事,边界划得很窄 —— 窄到每一个输出都能被验证,或者被明确地拒绝。目前只有决策这一个已发布。
数值必须精确,而不是看起来合理
一个把数值当文字生成的模型,对不对取决于它见过多少相似的算式。多数时候它给出的数看起来合理 —— 而「看起来合理」和「能拿去跟阈值比大小」是两回事。
我们的判据是逐位:部署口径下的 191 道计算题全部正确,指数衰减、单位换算、不同单位之间的比值,和一次减法同样精确。
「都不对」必须是一个能返回的值
一个永远会给出答案的接口,没有办法表达「这件事该转人工」。于是每一个自动流程都要在外面再套一层人工兜底,而那层兜底并不知道该在什么时候触发。
我们把它做成返回值。实测 19 道候选全错的题检出 19 道,误报 0;同一批题上判断类模型检出 0 道。
同样的输入必须给同样的答案
候选换个顺序结果就变,同一个请求发两次结论不同 —— 这类抖动让回归测试失去意义,线上出问题时也分不清是输入变了还是模型变了。
我们的判据是零:调换候选顺序分数逐比特相同,重复调用不一致 0 次。作为对照,判断类模型在 160 次重复里出现 4 次。
通用模型在每件事上都能给出一个答案,代价是没有一件事能给出可核对的保证。 我们把边界划窄:窄到每一个输出都能被验证,或者被明确地拒绝。
这个站点上的每一个数值都由当次请求实时计算 —— 场景卡上的读数、 基准表里的结果、流水线上的各跳耗时。没有写死的数字。
所以你刷新一次,看到的是这一次跑出来的东西,不是我们上次跑得最好的那次。
能力有判据
191 / 191计算题全量准确率。口径就写在数字旁边:哪些题、哪个档位、串行还是并发 —— 一个没有口径的数字无法被反驳,因此也无法支持任何结论。
失败也要报出来
19 / 19候选里没有正确答案时返回「无匹配」,误报 0。一个只会成功的接口,在自动流程里是危险的。
技术报告
敬请期待完整的技术报告正在整理,会和 paper 一起发布。在此之前,上面这些能力与结果都可以当场跑一遍。