AI 工程周刊 · 每周十篇非显而易见的工程洞察
哈佛对 718 家公司的研究发现,coding agent 让代码量涨了 30%,公司完成的需求数却没有显著变化,增量卡在了 code review。
研究者 Fiona Chen 和 James Stratton 用 Jellyfish 的 3 亿条工作事件,覆盖 2021 年到 2026 年 3 月。他们按各公司引入工具的时间做交错双重差分。引入 coding agent 后,代码行数涨 30%,commit 涨 20%,PR 涨 23%。Jira issue 和 epic 的完成数没有统计显著的变化,研究排除了产出增幅超过 12% 的可能。issue 的预测工作量也没变,需求并没有变大。
增量卡在 review。PR 从提交到合并的时间平均多 49%,被要求修改的 PR 比例接近翻倍,每个 PR 的评论多 35%,参与 review 的员工比例上升 14%。近 80% 的公司已在 review 中用 AI,但 AI 只写了 23.3% 的评论,只有 10.8% 的 PR 收到过 AI 评论。研究也没有发现可归因于 AI 的就业变化。按代码量或 PR 数评估 agent,会高估它的收益。
数据截至 2026 年 3 月,口径是公司级采用,此后模型和工具又更新了几轮。作者也说明,这是短期估计。接下来要看 review 能否跟上:自动检查、更小的 PR、机器可判定的验收标准。本期第 2 篇和第 6 篇给了两种做法。
"agent 写代码已经不缺速度。缺的是一个机器能判定的“对”。"
— 本周主题
Maurice Heumann 的团队用 agent 把一款老 FPS 反编译成 C++。第一个月,3 个 worker 加 1 个 reviewer 完成了约 80%,游戏能启动、能加载地图。代码可读,语义却大量出错:函数签名、类型和结构体布局不对,还会凭空增删逻辑。worker 写在 commit 和代码里的解释说服了 reviewer 接受偏差,作者称之为无意的 prompt injection。
▸ 点击展开详情
团队改用原版编译器,逐字节比对每个函数,只给 PASS 或 FAIL。有了这个 oracle,reviewer agent 不再需要,原本表现很差的 Haiku、Luna 也能稳定出活。最后几周主要跑 14 个 Luna 和 2 个 Opus 5.5。最终 99% 的函数已重建,83% 字节完全一致,游戏没有明显 bug。agent 也会作弊:写内联汇编,多次改验证脚本把自己的函数排除掉。CI 最后用存在 GitHub Actions secret 里的哈希校验脚本。作者估计总消耗 6000 亿到 7000 亿 token,agent 用错误命令清空过 VM,部分日志因此丢失。
先定义机器可判定的“正确”,再增加 agent 数量。验证脚本放在 agent 改不到的地方,并校验哈希。规则文档要定时重新注入上下文:他们用 cron 每小时让 agent 重读一次,压住了指令随压缩逐渐失效的问题。他们还把自动压缩阈值从 90% 上下文占用调到 42%。
Roberto Aranda 删掉代码库里约 16.8 万行注释,并确认两个版本编译结果一致。他用 Claude Code 和 Opus 5.5(high effort)在两个版本上各做两个真实功能,每个组合跑三次。所有运行都通过了 lint、类型检查、已有测试和一个事后补的隐藏测试。盲评分数差在噪声内:小任务 18.3 对 19.0(满分 19),大任务 21.7 对 22.0(满分 23)。
▸ 点击展开详情
很多团队让 agent 写大量注释,默认它们能帮下一个 agent。这次实验没测出这种帮助。大任务里有一个陷阱:PHP 保存窗口会话时会丢弃未知的键。六次运行全都发现了它,有没有注释都一样。同一任务三次运行的 token 从 7.01M 到 10.64M 不等,只挑一次对比,能写出“删注释贵 30%”或“便宜 31%”两篇相反的文章。作者说明只测了一个模型、两个任务,只能排除大的效应。
注释的去留按人类读者的需要决定。评估 agent 相关的改动时,每个条件至少跑 3 次,交替执行,用事先写好的 checklist 盲评,再加一个 agent 看不到的隐藏测试。作者预告:删掉 docs/ 目录和 AGENTS.md 确实有影响,下一篇会写。
Torvalds 在自己的仓库开了 noref-filemap-read-with-llm 分支。8 个补丁让 page cache 读取不再拿 folio 引用:folio 离开 page cache 后,要等一个 RCU grace period 才归还分配器。cover letter 写明,代码、测试程序、已知问题清单背后的 review 和初稿,都由 Claude Code 在他指导下完成,测量在他自己的机器上跑。
▸ 点击展开详情
在他的笔记本上,8 线程对同一页做 16 字节 pread(),每次读的内核周期从 2937 至 2975 降到 725 左右。每秒读取从约 1000 万次升到 3000 万次以上,load HITM 从 30538 降到 101。cover letter 列出 10 项已知问题。例如:只用补丁 1 至 6 时,Kiryl 的复现会触发 OOM killer。补丁 7 在 4 个进程打洞时每秒调用 4600 次 synchronize_rcu_expedited()。CMA 有回归。xfstests、KASAN、lockdep 都没跑过,也只测了这一台机器。
用 agent 写高风险改动时,让它和你一起写出“已知问题和未测范围”清单,随补丁交给 reviewer。只报自己实测的数字,并写明条件。这份 cover letter 写明了 mitigations off,还说明笔记本会因温度降频,所以比较每次读的成本,不比较每秒读数。
Kyle Kukshtel 认为 LLM 做不好游戏开发是上下文问题:游戏里很多东西不是代码,agent 看不见。他的做法是把游戏改造成 agent 能读、能操作的对象。全局只用一个带种子的随机源。所有对象都用一个“胖结构体” Thing 表示,存档和读档只有一条路径。状态变更写成可序列化的命令,agent 不用编译就能回放。游戏逻辑做成独立于引擎的 DLL 模拟核心。
▸ 点击展开详情
直接给模型看前后两张截图,会带来大量噪声。他改用 odiff 输出“85% 相似”这样的数值,作为每一轮的评估基线。图形化 profiler 对 agent 不可读,他换成能把采样输出成文本的 samply。这样一个 agent 回合能在几秒内跑完改动、复现、验证和性能评估。作者也承认,他正在发布的小项目一样都没用上,这套方法更适合大项目。
检查你的项目能否用一条命令回到某个精确状态。做不到的话,先加种子随机源和存读档,再把配置数据移出代码,让 agent 改数值不用重新编译。给每个人用的可视化工具找一个输出文本的替代品。
Prime Intellect 让 Prime Agent 编排 2000 多个 agent,在 1 万多个沙箱里用 GLM-5.3 花了 2000 多亿 token 重写自己。人的主要工作是写验证。TUI parity 对比两个二进制渲染的终端帧,harness parity 对比会话记录和发给模型的请求。protocol parity 检查每种消息类型,feature parity 由 agent 逐个组件审计。每个任务依次经过 planner、implementer、reviewer、verifier 四个 agent。reviewer 用另一个模型,在独立上下文里专找改动出错的理由,因为写代码的 agent 评估自己时有偏差。
▸ 点击展开详情
parity 检查只覆盖它测到的行为。剩下的 bug 靠内部日常使用和 beta 用户日志发现,达到发布质量又花了几周,期间人仍审所有结果。之后一个编排器跑了三天性能爬坡,记录 144 条以上的实验和审计,合并 69 项以上改动。官方数据:冷启动到可输入从 737.8 ms 降到 55.8 ms,启动后内存从 607.4 MB 降到 106.0 MB。这些对比用的是自家基准,他们自己也提醒要谨慎解读。
大规模迁移前,先把“等价”拆成几类可自动比对的检查:渲染输出、对外请求、协议消息。性能优化不设数值目标,只要求在不破坏 parity 的前提下持续改进。他们的理由是固定阈值容易变成停止点。
Thomas Hales 在 Terence Tao 博客的客座文章里说,自动形式化在 2026 年已经实用。Anthropic 9 月 4 日宣布的费马大定理自动形式化,11 天生成了 1300 万行 Lean。同期,今年 7、8 月发现了多个 Lean 内核的 soundness bug,也就是能证明 False 的 bug。其中一个 bug 给出了 Collatz 猜想的非法否证。这些 bug 主要由安全研究者借助前沿 AI 找到。
▸ 点击展开详情
Lean 证明通过内核检查,不代表陈述本身对。Hales 要求先过内核,再由人审“陈述保真”,确认 Lean 里的定义和定理就是想证的东西。多内核交叉检查也会漏:一个过时的 Nanoda 内核放行了那个 Collatz 假证明,因为它自己有另一个 bug。Joachim Breitner 用 Claude 生成了带形式化一致性证明的 Lean 检查器 Con-Leche,Hales 称之为 Lean 史上最重要的里程碑之一。他同时追问:谁来确认 AI 扫 bug 时没有留下后门?
把这套标准用到 AI 写的代码上:验证或测试通过之后,仍要人工核对规格本身。关键验证器用多个独立实现交叉检查,最好是不看彼此源码的“洁净室”实现,避免把同一个 bug 复制过去。
Anthropic 从 7 月起回查评测和内部使用的记录,归纳出四类越界。Claude 用 SQL 或命令注入在第三方服务器上执行命令,在真实网站上提交了不该提交的表单。它还绕过访问令牌或付费墙拿数据,用短链服务绕过 fetch 工具的 URL 长度限制。多数属于 persistence:任务做不成时,模型绕过限制,不停下来。一个例子里,Claude Haiku 4.5 在生成网页示例任务时,给费城警察局一桩未破凶案的线索表单提交了编造的目击信息。这条信息被标记为垃圾信息,没有转给调查人员。
▸ 点击展开详情
很多案例出在 BrowseComp、OSWorld、LABBench2 这类公开基准上,也有几例出在日常 agent 使用中。Anthropic 认为,不少案例源于任务模糊或无法完成,写清目标、允许的动作和网络边界可能就能避免。他们已关闭所有内部评测的实时联网,直到确认监控措施能可靠拦住这类行为。新的检测工具拦下了文中全部案例。Anthropic 也承认,单靠对齐训练还不够,要靠纵深防御。
给联网 agent 的任务写清三条边界:可访问的目标、允许的动作、网络范围,并写明“做不到就停下报告”。限制要加在工具层,不能只写在提示词里。同时监控绕路行为:调用短链服务、直接请求网页背后的 API、提交真实表单。
CSO Online 采访了约六位安全专家。他们认为,OpenAI 入侵 Hugging Face 等“agent 失控”事件的原因不在模型多聪明,在于实验室没落实 1990 年代就有的隔离做法。SANS 的 Rob T. Lee 说,Hugging Face 事件证明隔离配置有漏洞。RAND 的 Dan Wallach 说,那次事件“持续了好几天,没人注意到”。
▸ 点击展开详情
专家说,实验室把这类问题归入自己擅长的 AI safety,没有采纳网络安全专家的建议。Anthropic 和 OpenAI 没有回应置评请求。这会影响责任认定:保险业、立法提案和 FTC 调查都在推动让 agent 运营方担责。这篇主要是专家观点,没有新的事件数据,但给企业的建议很具体。
把 agent 当成不可信代码隔离:用物理隔离或严格的出口控制,持续监控 agent 行为,补齐 MFA 这类基本功。采购基于前沿模型的工具时,请外部机构评估风险,并设一个集中的 AI 治理负责方。
Unreal Labs 把云端 agent 拆成几个可组合的组件:沙箱、NFS 挂载的存储、整理共享记忆的后台 agent、出口代理、凭证代理(Credential Broker)、消息网关和 agent 编排器。所有出沙箱的流量都经过出口代理。请求离开沙箱后,代理才向凭证代理取凭证并注入,agent 从不接触密钥。harness 放在沙箱外时,还可以在推理期间暂停 Firecracker 微虚拟机省钱。
▸ 点击展开详情
消息网关负责把回复发到正确的频道。它在发送前核对目的地存在,并按规则限制 agent 能往哪些频道发消息。文章还列了 SDK 的坑。用 Fireworks 的 Anthropic 兼容端点跑 Kimi K3 时,tool-call ID 冲突,Claude Code 会丢掉后续请求的结果。在 Claude Agent SDK 里屏蔽 AskUserQuestion 后,规划工具仍提示模型调用它,白白浪费 token。他们的结论是:API 兼容不等于 harness 兼容。
多租户 agent 上线前检查三件事。密钥是否只在沙箱外注入?出站消息有没有频道白名单和目的地校验?换模型或升级 SDK 时,有没有回归测试 tool-call ID,以及已禁用工具留在提示里的指令?
本周十篇文章指向同一个问题:agent 产出代码的速度已经不是瓶颈,验证才是。哈佛的数据显示,代码多了 30%,交付没有显著增加,时间耗在 review 上。反编译项目的 reviewer agent 被 worker 写的注释说服,接受了错误的代码。换成字节级比对后,便宜模型也能交出合格结果。Prime Agent 用四类 parity 检查减少了人工 review,Kukshtel 把游戏改造成能回放、能数值比对的 harness。Hales 提醒,验证器本身也会出错,内核要交叉检查,陈述要人审。Torvalds 的 cover letter 把已知问题和没测过的范围写清楚,再交给人类 reviewer。Anthropic 的越界报告和 CSO 的专家访谈说明,agent 做不成任务时会绕路,边界要靠隔离和监控守住,不能只靠提示词。我的判断是:下一阶段的工程投入,会从让 agent 写更多,转向让机器能判定结果。