论文的出发点是一个观察:要解决编程任务,LM agent 通常被设计为直接使用为人类造的现成应用——Linux shell、Python 解释器,甚至 vim。但作者在实践中发现,agent 在这种环境里连可靠地执行动作都很难。引言里给了一个典型场景(意译):
考虑 agent 直接与 Linux shell 交互这个最简单的设定。实践中我们发现 LM agent 很难在这个环境里可靠行动。例如,shell 没有提供一条简单命令去编辑文件的一小段;当用户做了一次非法编辑时,它也不给任何反馈。这些缺陷严重拖累性能,这就催生了对智能体-计算机界面(ACI)——LM agent 与计算机之间的一个抽象层——的需求。
作者的核心论断是:LM agent 代表了一类新的终端用户,有自己独特的能力与局限,值得为它们专门设计软件界面——正如人类工程师受益于 IDE(VSCode、PyCharm)这类强大应用一样。这个类比直接借自 HCI:HCI 用用户研究去弄清什么界面契合人类直觉,这篇论文用同样的方法论去研究什么界面契合 LM。人与 LM 的差异决定了设计准则不同:当前 LM 缺乏直接操作 GUI 的视觉理解能力;人可以灵活忽略屏幕上的无关信息,而对 LM 来说上下文里的每一个字都有固定的内存与计算成本,无关、分散注意力的内容会实打实地损害性能。所以像语法检查、代码导航这些 IDE 功能对 LM 同样有用,但必须换一种「LM 友好」的呈现方式。
论文的两点贡献:(1) 提出 ACI 概念,并证明不动模型权重、只精心设计界面就能大幅提升 agent 性能;(2) 构建并开源 SWE-agent 系统。方法论上,作者固定 LM、只优化 ACI,手段有两个:在开发集上人工检视 agent 行为、找出困难点并改进界面;对超参(窗口大小、历史处理方式、解码温度)做网格搜索(附录 B.1:在 SWE-bench dev 集 37 个实例上扫出最优配置——温度 0、窗口 100 行、历史只保留最近 5 条 observation)。
这是全文最常被引用的部分。作者从上述迭代中总结出四条对构建有效 ACI 尤其重要的设计原则(第 2 节,逐条意译):
SWE-agent 建在 Linux shell 之上(普通 Linux 命令仍可用),每一步 agent 按 ReAct 范式生成一段「思考(thought)+ 一条命令(action)」,再接收命令执行的反馈。ACI 由四个组件构成,细节值得逐一记牢——它们就是今天各家 coding agent 工具集的原型:
在代码库里定位,通常靠查 issue 里提到的文件名、函数、类。SWE-agent 提供三条专用命令:find_file(在仓库中按文件名搜)、search_file 与 search_dir(在文件/目录中搜字符串),它们返回摘要式搜索结果。关键护栏:每次搜索至多返回 50 条结果;一旦超过 50 条,不列出结果,而是提示 agent 把查询写得更具体。这一条抑制冗长输出、逼 agent 精化查询的设计,在消融里被证明比「模仿人类 IDE 的逐条翻页式搜索」好得多(见第六节)。
agent 用 open <路径> 打开文件后,查看器每次只显示一个至多 100 行的窗口。移动窗口用 scroll_down / scroll_up,或用 goto 直接跳到指定行。为便于文件内导航和代码定位,每次展示都附带:打开文件的完整路径、文件总行数、当前窗口之前/之后被省略的行数,以及每一行前置的行号。行号不是装饰——它是下一步 edit 命令按行区间定位的坐标系。
edit 命令与文件查看器联动,按行区间替换打开文件里的内容。它接收 3 个必填参数:起始行、结束行、替换文本——一步即可把起止行之间的所有行换成新代码(论文图 3 的例子:edit 404:407 加 end_of_edit 结束标记)。编辑生效后,文件查看器自动展示更新后的内容,agent 无需再发命令就能立刻确认编辑效果(对应原则 3)。
护栏部分(对应原则 4):就像人类靠 IDE 语法高亮发现格式错误,SWE-agent 在 edit 里集成了代码 linter。每次编辑时自动检查:若引入语法错误(如缩进错误、括号不配对),把挑选出的 linter 报错连同编辑前/编辑后的文件片段一起展示给 agent,非法编辑直接丢弃(不落盘),并要求 agent 重试。这一条在消融里贡献了整整 3 个百分点。
系统用信息充分的提示词、错误消息和历史处理器保持 agent 上下文「简洁且信息足」。要点:
表 1 核心数字(% Resolved / 平均成本):
| 系统 | SWE-bench full (2294) | SWE-bench Lite (300) |
|---|---|---|
| RAG w/ GPT-4 Turbo | 1.31% / $0.13 | 2.67% / $0.13 |
| RAG w/ Claude 3 Opus | 3.79% / $0.25 | 4.33% / $0.25 |
| Shell-only agent w/ GPT-4 Turbo | — | 11.00% / $1.46(无示范:7.33% / $0.79) |
| SWE-agent w/ GPT-4 Turbo | 12.47% (286/2294) / $1.59 | 18.00% (54/300) / $1.67 |
| SWE-agent w/ Claude 3 Opus | 10.46% / $2.59 | 13.00% / $2.18 |
三条读法:(1) 对比此前最好成绩——非交互 RAG 系统的 3.8%——SWE-agent 的 12.47% 是当时 SWE-bench 的新 SOTA;Lite 上比 RAG 贵 8~13 倍,但解决率提高 6.7 倍。(2) ACI 的净价值由 Shell-only 对照给出:同为 GPT-4 Turbo、同样交互式,加上 ACI 后 Lite 从 11.00% → 18.00%,相对提升 64%;若对比无示范的 shell agent(7.33%)则高出 10.7 个百分点。(3) ACI 虽然是围着 GPT-4 Turbo 调出来的,但可迁移:换 Claude 3 Opus 也能解约 10.5% 的 full 任务。
HumanEvalFix 上,SWE-agent w/ GPT-4 达 87.7%(Python)/ 89.7%(JS)/ 87.9%(Java)pass@1,大幅超过此前最好的非交互模型(如 WaveCoder-DS-6.7B 的 57.9%),说明这套界面对短程代码修复同样有效。图 4(转述):在 Lite 上跑 6 次取 pass@k,解决率从 k=1 的 18% 稳步爬到 k=6 的约 33%——平均性能方差不大,但单个实例是否被解决在多次运行间波动相当大。
表 3 在 SWE-bench Lite 上对 SWE-agent w/ GPT-4 逐组件消融(基线均为 18.0%):
| 维度 | 配置 | % Resolved |
|---|---|---|
| 编辑器 | edit + linting(默认) | 18.0 |
| edit 无 linter | 15.0(↓3.0) | |
| 无 edit 命令(只能靠 shell 重定向/sed) | 10.3(↓7.7) | |
| 搜索 | 摘要式搜索(默认) | 18.0 |
| 迭代式搜索(逐条 next/prev 翻页) | 12.0(↓6.0) | |
| 无搜索命令 | 15.7(↓2.3) | |
| 文件查看器 | 100 行窗口(默认) | 18.0 |
| 30 行窗口 | 14.3(↓3.7) | |
| 整文件展示 | 12.7(↓5.3) | |
| 上下文 | 只留最近 5 条 observation(默认) | 18.0 |
| 保留全部历史 | 15.0(↓3.0) | |
| 去掉示范 | 16.3(↓1.7) |
几个反直觉且重要的发现:
第 5.2 节从 286 条成功轨迹与失败轨迹里归纳出的行为规律,对理解 agent「怎么干活」很有价值:
create(写复现脚本)或 find_file/search_dir(定位)开场;「create → edit → python」是最高频的动作三连。agent 先做目录级宽泛搜索,再逐步「变焦」到具体文件与行。相关工作部分把 SWE-bench 的价值说清了:经典代码生成基准(HumanEval 等)问题自包含、描述约百行、正趋饱和(当时最好方法已解 94.4% HumanEval);而软件工程任务把程序修复、bug 定位、测试等多个 SE 子任务统一到一个贴近实践的任务形式里,且基于真实 GitHub issue 与人写单元测试做执行级评测。作者声明 SWE-agent 是第一个探索「语言 agent 做端到端软件工程」的工作。
结论(意译):「我们希望对 ACI 的进一步研究,能像 HCI 与心理学的协同那样,帮助我们建立对语言模型与 agent 的原理性理解。人类与 LM 有不同的特性、专长、训练目标与局限;界面(交互)设计过程本身可以被视为一种系统性的行为实验,揭示两种智能的差异。」
局限(诚实盘点):即便是最好配置,SWE-agent 仍在约 88% 的 full 任务上失败,失败主因是实现层面的(不是界面能救的);性能对基座模型高度敏感——同一套 ACI 下 Claude 3 Opus 比 GPT-4 Turbo 低约 2~5 个百分点,开源模型(Llama 3、DeepSeek Coder)当时干脆跑不动这种多轮 agent 设定;单实例结果跨运行方差大(pass@6 能到 ~33%,说明 pass@1 远未触到模型能力上界);评测局限于 Python 仓库(SWE-bench 的 12 个库)。此外 ACI 是在 GPT-4 上人工迭代+网格搜索调出来的,虽显示出可迁移性,但「为每个模型自动搜索最优界面」仍是开放问题。