2026年5月,自主代码Agent的SWE-bench Verified分数已从2024年初的13%冲到78%,但同一个Agent在真实仓库里被人类reviewer合并的PR接受率只有35%–50%。这条横亘在基准与现实之间的鸿沟,是本期解剖的核心。更有意思的发现是:同一颗模型,套上不同的脚手架(scaffold),分数可以差出20分——Claude Sonnet 4.6在Cline上是59.8%,在SWE-agent v1上只有43.2%。这意味着代码Agent的胜负手从来不是模型,而是循环、检索、验证、记忆、停止条件这五件脚手架工程。本期用六栈实测数据拆解这道鸿沟的成因,并给出"该不该把issue丢给Agent"的决策红线。
| 维度 | Claude Code (Opus 4.7) | OpenAI Codex (GPT-5 Pro) | Cursor Agent (Sonnet 4.6) | Devin (Cognition) | OpenHands (开源) | Aider (Sonnet 4.6) |
|---|---|---|---|---|---|---|
| SWE-bench Verified | ~78% | ~76% | ~67% | ~58% | ~52% | ~63% |
| TerminalBench | ~58% | ~54% | — | ~46% | ~42% | — |
| 生产PR接受率 | ~48% | — | ~42% | ~38% | — | — |
| time-to-PR(中等任务) | ~14 min | — | ~8 min | ~22 min | — | — |
| 每任务成本 | $1.5–3.0 | — | $0.4–0.9 | $3.0–6.0 | 取决于模型 | $0.3–0.7 |
| Token/任务(入+出) | 80K+20K | — | 40K+10K | 150K+35K | — | 30K+8K |
| review迭代到合并 | ~1.4次 | — | ~1.2次 | ~1.8次 | — | — |
| 定位 | 自主+交互混合 | 自主+GitHub集成 | 交互对program | 多小时长程自主 | 开源框架/SDK | CLI对program |
数据综合自SWE-bench官方榜、厂商发布与25+企业级rollout的生产埋点。一个反直觉结论先抛出来:Devin单位成本最高($3–6)且PR接受率最低(38%),但它生成的代码行数最多(180行/任务)——长程自主的代价是范围失控,产出的往往是没人愿意审的800行大PR。
SWE-bench Verified的头部已经挤在70%–80%区间,它正在比所有人预期更快地饱和。Top Agent之间的分差已被噪声淹没,单一分数不再具备区分度。这迫使我们去看更硬的基准:SWE-bench Pro(现代工业代码、更难)在2026年初头部只有约23%;TerminalBench(真实终端任务)头部52%–58%。三个基准的"天花板"完全不同,揭示了同一个事实——代码Agent在"修一个已知的、有测试覆盖的、开源Python仓库的issue"这件事上接近人类水平,但换成"在没测试的工业代码上完成一个模糊需求",能力断崖式下跌。
评估真正能预测生产可用性的,不是SWE-bench,而是你自己的20任务内部eval(投入1–2天构建)+ 真实ticket的time-to-first-commit + 合并PR的diff大小。后者最容易作弊但也最能暴露范围纪律:缺乏强停止条件的Agent会刷出800行PR。SWE-bench区分不了这种失控。
78%的Verified分数对应48%的生产PR接受率,差出整整30个点。这道鸿沟来自三个基准无法捕捉的真实约束。第一,隐式约定:真实仓库有命名风格、错误处理范式、依赖注入习惯,这些从不出现在issue文本里,Agent只能靠概率猜,猜错就被打回。第二,reviewer期望:人类reviewer要的是"最小、可读、可回滚"的diff,而Agent倾向于"把问题彻底解决"——它会顺手重构、加防御性代码、补注释,结果是正确但不合规。第三,测试的虚假安全感:"所有测试通过"是最弱的完成信号,因为测试本身可能错、可能缺失、可能被Agenttrivially patch(比如直接抛掉断言)。一个扎实的观察:Devin的test pass rate只有63%,但它的PR仍能合并——说明人类reviewer实际替代了测试做了最终判断。
# 弱停止条件 vs 强停止条件 —— 决定PR是否会被合并
def weak_stop(obs):
return obs.tests_pass # Agent刷800行,没人审
def strong_stop(obs):
return (obs.tests_pass
and obs.diff_lines <= 200 # diff足够小可审
and obs.agent_can_summarize()) # 能一段话说清改了什么
鸿沟的本质是:基准奖励"把issue解决",生产奖励"把issue解决得像人写的"。两者目标函数不同,分数自然脱钩。
这是本期最重要的发现。Claude Sonnet 4.6这一个模型,在Cline脚手架上是59.8%,在SWE-agent v1上是43.2%,差出16分;文献中极端差距可达20分。模型不变,变的是scaffold。生产级Agent的能力方差,80%来自五个架构决策:
# 主循环 + 一次性子Agent:2026的范围纪律范式
def main_loop(goal):
ctx = ingest_issue(goal) # 小工作记忆
plan = plan(ctx)
while not strong_stop(ctx):
tool = decide_tool(ctx, plan)
if tool.noisy: # 浏览器/全量测试
ctx.observe = spawn_subagent(tool) # 子Agent跑完即弃
else:
ctx.observe = tool.run()
ctx = reflect(ctx, observe)
submit_pr(ctx)
Devin、Cursor、Claude Code、Replit Agent 3、OpenHands,名字各异,控制循环同构。这八步是产品的本体,模型只是引擎:
flowchart TD
A[1 INGEST<br/>读issue/相关文件/失败测试] --> B[2 PLAN<br/>产出短有序任务列表]
B --> C[3 ACT<br/>选工具:read/edit/shell/test]
C --> D[4 OBSERVE<br/>逐字读工具输出]
D --> E[5 REFLECT<br/>观察是否匹配plan]
E --> F{6 DECIDE}
F -->|继续| C
F -->|重规划| B
F -->|升级/人工| G[HITL 人工接管]
F -->|停止| H[7 VERIFY<br/>跑测试/type-check/lint/重读diff]
H --> I[8 SUBMIT<br/>开PR+一段话总结]
G --> I
落地形态分三类:终端对program(Aider、Claude Code、Codex CLI跑在你本地shell,Aider每次改动即commit,坏步骤一次git revert就回);云端沙箱VM(Devin、Sweep循环跑几十分钟,你睡觉它干活,Replit Agent 3单ticket可持续200分钟wall time);VS Code内嵌(Cline、Cursor)。三类不是能力差异,是自主度与可控度的权衡——本地=你随时叫停,云端=放手让它长跑,内嵌=人在环里随时干预。
检索是五个开关里分化最剧烈的,因为它直接决定Agent在大型仓库里"会不会迷路"。三派路线各有哲学。Augment Code押注BM25+embedding+code-graph三层:BM25抓精确词法命中,embedding抓语义近似,code-graph追踪符号的import/调用/继承依赖——当issue提到PaymentService,graph能瞬间把所有implements PaymentGateway的类拉进context,这是纯embedding做不到的跨文件推理。Cursor和Claude Code走tree-sitter符号索引+按需grep的轻量路线,不预建图,靠运行时grep和符号表动态拼context,启动快、维护成本低,但跨文件间接依赖会漏。Aider最反潮流——让你手动/add文件到context,明确放弃自主检索,换来了近乎为零的检索噪声和最高精度,代价是不能处理"我不知道该看哪些文件"的issue。
实操判断线很清晰:仓库<5万行、符号关系简单→grep+tree-sitter够用(Cursor/Claude Code);10万行+、强分层架构、跨文件契约多→必须上code-graph(Augment路线);任务范围明确、文件少、追求成本最低→手动add(Aider,单任务$0.3-0.7)。检索选错,模型再强也是睁眼瞎。
OpenHands的CodeAct脚手架是2026年最有意思的架构赌注:让模型直接写Python,在沙箱里执行,而不是发结构化工具调用。逻辑上这很优雅——模型本来就更擅长写循环和条件,而不是把循环压扁成一串JSON tool_call;遇到"对所有*.yaml文件批量改一个字段"这种任务,一段for f in glob(...): ...远比十次串行edit_file调用高效,而且模型能自己处理异常分支。实测在复杂多步任务上,CodeAct的可执行动作显著优于JSON-schema。
但红线在沙箱。可执行代码意味着Agent拥有了图灵完备的破坏力——它能os.system("rm -rf"),能起子进程联网外传,能fork bomb。JSON工具调用是白名单(Agent只能调你暴露的工具),CodeAct是黑名单(Agent能做Python能做的一切)。所以CodeAct必须配硬化容器:只读挂载仓库、禁网或代理出口、CPU/内存/时间quota、文件系统overlay可一键丢弃。Devin和OpenHands都为此构建了完整的容器化执行层。选型法则:任务需要组合循环/条件/数据管道→CodeAct赢;任务边界清晰、只需read/edit/test几个动作→JSON工具调用更安全更可观测。这条线决定了你是要雇一个"会写脚本的实习生"(CodeAct)还是一个"只会用你给的几个按钮的助手"(JSON)。
同样修一个中等issue,Aider $0.3,Devin $6,差20倍。拆token就明白:Aider 30K入+8K出(你手动给了精准文件,context极小);Devin 150K入+35K出(自主检索要反复读文件、跑失败测试、自己摸索,context爆炸)。成本=自主度的直接定价。Replit Agent 3能跑200分钟,意味着单ticket的token账单可能上百美元,这就是为什么SWE-bench榜上的"自主时长"在真实账单里是另一回事。
成本工程的四个杠杆:检索精度(少读无用文件=Aider路线,省60%输入);模型分级(用便宜模型做检索/规划草稿,贵模型只在关键edit/reflection调用,OpenHands的SDK原生支持per-step切模型);上下文压缩(把已读文件summarize成事实清单,丢弃原始大段代码,但只在sub-agent里做,主循环留原始);预算熔断(设硬token上限,超了直接escalate给人类,而不是让Agent继续烧)。生产级rollout里,不做成本工程的团队,第一个月的API账单通常是预算的3–5倍。
交互式对program(你看着它写,30–90秒接受一次):Cursor Agent。time-to-acceptance最低(8分钟到PR),review迭代最少(1.2次),适合日常增量改动。它本质是你和Agent共同持有context,风险低。
明确的、有测试覆盖的issue(一次性自主):Claude Code或Codex CLI在agent mode。SWE-bench 78%/76%,PR接受率48%,跑在你本地shell可随时叫停。适合"fix issue #482"这类边界清晰的任务。
长程、模糊、需要web调研的绿field任务:Devin,但要接受38%接受率和$3–6成本,且强制配diff大小review gate,否则会刷大PR。仅适合自包含、容错高的任务。
自建、要掌控脚手架、多模型切换:OpenHands(65K+ star,SDK化,CodeAct)。是唯一能让你per-step切模型(规划用Opus、实现用Sonnet、review用Haiku)的框架,也是研究代码Agent内部机制的最佳实验台。
极致成本敏感、任务范围明确:Aider+手动add,$0.3/任务,配合open-weight模型可降到几乎为零,代价是放弃自主检索。
一条贯穿的红线:无论选哪个,先花1–2天建你的20任务内部eval,再决定。SWE-bench 78%不代表它能在你的仓库里合格——你的隐式约定、你的测试质量、你的reviewer标准,才是真正的验收基准。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
