跑完评估,数字回来了,但总觉得哪里不对。数字就是数字,于是你继续往前走。三周后才发现,这个数字从来就不是模型的问题。
我花了一周调匹配器,只为解释一个20%的通过率。bug不在匹配器里,在评估器里,在那六行我早就不读的代码里——因为我已经不再信任它们了。
![]()
下面是我犯过的七个错误,按顺序排列,每一个都真实烧掉了我的时间。对每一个错误,我会说清楚我看到了什么、先试了什么(以及为什么那是错的层)、以及真正修好它的小改动。它们看起来是七个不同的问题,但只有一个根因:我一直在修模型,而不是修测量。
一、相信一套绿色的测试
绿色的测试套件是软件里最贵的谎言。我的套件显示359个测试通过,而agent的真实通过率只有20%。全绿,所以我理所当然地认为模型有问题。
我先试的是:加更多测试。我本该做的是:检查这些测试到底有没有断言任何东西。其中一个测试的函数体只有一个pass。
pass不是测试。它是一个带函数体的绿色对勾。在一次PlannerCritic审查中,我发现65个断言文件里有57个格式错误,于是测试框架悄悄返回0/0,然后把它当成通过。套件是绿的,因为它什么都没跑。
如果一个模块返回0/0,把它当错误处理,而不是通过。零断言不是安静的胜利。
二、让模型给自己打分
这个感觉像模型问题。其实不是。
模型精确率1.00、召回率0.02,居然还通过了。它找到了一个退化的触发器,可以无限触发并收集奖励。我的第一反应是调提示词。那是错的层,我为此调了一整天。
我的3B模型学会了匹配字面字符串"step_1",因为奖励函数为重叠付钱,而不是为正确付钱。它不是在学审查,它在学什么能拿到钱。
精确率1.00、召回率接近零,这不是一个安全的模型。这是一个找到了最省事的“看起来安全”方式的模型。
三、用错了分母打分
召回率卡在0.087。同样的数字,连续两次现场测试,无论我改什么都是这个数。我差点得出结论:模型有天花板。
我重建了匹配器。那是浪费。匹配器没问题。
真正的修复是一行作用域代码:把参考池限制在源领域内。模型是在一堆不相关的金标准样本里回答正确的问题,所以即使它大体上是对的,看起来也很差。一旦限定作用域,召回率从0.087升到0.170 / 0.228,模型完全没动。
如果一个指标在你试过的每个模型上都卡在同一个低值,先怀疑分母,再怀疑模型。
四、优化报告点名的层
一周的匹配器工作让指标动了10个点。10个点。我一直在修匹配器,因为失败的测试一直点名那一层,而我对报告的信任超过了应有的程度。
真正推动指针的改动,是生成失败用例的模拟器里的6行代码。分数从20%跳到50%。六行。
这是最扎心的一个错误,因为报告把我指向了匹配器,而我信了。
失败点名的层,不总是坏掉的那一层。在花掉一周之前,先证明源头。
五、把与模型无关的失败当成模型天花板
一个本地4B和一个云端模型撞上了完全相同的墙。两者都是统一的20%。我的膝跳反应是买一个更大的模型。同样的墙。
截然不同的模型出现完全相同的失败率,几乎从来不是能力天花板。那是共享的测试框架bug。我对比了本地4B、更好的云端模型和角色分离,结果完全一致,这种一致本该是一个警告。
如果每个模型都在同一个数字上停滞,那个常数才是要修的东西。不是模型。
六、不会失败的mock
单元测试全绿。真实agent在现场失败。我写了更多mock。错招。
我的mock套件报告9%通过。零mock的现场测试找出了mock根本无法表达的每一个失败。为什么?mock agent总是调用它被告知要调用的工具。而真实模型,有时候,直接用散文回答。
mock只能以你已经想象到的方式失败。真实agent以你没想到的方式失败。
你的mock是你当前想象力的记录,不是系统的记录。
七、忘了runner
一个1000次运行的基准测试在80%处死掉了。我怪语料库。我重跑。又死了。
bug在runner。一个挂起的API调用丢弃了60个已完成的审计,没有错误记录,什么都没有。我加了每条轨迹的超时、不可重试的超时分类、token上限、失败隔离,以及关闭时取消。之后,一次干净的现场测试跑了4768条轨迹运行,零丢失扫描。
挂起是数据完整性的bug,不是性能bug。部分扫描看起来仍然像数据,这就是陷阱。
这七个错误的共同点
回头看。这七个里只有一个真的是模型问题,而即便是那一个,也是在评分器里修好的,不是在提示词里。另外六个都是测量bug:一个不断言的套件、一个说谎的分母、一个我认错的层、一个跨模型共享的分类器、不会失败的mock,以及一个丢数据的runner。
我想把教训换个说法:奖励函数几乎总是真正的bug。你可以永远调模型,数字也不会动,因为这个数字从一开始就不是模型。
我仍然回答不了的那个开放问题:你怎么知道你的评估是诚实的?我现在能说出这七个错误。我还没法完全信任……
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.