如何让 SWE-agent 自动修复 GitHub Issue:从安装到第一次 AI 修 bug 的完整路径
【免费下载链接】SWE-agentSWE-agent takes a GitHub issue and tries to automatically fix it, using your LM of choice. It can also be employed for offensive cybersecurity or competitive coding challenges. [NeurIPS 2024]项目地址: https://gitcode.com/GitHub_Trending/sw/SWE-agent
你有没有过这种经历:issue 列表里躺着一个低优先级的 bug,你每次看到它都想"回头再修",然后永远修不了。SWE-agent 就是为这种场景准备的——你丢给它一个 GitHub issue 的链接,它自动拉取代码、复现问题、修改源码,最后产出一个补丁,全程用你选定的大语言模型(OpenAI、Claude 都行)驱动。
能力速览:它到底能替你干什么
先说清楚它能干什么,免得期待错位。
能做的:
- 读 issue 描述,自己定位相关代码文件;
- 在沙箱里(默认是 Docker 容器)写复现脚本、跑命令;
- 改代码、验证修复,最后提交一个 patch;
- 一次跑一单,也可以用批量模式同时跑上百个 issue,适合做 benchmark;
- 官方还提到它同样可以用于网络安全攻防演练和编程竞赛挑战。
不做的:
- 它不直接替你提 PR、不替你 review 代码质量——产出的补丁你自己把关;
- 它不保证修对。复杂逻辑 bug 它可能修两三轮才收敛,也可能修到一半超步数退出。
简单说:它是个"干活的",不是"拍板的"。
从零到跑通:安装 + 第一次运行
整个过程顺利的话,几分钟就能跑起来。前提:Python 3.8+、Git,以及一个可用的 LM API 密钥(Anthropic 或 OpenAI 均可)。
第一步,克隆仓库并安装:
git clone https://gitcode.com/GitHub_Trending/sw/SWE-agent cd SWE-agent pip install -e .第二步,把模型密钥放进环境变量(也可以写成仓库根目录的.env文件):
export ANTHROPIC_API_KEY=<你的密钥> # 或 export OPENAI_API_KEY=<你的密钥>第三步,跑官方教程里的一个语法错误级的小 issue,验证链路:
sweagent run \ --agent.model.name=gpt-4o \ --agent.model.per_instance_cost_limit=2.00 \ --env.repo.github_url=https://github.com/SWE-agent/test-repo \ --problem_statement.github_url=https://github.com/SWE-agent/test-repo/issues/1命令里三个参数各管一件事:--agent.model.name选模型,--agent.model.per_instance_cost_limit设单个任务的费用上限(美元),--env.repo.github_url指定要修的仓库,--problem_statement.github_url指定要修的 issue。
跑起来后你会看到几个阶段:启动 runtime(几秒钟)、安装工具、打印系统提示词、然后进入主循环——模型开始一步步读文件、改代码。全部细节会被存成一个.traj轨迹文件,放在trajectories/目录下,这是它最重要的输出物。
密钥配置细节可以看 模型与密钥说明,完整示例在 Hello World 教程。
把一个真实任务交给它:标准用法与工作流
换成你自己的 issue 时,思路完全一样:把上面命令里的最后两个 URL 换成你的仓库和 issue 链接,然后盯着终端看它干活。
它会经历这么几个阶段。先"starting runtime"——这是底层执行环境(由 SWE-ReX 管理)在容器里启动,本地 Docker、Modal、AWS Fargate 都可以。接着安装它要用的工具集。然后系统提示词和问题描述一起喂给模型,主循环开始:模型每次提出一个动作(读文件、跑 bash 命令、编辑代码),环境执行后把观察结果喂回去,循环往复,直到它调用submit——此时 SWE-agent 从它的工作区里抽出 diff,就是你拿到的补丁。
如果你想一次处理一批 issue(比如历史积压、跑 SWE-bench 评测),把run换成run-batch,用--instances指定数据源,用--instances.slice切片控制数量:
sweagent run-batch \ --config config/default.yaml \ --agent.model.name=gpt-4o \ --instances.type=swe_bench \ --instances.subset=lite \ --instances.split=dev \ --instances.slice=:3这条命令会从 SWE-bench 数据集里取前 3 条 issue 并行开跑,底部有进度条。每个任务一个实验目录,轨迹文件全部归档在trajectories/下。批量模式的完整玩法见 batch mode 教程。
拆开黑盒:它内部是怎么工作的
跑通了,再看它是怎么分工的,就不只是"一个脚本"的感觉了。
整个系统可以拆成四个角色:
- Agent(决策者):核心决策单元,加载
config.yaml里的配置——用什么提示词模板、哪些工具可用、历史消息怎么处理,全在这里定义。它负责把环境反馈组织好,问模型"下一步干什么",再把模型的动作派给环境执行。 - SWEEnv(执行者):环境管理模块,负责文件操作和命令执行。所有 bash 命令、文件读写都发生在这里,模型本身碰不到你的机器,只能碰容器里的那份代码。
- History Processor(记忆管理员):Agent 和环境之间的每一轮对话都要经过它。它决定哪些历史消息保留、哪些压缩、哪些加缓存标记(
cache_control),直接影响 token 费用和上下文质量。 - Model(大脑):你配置的任意 LM。它只看经过 History Processor 加工后的消息,输出下一个动作。
所以一次运行其实是这样转的:sweagent run启动后,Agent 把问题描述发给 Model;Model 返回动作,Agent 转交给 SWEEnv 执行;SWEEnv 返回观察结果,History Processor 整理后送回 Model——循环直到submit。理解了这条链路,后面排查问题时你就知道该查哪一环。
结果不理想?按这里排查
轨迹文件.traj是诊断的第一现场,它完整记录了模型每一步的思考、动作和环境的返回。
第一步:打开轨迹查看器。项目内置两种:命令行版sweagent inspect(vim 风格按键翻轨迹),和网页版sweagent inspector(在含.traj文件的目录里运行,浏览器直接打开,默认端口 8000,可用--directory指定目录)。网页版能看到每一步的完整对话和评估报告:
第二步:对照症状找原因。
模型连接失败:先确认密钥导出对了没有(
echo $ANTHROPIC_API_KEY之类的简单检查),再看网络能否直连模型 API,必要时配代理。动作被解析失败:默认配置用 function calling 解析模型输出;如果你的模型不支持,要把解析器换掉——在配置里设
agent.tools.parse_function.type为thought_action,改为从回复里抽最后一个三反引号代码块。跑太贵/太久:加上
--agent.model.per_instance_cost_limit设费用上限,超了自动停;或者收紧配置的max_steps。环境起不来:默认后端是 Docker,确认 Docker 已安装且在运行;起不来的排查方法见 安装排障提示。
依赖冲突:老规矩,虚拟环境隔离:
python -m venv .venv source .venv/bin/activate
更多查看轨迹的技巧见 inspector 文档。
想继续深挖:进阶资源
按需取用,不用全看:
- 官方文档首页:整体入口,从配置到参考 API 都在这;
- 配置模板:主配置文件,提示词、工具、历史处理器都在里面,config/demo/ 下还有更精简的变体;
- benchmark 配置集:现成的评测配置,比如
250212_sweagent_heavy_sbl.yaml; - 扩展工具目录:
registry、edit_anthropic、search、windowed等工具包,想给 Agent 加新能力就从这里看起。
一句话收尾:把 issue 链接交给 SWE-agent,把 review 补丁的时间留给自己——这就是它存在的意义。
【免费下载链接】SWE-agentSWE-agent takes a GitHub issue and tries to automatically fix it, using your LM of choice. It can also be employed for offensive cybersecurity or competitive coding challenges. [NeurIPS 2024]项目地址: https://gitcode.com/GitHub_Trending/sw/SWE-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考