跳到主要内容

它漏了 Maria 周四的取消,我反而信了它

锈剑
锈剑

· 阅读约 5 分钟

有个评测把 0.403 贴出来了。

不是附录第三页,是跟别的数并排。

我盯着它看了半天。这年头没人贴 0.403。

项目叫 Availazy,原名 Availability Ledger,十月下旬改的名,仓库和部署服务还挂着旧标识——一看就是一个人半夜改完名字,懒得同步。给志愿者协调者用的:一周聊天记录丢进去,志愿者名单丢进去,出来一份能逐条核对的可用性建议。

排班表。鸡毛蒜皮。

翻它评测的时候,两个数并排贴在那儿:

集 C 首次结果,表格一致率
rules   0.433
gemma   0.403
hybrid  0.527

纯模型 0.403。模型加一套关键词规则,0.527。作者连分类都附上了:8 条取消,纯模型漏 4 条、纯规则漏 4 条、混着跑漏 2 条。两边漏的看起来还不是同一批。

0.527 不算好看。我盯的是 0.403。

真正让我坐直的是回放里那段:模型把 Maria 的周二和新加的周五读对了,唯独漏了她对周四的取消。关键词那个“笨”读取器把这条捡了回来。系统没自己改表,标成待确认——人点一下接受,周四才从最终表里消失。作者还专门说,切到纯模型模式跑同一份回放,周四早上的安排老老实实留在那儿。

补一刀:这种错不会响 pager。

它就是周四早上没人来,或者有人白跑一趟,协调者在群里道歉。所有不响的错,最后都由人来还。

这块做法我认。模型的活儿划得很窄——抽人名、抽日期文本、抽时间文本、抽状态和条件、留原文片段。把“3 点后”换算成 17:00 这种事交给 Python。模型说某句话在,代码回原文核一遍,找不到就毙掉。默认三个时间段写死在代码里,开放时间按当天规划结束时间解释,卡片上写明这是假设。

模型干模糊的活,代码干算数的活,中间那道校验是拿模型自己的输出去打模型的脸。

我半夜最怕的不是它笨,是它太敢。一个不会说“我不确定”的东西直接给你结论,比给不出结论危险十倍。

两条读取器同时跑、不一致就标出来,有人管它叫 ensemble。行吧。但重点不是把准确率堆上去,是把“两个 reader 打架”本身变成一个看得见的信号。行业默认怎么干?在内部消化掉分歧,最后递给你一张漂亮的表,让你以为它从来没有过分歧。

那份虚构数据跑下来是 67 条建议:36 条无警告、能一键接受,31 条要人判断,10 条进待决定清单。有人会问,31/67 是不是太拉胯。我觉得正相反——协调者本来就得逐条过一遍,工具的活是把“重新录入”换成“逐个判断”。它省的是抄写,没打算替你省判断。它一条都没替你判断,但也没骗你它判断了。

还有那个导出文件:只要还有待定或未解决项,导出就标 provisional。这个设计我太喜欢了。等于一份没跑完灰度的配置,文件头就写着“未验证”。我们这行最缺的就是这个——所有导出的东西长得一个样,谁也分不清哪份是核过的、哪份是半截,等出了事回溯,才发现当时用的是半截那份。

作者后来做了五项确定性修复,同一份保存输出在集 C 上跑到 1.0,然后自己标注:事后结果,不代表全新消息上的效果。

该夸。

我知道绝大多数项目会怎么写——1.0 上标题,0.403 塞进附录第三页,或者干脆不测。更狠的是改完提取器再跑一遍评测,然后宣布达标,反正没人查考卷有没有被改过。

这个人的做法是:首次冻结的结果单独存一个文件,冻结评测文件的哈希进 CI,每次 push 和 PR 都检一遍它有没有被动过。CI 里大概是这么个意思:

push / pr:
  128 个单元测试(缺可选 SDK 时跳过 8 个追踪测试)
  sha256(check: 冻结评测文件)
  replay(3 个测试集,只用已保存的模型输出)

自律这东西靠不住,机制靠得住。把“我有没有事后改考卷”交给机器去查,比在 README 里写十句“我们坚持诚实评测”管用。

说句实话,我一开始是有点烦的——一个人写个排班小工具,搞 128 个单测、哈希冻结、CI replay,是不是用力过猛。

转念一想,我们线上半夜炸掉的那些玩意儿,当初都是“先跑起来再说”跑起来的。

Sentry 那层它划的边界是这样:

allow: 耗时 / token 数 / 模型名 / 阶段名
deny:  消息正文 / 姓名 / 引用片段 / 提示词 / 回复

默认关闭,开了也只发这四类。志愿者聊天记录里全是人名和家庭安排,一个默认全量上报的 SDK 就是个等着爆的雷。这个边界划得对——我见过太多“默认打开、事后再说”的接入。

另外他写了四次模型调用撞上 300 秒客户端超时,没定位出原因。就这么写着,没编一个原因上去。这个我也认。

限制清单更实在:只测过虚构消息,还没有真实协调者用过,时区字段只存不转,“At 9”这种表述认不出来,上限 20 名志愿者,单标签页,换标签数据不保存,Safari、Firefox、读屏器都没测过。一条不落全列出来。

我一看 README 里一条限制都没有,就知道后面得有人替它擦屁股。

扯远了,回到那个 0.403。

我干这行久了,对新东西的第一反应不是“它能干什么”,是“它错的时候谁兜”。这个项目的答案写在导出文件的字段里:provisional。它不确定的地方,它告诉你了。

你那套 AI 功能,要是输出里没有一条“我不确定,你看一眼”的出口,那它就不算工具,只算个等着背锅的黑洞——而且最后背锅的,不会是这个黑洞。

锈剑
锈剑

接太多半夜电话的系统老兵,第一人称短段干冷吐槽,戳管理鸡汤与行业废话。

查看主页 →