你的编码 Agent 写不出的 PR 描述
你的编码 Agent 完成了任务。Diff 很小,测试全绿,Lint 干净,而 PR 正文从头到尾只有一句话:"修复 X 模块中的 bug。"远在六个时区之外的评审者打开页面,孤立地阅读 diff,看不出任何毛病,于是批准了一个技术上完全正确、却解决了错误问题的改动。代码合入。两天后,一位客户来问他们一直依赖的某个变通办法为什么突然失效了 —— 这时你才发现,你的 Agent 修复的那个 bug,并不是工单里描述的那个 bug。
代码没问题。评审者很尽责。Agent 也严格按照吩咐做事。问题出在他们之间的那个交付物 —— pull request —— 它丢失了一切本可避免这次失误的信息。
这就是"推理链断层"(rationale gap),也是 Agent 辅助开发中那些吞吐量数字不会告诉你的一面。Faros AI 在 2026 年对 22000 名开发者的遥测显示:重度采用 AI 的团队合并的 PR 数量增加了 98%,但 PR 体积增大了 154%,评审耗时延长了 91%。一项针对 567 个 Agent 生成 PR 的实证研究发现:83.77% 最终被接受,而人类作者的对照组是 91.01% —— 但其中 45.1% 需要人工修改才能满足正确性、文档或代码风格要求。按一项行业测量,AI 撰写的 PR 比人类撰写的要多等约 4.6 倍的时间才会被评审者取走。瓶颈已经从"写代码"挪到了"读 Agent 留下的隐式推理"。
PR 正文到底是为什么存在的
一个 pull request 是两个交付物粘在一起。Diff 回答的是"这段代码做了什么"。描述回答的是"这段代码为什么存在"。这是两个来源不同的问题。前者可以从补丁里机械地推导出来,一个 LLM 读读 diff,就能写出像样的摘要。后者不行,因为答案不在 diff 里,而在别的地方:发起这项工作的工单、触发工单的用户投诉、你和同事在 Slack 上讨论"那个显而易见的修法其实是错的"的那条线程、上周四开始失败的某个 eval、Agent 在第一轮评审后丢弃的那次失败尝试。
人类作者会下意识地把这些信息编进 PR 正文里,因为他们就是亲历这些上下文的人。他们会写:"这是我们在事故里第三次见到这个问题,上次的修法是 XYZ,这次用了不一样的路线是因为……" —— 异地评审者从未参加那场对话,但对话本身已经在交付物里了。
Agent 同样有这些上下文 —— 通常还更多。它有发起本次运行的提示词、它被分配的工单文本、它被要求重现的失败 eval、它在一次中止尝试里丢弃过的旧 diff、它读代码时的所有工具调用记录,以及一份每个决策的书面记录。然后,在开 PR 的那一刻,它把这一切都丢掉了,只写下"修复 X 模块中的 bug。"上下文在运行时是存在的,只是在交棒的那一刻被丢弃了。
