Beyond Resolution Rates:9374条轨迹揭示的Coding Agent失败真相
Beyond Resolution Rates:9374条轨迹揭示的Coding Agent失败真相
失败不是因为patch太复杂,而是因为Agent根本没有理解代码在做什么。
研究背景
NCSU的Mehtiyev和Assunção在2026年发表了也许是迄今为止规模最大的coding agent行为研究:他们在SWE-bench Verified的500个真实任务上,跑完了19个Agent(8个框架 × 14个LLM),合计9374条轨迹。每对组合都完整跑完所有任务——这解决了之前研究最大的confound:任务难度控制。
之前的研究只能对比”Agent A vs Agent B”,但没办法说”在同等难度的任务下,谁更好”。这个数据集第一次让研究者能做within-task配对比较。
核心发现
发现一:Patch复杂度是伪命题
之前的工作假设:任务越难 = patch越大(改的行数越多)。这个研究彻底推翻了这个假设。
他们发现了12个”从未被任何Agent解决”的任务,这12个任务的patch都是极简的单行修改,人工标注认为它们是”容易”的任务——但所有Agent都失败了。
失败原因:架构推理缺口(architectural reasoning gaps)和领域知识缺口,而不是patch的编辑量。
django-15863是个经典案例:一个floatformat对Decimal精度丢精度的问题,修复只需要改一行。但这个bug的根因藏在Django的数值格式化抽象层,Agent需要理解整个链路的架构才能找到正确位置。12个never-solved任务,全是这个类型。
教训:Benchmark的resolution rate低估了真实难度。简单patch的任务不代表容易,Agent真正卡住的是”这个代码为什么要这么写”。
发现二:轨迹长度是混淆变量
大量之前的工作报告”轨迹越长=越容易失败”。这个研究控制任务难度后发现:这个相关性会反转。
当控制了Agent身份这个变量后,轨迹长度和失败率正相关(越长的轨迹越容易失败)。 当控制了任务难度这个变量后,轨迹长度和失败率负相关(越长的轨迹反而成功率更高)。
原因:简单任务用短轨迹就能解决,困难任务需要更长轨迹,但之前的研究把”困难任务”和”长轨迹”混为一谈。
真正有预测力的不是轨迹长度,而是轨迹结构(trajectory structure):
- 先收集上下文再编辑的Agent,成功率更高
- 投入验证(validation) 的Agent,成功率更高
- 这些策略是Agent固有的(agent-determined),而不是根据任务难度自适应调整的
也就是说:一个Agent在A任务上先验证再编辑,在B任务上也会这样做。这是这个Agent的”性格”,不是智能适配。
发现三:Claude 4 Sonnet vs GPT-4的同框架对照
论文给了个漂亮的对比:同一个SWE-agent框架,一个用Claude 4 Sonnet,一个用GPT-4,做同一个任务django-15863。
Claude 4 Sonnet轨迹(37步):
- 遵循 “understand → reproduce → fix → verify” 工作流
- 一次编辑,零语法错误
- 任务成功
GPT-4轨迹(36步):
- 找到正确文件后开始疯狂编辑
- 产生28个语法错误
- 从未运行项目测试套件
- 任务失败
步数几乎一样,但行为模式天壤之别。
发现四:LLM > Framework
这是最一致的结论:
使用相同LLM的Agent,在任务上的agreement(一致性)远超使用相同框架的Agent。
框架设计确实影响Agent的tactics(策略),但这个影响随着LLM能力增强而缩小。更强的LLM可以弥补框架的不足,更弱的LLM即便在精心设计的框架里也受限。
这意味着:买更好的模型,比调框架更值。
方法论亮点
研究团队设计了一套13符号的轨迹编码系统,比之前的8类型系统精细得多:
| 符号 | 含义 |
|---|---|
| Lb | 定位→浏览整个文件 |
| Lt | 定位→针对性读取 |
| Ls | 定位→搜索 |
| P | Patch(干净编辑) |
| Ps | Patch→语法错误 |
| Pi | Patch→导入错误 |
| Pr | 重新Patch(同文件) |
| Vp | 验证通过 |
| Vf | 验证失败 |
| Ve | 验证→运行时错误 |
| Vr | 重现脚本 |
| E | 环境设置 |
| G | 通用操作 |
关键是加入了执行质量信息(干净patch vs 语法错误patch),而不仅是动作类型。这让他们能区分”编辑了”和”编辑成功了”。
对从业者的意义
- 不要迷信resolution rate:20%的失败率背后,不是”有些任务太难”,而是某些类型的架构推理缺口是系统性的。
- 强制验证回路:Ve/Vf符号告诉你的——不在验证上投入的Agent,成功率系统性更低。你的harness有没有在每次编辑后自动运行测试?
- 选模型比选框架重要:在多个harness间横跳,不如把钱花在更强的模型上。
- 轨迹结构才是干预点:如果一个Agent先天不擅长先理解再动手,给它更好的prompt或convention可以在一定程度上弥补。
论文:arXiv 2604.02547 — Mehtiyev & Assunção, NCSU, 2026
💬 评论
💡 使用 GitHub 账号登录 即可参与讨论