我第一遍读 GLM 那篇推理基建复盘,注意力全在数字上:十万张以上的国产加速器、从跑通到生产不到两周、端到端吞吐三倍。
读到后面才发现,他们把功劳记到了别处。不是模型更聪明,是那个围着模型打反馈的系统。
AI 在真实系统里干不动活,卡点通常不是它不够聪明,而是从「结果错了」到「哪一环错了」之间,没有一条它能读懂的链路。这是架构问题,不是模型问题。
GLM 官方博客里有一句话我划了下来:端到端指标能告诉 agent 结果变差了,但无法解释为什么。
他们的解释很具体。代码库只提供静态上下文,而一个推理系统里的数值偏差、性能回退,往往来自 kernel 实现、并行策略、通信行为、内存管理、服务编排这几层的动态交互。
所以一次改动之后,agent 收到「精度测试失败」「首字延迟上升 30%」,它依然不知道该怪哪一层,不知道自己的假设错在哪,也不知道下一步该测什么。
模型是不是更聪明,很多时候不如它能不能说清自己错在哪。
我在变电站的远程智能巡检上撞过同一堵墙。
有一段时间误报率怎么调都下不去,团队第一反应是换模型、调阈值。真正卡住我们的其实是另一件事:系统只告诉我们「这个结论是错的」,从来没告诉我们这个结论是在哪一级判出来的。
后来把每一级判定单独留痕,误报才终于有了改进方向。
一个只会汇报终点的系统,喂不出会干活的 AI。
要让它真的能干活,每一层吐出来的中间量得带上三样东西:这是哪一层、相对基线是多少、这次变化了多少。再加上一个「下一步该测什么」的动作空间。
不然它只能在一个越来越贵的循环里猜。
claude-code 在 09-17 发的 v2.1.275 里修了一个 bug:Linux 沙箱下,zsh 里失败的 Bash 命令会被报成 exit code 0。
这是静默失效最纯粹的形态。
agent 是依赖退出码做判断的。它看到 0,就认为命令成功了,然后在这个「成功」之上继续往下叠。错误不是被漏掉,是被当成了地基。
同一版还修了另一个:配置的遥测导出失败时,整条链路静默为空,之前没有任何提示。
「没有数据」和「数据坏了」,在监控面板上长得一模一样。
这个坑我在生产领域的智能安监里做过功课。
误报和漏报的代价从来不对等,所以阈值设计这件事,真正难的不是选哪个数,而是让系统能说清它现在站在哪一边,以及它有多确定。
那次让我记牢一条规矩:说不清的那部分,不能塞进成功或失败里。
它得自己有个位置,也自己有个数字。可观测性不是加日志,是让每一层能回答一句:这次和上次有什么不同。
第一,挑一个你已经在用 AI 干的活,把它的判定链路按层写下来,每层旁边标一句:这一层的中间量,现在存在吗。标不出来的层,就是 AI 只能靠猜的层。
第二,把你 agent 依赖的每一个「成功信号」拿去验证一遍。用一条注定失败的命令或一次注定报错的调用,看它到底会不会报错。那个 exit 0 的坑,就是没验证过的代价。
第三,给「说不清」留一个位置。别把它塞进成功或失败的某一类,让它单独成一个状态,并且在监控上给它一个数字。