第 9 章 编程 Agent(Coding Agents)
编程 Agent 是 Agentic LLM 落地最快、商业化最深的方向:它把 LLM 从"补全下一行"升级为"读懂仓库 → 定位 → 改多文件 → 跑测试 → 看报错 → 再改"的自主闭环。本章梳理其工作流、两条技术路线(agentic / agentless)、主流工具全景(Claude Code、Cursor、Devin、OpenHands、Aider 等)、SWE-bench 评测体系,以及奠基论文。对应 第 3 章 Agent 架构 与 第 4 章 评测。
9.1 什么是 coding agent
三层递进,区别在于自主程度与反馈闭环:
| 层级 | 形态 | 能否自己跑/验证 | 代表 |
|---|---|---|---|
| ① 补全 | 行内/多行代码补全(autocomplete) | 否 | GitHub Copilot 补全、Cursor Tab |
| ② 助手/Chat | 对话式问答 + 单次改写,人来粘贴/执行 | 否(人在环) | IDE 内 Chat、ChatGPT |
| ③ Agent | 读仓库 + 多文件编辑 + 跑命令/测试 + 依据报错迭代 | 能(工具调用闭环) | Claude Code、Devin、OpenHands、SWE-agent |
本章的"coding agent"特指第 ③ 层:具备工具使用(读写文件、执行 shell/测试)、规划与反思、对仓库的感知-行动闭环。
9.2 典型工作流闭环
多数 coding agent 共享一条循环,核心是 SWE-agent 提出的Agent-Computer Interface(ACI)——为 LLM 设计专门的"看代码/改代码/跑测试"动作集,让模型能稳定操作真实代码库:
9.3 两条路线:agentic vs agentless
2024 年 Agentless 论文提出一个反直觉发现:把 LLM 的自主性关掉、用固定三段式流水线(定位 → 修复 → 验证),在 SWE-bench 上也能打到与复杂 agent 相当的水平——提醒大家"脚手架不是越复杂越好"。
| 维度 | Agentic(自主) | Agentless(流水线) |
|---|---|---|
| 决策 | LLM 自行决定下一步动作(ReAct 式) | 预设固定步骤,LLM 只填空 |
| 代表 | SWE-agent、AutoCodeRover、OpenHands | Agentless |
| 优点 | 灵活、能处理开放/长程任务 | 简单、便宜、可控、可复现 |
| 缺点 | token 贵、易绕路/翻车、难复现 | 遇到流水线没设计的情况就卡住 |
实务结论:先用最简单能解决问题的方案;需要开放探索/长程时再上完整 agent。二者常作为彼此的基线对照。
9.4 工具全景(2026)
按形态分四类:IDE 扩展 / AI 原生 IDE / 命令行(CLI)/ 云端异步。很多工具横跨多类。分数与定价变动快,请以官方页为准。
| 工具 | 形态 | 模型 | 开源 | 一句话 |
|---|---|---|---|---|
| Claude Code | CLI(亦接 IDE) | Claude(厂商) | 否 | 终端优先、强多文件重构,SWE-bench 长期领先之一 |
| OpenAI Codex | CLI / 云 | GPT(厂商) | CLI 开源 | 异步云端任务 + 终端,Terminal-Bench 强 |
| Cursor | AI 原生 IDE | 多模型 | 否 | IDE 内体验与文件感知补全的标杆 |
| Windsurf | AI 原生 IDE | 多 + 自研 SWE-1.5 | 否 | Cognition 出品,Cascade 多文件上下文 |
| Devin | 云端异步 | 厂商 | 否 | 最"自治"的一类,像把任务派给初级工程师 |
| OpenHands | 云端/平台 | 任意(BYOK) | 是(MIT) | 开源 agent 平台(原 OpenDevin),CodeAct 动作空间 |
| SWE-agent | 研究/CLI | 任意 | 是 | 提出 ACI;SWE-bench 官方常用脚手架(含 mini 版) |
| Aider | CLI | 任意(BYOK) | 是(Apache-2.0) | Git 原生:每次改动自动提交,历史干净 |
| Cline | IDE 扩展 / CLI | 任意(BYOK/本地) | 是(Apache-2.0) | 开源默认选项,支持任意模型与本地 Ollama |
| GitHub Copilot | IDE 扩展 | 多模型 | 否 | 装机量最大,深度集成 GitHub/VS Code |
| Gemini CLI | CLI | Gemini | 是 | Google 的开源终端 agent |
| Goose · Continue | CLI / 扩展 | 任意 | 是 | 可扩展的开源 agent / 自托管助手 |
9.5 关键技术
- 仓库级定位(localization):从"几十万行"里找到该改哪几处。手段:embedding 检索、grep/AST 结构检索、谱系故障定位(SBFL)(AutoCodeRover)。定位质量常是成败关键。
- Agent-Computer Interface(ACI):给 LLM 设计简洁、容错的动作集(查看/编辑/测试),比"裸 shell"更稳(SWE-agent)。
- 测试时验证与多候选:生成多份 patch,用已有测试/自动生成测试筛选(reproduce-then-fix);失败带着报错回炉。
- 上下文工程:仓库地图、相关文件片段、依赖图按需注入;长仓库配合检索而非全量塞入。
- 子 Agent / 并行:把"探索/读多文件/跑多测试"分派给子 agent 并行,主循环只保留结论(呼应 第 3 章多智能体)。
- 记忆与长程:跨回合的笔记/计划文件,支撑长重构与"过夜任务"。
9.6 评测基准
- SWE-bench(swebench.com)— 真实 GitHub issue 改代码,提交 patch 须通过测试。家族:Full(2,294 题)、Verified(人工核验 500 题,主流口径)、Lite(300 题,便宜)、Multimodal。
- Terminal-Bench — 终端环境里完成任务的能力,CLI 类 agent 常用。
- 更长程:仓库演化 / 长 horizon 软件维护类基准陆续出现。
9.7 关键论文与综述(可核实)
- SWE-bench: Can Language Models Resolve Real-World GitHub Issues?(Jimenez et al., ICLR 2024)— 定义了"真实 issue 改代码"评测,本领域的标尺。arXiv:2310.06770
- SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering(Yang et al., NeurIPS 2024)— 提出 ACI,奠定 agentic 改代码范式。arXiv:2405.15793
- AutoCodeRover: Autonomous Program Improvement(Zhang et al., ISSTA 2024)— AST 结构检索 + 谱系故障定位,强调"结构而非文件堆"。arXiv:2404.05427
- Agentless: Demystifying LLM-based Software Engineering Agents(Xia et al., 2024)— 用固定流水线挑战"复杂 agent 必要性",强基线。arXiv:2407.01489
- Large Language Model-Based Agents for Software Engineering: A Survey(Liu et al., 2024;TOSEM)— 从 SE 与 agent 双视角系统综述(配 Agent4SE 论文列表)。arXiv:2409.02977
- Agents in Software Engineering: Survey, Landscape, and Vision(Wang et al., 2024)— 感知/记忆/行动三模块框架与未来方向。arXiv:2409.09030
9.8 实践要点
逐改动审查(review each change):当前 coding agent 在长、欠规格、陌生的任务上仍会翻车——最佳实践是"每个 patch 都过一遍人眼",而非全自动放手。
把任务说清楚:一开始就给清晰的目标、约束、验收标准(最好能跑的测试);模糊需求逐回合追加会显著降低成功率与 token 效率。
成本意识:agentic 路线 token 消耗大;用 effort/任务预算控制,简单任务用 agentless 或低 effort。