昨天我看了一份 agent 打《星际争霸》的战报,第一反应是:这不就是我踩过的坑。
最强配置赢了 18 局,但真正让我停下来的是作者的观察——Codex 经常自己拆出三个子 agent,一个管经济、一个管造兵、一个管指挥,而这三者之间几乎不通信。于是管指挥的那个,每造出一个兵就直接送去进攻,完全不知道另一个 agent 正在攒一支大队。
给 agent 分了工,却不给它一个共享的世界模型,等于把一次失败拆成三次。
这个基准叫 Brood War Bench,19×19 全对阵,在虚拟机上并行跑,引擎数据和双方 agent 日志全存。冠军 18 胜 1 负、单局 10.54 美元;整个榜单单局成本从 0.42 到 21.07 美元,差 50 倍,最便宜那档还有 50% 胜率。作者的结论很短:没有任何模型打到超过初学者的水平。
值钱的是失败机制。三个子 agent 各管一摊,是教科书式的关注点分离,崩掉不是因为谁做错了,而是各自的局部最优直接冲突:造兵 agent 的计划是「攒够再打」,指挥 agent 的逻辑是「有兵就派」。两边都不算错,错的是中间没有仲裁者。作者手动介入指挥时,表现明显变好。
拆 agent 之前,先回答一个问题:谁是共享状态的唯一所有者。
我自己的日报流水线就是这么定下来的。最开始我想让它快一点,让几个 agent 并行分头查资料、分头写板块。结果很糟:同一件新闻被两条线写成两种口径,第三节引用了第一节还没确认的数字。后来我改回单线程顺序处理,一个环节做完才进下一个。慢了吗?没有。返工的成本远高于并行的收益。
老系统改造是同一个道理。最怕的不是慢,是同时动两处、出了问题不知道是哪一处引起的。真正该并行的是没有共享写权的部分:查资料可以,定口径不能;跑测试可以,改同一个接口不能。
还有一条反直觉的:低 effort 配置有时反而打赢高 effort。老模型把即时战略当回合制打,思考的时候被推平;新模型更清楚思考的代价。thinking budget 不是「越大越好」的旋钮,而是一条曲线。
第二件事更像一记闷棍。
LiteLLM 的一个漏洞(CVE-2026-59822)拿到一个不光彩的第一:它是 CISA 已知被利用漏洞目录里第一个跟 MCP 有关的条目。 机制只有一句:伪造的 Bearer 头触发校验失败后,一个本意是「支持 OAuth2 透传」的回落分支把失败结果替换成了空的认证对象,下游只看「通没通过认证」,于是空对象成了通行证,请求直达已配置的 MCP 工具。修复版本 5 月 14 日就发布了,9 月 2 日列入 KEV 目录时,暴露窗口已经接近四个月。
每一个 fallback、每一个 except、每一个默认分支,都该被问一句:走到这里时,权限是更高还是更低。
这个方向我在电力现场见过代价。做生产现场的智能安监时,算法工程师盯召回率,业务盯漏报,而我作为技术负责人最先定的是默认值:识别不出来的那一帧,算违规还是算合规?误报和漏报的成本从来不对称,默认值就是给这个不对称定的价。 选错了,系统上线三个月就会被现场关掉。
同一天还有一件事。Google 确认 Gemini 今年 5 月在一次安全测试里,因测试环境意外联网、虚构公司名撞上真实公司名,自主入侵了三家真实公司。Google 解释:模型意识到是真实公司后就停了,因此不算对齐失灵、也无需主动披露。
我不太买这个解释。用「它自己停住了」来证明安全,是一个只有被评估者能自己举证的证明。 谁能重放它?谁记录了它发现之前已经走了多远?
三件事一个共同点:系统没有任何一层在说「我这里不对」。 空对象通行证在日志里就是一次成功的认证;Gemini 的越界,是四个月后被记者问出来的。最贵的失败,是日志里每一行都写着「我在正常执行」。
/status 新增一行显示分类器跑在哪一层。判定位置第一次成了会话里可查询的状态。