项目快照:SWE-agent/SWE-agent,约 20,344 个 Star,2,222 个 Fork;最新推送时间 2026-09-14T22:12:07Z。本文基于仓库公开资料撰写。
项目地址:https://github.com/SWE-agent/SWE-agent · https://swe-agent.com

SWE-agent:面向 GitHub Issue 的自动化软件工程智能体
SWE-agent 是一个以 Python 实现的开源软件工程智能体(Software Engineering Agent)。它接收 GitHub Issue,并尝试调用用户选择的语言模型(Language Model,LM)分析代码仓库、执行工程任务并生成修复结果;项目资料还明确提到竞争性编程和进攻性网络安全场景,但后者必须限制在获得授权的隔离环境中。
“SWE-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.”
项目速览(TL;DR)
该项目适合需要把 GitHub Issue、语言模型与代码执行流程连接起来的 Python 团队。它提供名为 sweagent 的命令行入口,要求 Python 3.11 或更高版本,并通过 MIT 许可证开放源代码。
| 项目属性 | 已知信息 | 依据 |
|---|---|---|
| 主要语言 | Python | GitHub 元信息与 pyproject.toml |
| Python 要求 | >=3.11 |
project.requires-python |
| 许可证 | MIT License | LICENSE |
| 默认分支 | main |
GitHub 元信息 |
| 命令行入口 | sweagent |
project.scripts |
| 项目标注 | NeurIPS 2024 | 仓库描述 |
| Star / Fork | 20344 / 2222 | 题目提供的 GitHub 元信息快照,未提供统计日期 |
仓库没有在给定资料中提供性能吞吐量、修复成功率、并发上限、服务等级协议(Service Level Agreement,SLA)或固定模型清单。评估时不应把“尝试自动修复”理解为能够保证生成正确补丁,也不应把 Star 数量作为工程质量或安全性的替代指标。
定位与目标用户
SWE-agent 的核心定位是开放源代码的智能体计算机接口(Agent Computer Interface),用于让语言模型以软件工程师的方式运行。它不是资料中承诺的托管修复服务,也没有提供可直接引用的可用性或技术支持承诺。
从项目描述和打包元数据可以确认,其主要受众是开发者。输入侧围绕 GitHub Issue 或特定挑战任务,执行侧由语言模型、仓库操作和命令执行能力共同构成,最终结果的具体文件格式、补丁结构及提交方式未在给定资料中说明。
项目允许用户选择语言模型,但资料没有列出经过验证的模型名称、模型版本、上下文窗口要求、最低推理能力或调用费用。模型接入方式、密钥字段和供应商差异应以最新官方文档为准,不宜根据依赖列表自行推导接口签名。
核心功能
已提供的资料能够确认四类能力边界:处理 GitHub Issue、连接语言模型、执行 GitHub API 操作,以及面向竞争性编程或授权安全挑战开展任务。每类能力都依赖外部输入和执行环境,并非只安装 Python 包就能完整运行。
从 GitHub Issue 发起修复任务
该能力以 Issue 描述和目标代码仓库为主要输入,触发后由智能体尝试定位问题并执行修复。仓库描述只使用了“tries to automatically fix it”,因此输出是否为补丁、提交或拉取请求(Pull Request,PR),以及成功判定规则,官方仓库在给定资料中未提供该信息,建议以最新 README 为准。
.env.example 表明 GitHub API 操作涉及查询仓库元数据、克隆私有仓库和创建 PR。执行这些操作需要与目标仓库权限相匹配的个人访问令牌(Personal Access Token,PAT);仅阅读本地公开仓库是否能够完全省略令牌,给定资料没有作出承诺。
使用用户选择的语言模型
项目声明允许使用用户选择的语言模型,并依赖 litellm>=1.44.12,同时排除 1.82.7 和 1.82.8。根据本文作者的经验判断,该依赖承担模型调用适配的概率较高,但具体供应商、配置字段、重试策略和响应格式没有出现在现有资料中,不能据此编造模型配置示例。
模型接入的触发条件至少包括可用的模型服务和对应凭据。模型请求会发送哪些 Issue 内容、代码片段或执行结果,官方仓库在给定资料中未提供该信息;处理私有代码前,应先从最新文档和所选模型服务条款中确认数据流向。
GitHub 仓库与 PR 操作
环境变量样例明确说明,GitHub 令牌用于查询仓库元数据、克隆私有仓库和创建 PR。公开仓库所需权限标记为 public_repo,私有仓库标记为 repo,后者覆盖私有仓库访问以及前述操作。
该功能依赖有效的 GITHUB_TOKEN,并由 GitPython、ghapi>=1.0.0,<2 等依赖提供相关能力。令牌是否自动从当前目录的 .env 加载、PR 的分支命名规则以及重复提交处理逻辑,给定资料没有说明。
竞争性编程与安全挑战
仓库描述包含竞争性编程和进攻性网络安全用途,测试配置中还存在名为 ctf 的 pytest 标记,用于 SWE-agent 在夺旗赛(Capture The Flag,CTF)挑战上的 EnIGMA 测试。其任务输入格式、挑战环境镜像、评估器和答案提交方式均未在现有资料中给出。
安全任务的输出可能包含命令、代码或漏洞分析结果,因此必须在明确授权的目标和隔离环境中运行。本节仅说明项目能力边界,不提供针对第三方系统的攻击步骤、权限绕过方法或隐蔽执行技巧。
系统架构与关键模块
根据打包配置,能够直接确认的入口是 sweagent.run.run:main,安装后映射为 sweagent 命令。给定资料没有提供完整源码目录清单或架构图,因此下述结构只区分已经有配置证据的层次,不扩展不存在的内部类名和接口。
- 命令入口层:
project.scripts将sweagent命令映射到 Python 函数sweagent.run.run:main。参数名称、子命令结构和退出码约定应通过本地sweagent --help与最新文档确认。 - 智能体包层:发行包名为
sweagent,版本由sweagent.__version__动态读取。资料将该包描述为用于运行语言模型的软件工程智能体计算机接口。 - 模型集成层:依赖列表包含
litellm,但模型路由、请求参数和凭据变量未在给定文件中展开。 - 代码执行层:项目依赖
swe-rex>=1.4.0。该依赖在完整系统中的调用边界与隔离保证未由现有资料解释,因此不能据此声称默认提供容器级或虚拟机级隔离。 - 仓库集成层:
GitPython、ghapi和GITHUB_TOKEN与 GitHub 操作相关,能够覆盖元数据查询、私有仓库克隆和 PR 创建所需的授权入口。 - 交互与服务依赖层:依赖中含有
rich、textual>=1.0.0、flask、flask-cors和flask-socketio。仅凭依赖声明无法确认哪些命令启动终端界面或 Web 服务,也无法确认监听地址与端口。
一条有证据支持的高层数据路径是:任务描述进入命令入口,智能体协调语言模型与代码执行组件,并在具备授权时调用 GitHub 能力。中间状态持久化位置、会话恢复机制、补丁验证阶段以及最终产物定义,官方仓库在给定资料中未提供该信息。
依赖与运行环境
项目要求 Python 3.11 或更高版本,并在分类器中列出 Python 3.11、Python 3.12 和 Python 3 Only。操作系统分类为独立于操作系统,但这只反映包元数据,不等同于每种操作系统上的所有执行后端都经过验证。
构建与安装基础
构建系统使用 setuptools,后端为 setuptools.build_meta。版本号不是写死在 pyproject.toml 中,而是从 sweagent.__version__ 动态取得,因此给定资料无法确认当前发布版本号。
运行时依赖分组
- 数据处理:
datasets、numpy、pandas、tabulate。 - 配置与数据模型:
ruamel.yaml、pydantic、pydantic_settings、python-dotenv、simple-parsing。 - 模型与重试:
litellm>=1.44.12,!=1.82.7,!=1.82.8、tenacity。 - 代码与 GitHub:
unidiff、GitPython、ghapi>=1.0.0,<2。 - 执行与交互:
swe-rex>=1.4.0、rich、rich-argparse、textual>=1.0.0。 - 网络与服务:
requests、flask、flask-cors、flask-socketio。
除带约束的三个依赖外,其余运行时依赖在资料中没有固定版本。生产环境若要求可重现安装,需要自行生成和审查锁定文件;仓库是否维护官方锁文件,给定资料没有提供信息。
快速开始
最小闭环以“安装包、调用命令入口、验证导入和版本属性”为目标,不直接对真实仓库执行自动修改。由于资料没有给出 Issue 参数和模型参数的正式命令语法,示例不会虚构一次完整修复命令。
第一步:安装
git clone https://github.com/SWE-agent/SWE-agent.git
cd SWE-agent
python --version
python -m venv .venv
source .venv/bin/activate
python -m pip install .执行前应确认 python --version 返回 3.11 或更高版本。source .venv/bin/activate 是 POSIX Shell 写法;其他平台的虚拟环境激活命令未在仓库资料中提供,应使用对应 Python 环境的标准操作。
第二步:运行命令入口
sweagent --help该命令用于调用由 project.scripts 声明的入口,并在本地检查实际支持的参数。若当前版本没有提供 --help 行为,官方仓库未在给定资料中说明替代参数,应以所安装版本的最新 README 和文档为准。
第三步:验证安装结果
python -c "import sweagent; print(sweagent.__version__)"验证命令检查 sweagent 包是否可导入,并读取打包配置指定的动态版本属性。它只能证明 Python 包和版本属性可用,不能证明语言模型凭据、GitHub 权限、任务执行环境或自动修复链路已经配置完成。
配置说明
现有资料只明确给出了一个运行时环境变量,其余可核查字段来自构建、测试与静态检查配置。表中的“默认值”严格按所给文件记录;未出现的模型密钥、端口和并发参数不作补充。
| 字段名 | 类型 | 默认值 | 作用 |
|---|---|---|---|
GITHUB_TOKEN |
字符串环境变量 | 空值 | 用于 GitHub API 元数据查询、私有仓库克隆和创建 PR。 |
project.requires-python |
版本约束字符串 | >=3.11 |
限定安装该项目所需的 Python 版本。 |
build-system.build-backend |
字符串 | setuptools.build_meta |
指定 Python 包构建后端。 |
tool.pytest.ini_options.testpaths |
字符串数组 | ["tests"] |
指定 pytest 的测试目录。 |
tool.pytest.ini_options.xfail_strict |
布尔值 | true |
将意外通过的预期失败测试按严格模式处理。 |
tool.pytest.ini_options.asyncio_default_fixture_loop_scope |
字符串 | function |
设置异步测试夹具的默认事件循环作用域。 |
tool.ruff.line-length |
整数 | 120 |
设置 Ruff 使用的行长度。 |
tool.ruff.indent-width |
整数 | 4 |
设置静态检查所依据的缩进宽度。 |
tool.ruff.target-version |
字符串 | py310 |
设置 Ruff 的目标 Python 语法版本;项目运行时要求仍以 >=3.11 为准。 |
GitHub 令牌配置
cp .env.example .env
# 编辑 .env 后写入:
GITHUB_TOKEN=<你的-GITHUB-TOKEN><你的-GITHUB-TOKEN> 是占位符,不应原样使用,也不应把真实令牌提交到版本控制。根据 .env.example,公开仓库操作所需范围为 public_repo,私有仓库操作所需范围为 repo;是否能够进一步缩小权限,以实际 GitHub 令牌类型、目标操作和最新官方说明为准。
语言模型的 API 密钥变量名、模型名称字段、配置文件路径和加载优先级未出现在给定资料中。不要把任意供应商变量名直接写入团队模板,应该先依据所安装版本的命令帮助和官方文档核对。
进阶用法
进阶使用重点不在增加未经证实的命令参数,而在区分开发测试、GitHub 集成和挑战任务三条工作流。现有资料可确认测试标记与开发依赖,但不能确认完整任务配置格式。
运行测试与筛选慢测试
开发依赖包含 pytest、pytest-cov 和 pytest-xdist,测试目录为 tests。配置定义了 slow 和 ctf 两个标记,其中注释明确给出了排除慢测试的表达式。
python -m pip install ".[dev]"
pytest -m "not slow"第一条命令安装 pyproject.toml 中声明的开发依赖,第二条命令跳过标记为 slow 的测试。CTF 测试需要哪些外部环境和数据,官方仓库未在给定资料中提供该信息,不应直接在连接生产网络的机器上试运行。
本地构建文档
docs/README.md 说明 docs 目录保存 SWE-agent 文档源文件,并指向贡献文档介绍本地构建方式。开发依赖包含 mike、mkdocs-material、mkdocs-glightbox、mkdocs-include-markdown-plugin 和 mkdocstrings[python]>=0.18,但给定资料没有提供完整构建命令。
私有仓库集成
处理私有仓库时,需要配置具备 repo 范围的 GitHub 令牌。任务开始前应确认智能体会读取哪些分支、是否能够推送分支以及是否创建 PR;这些流程细节在当前资料中缺失,不能将令牌权限等同于必然执行全部操作。
可观测性与运维
给定依赖显示项目具备构建终端输出和交互界面的基础组件,但没有给出日志格式、指标端点、追踪协议或告警规则。生产运维方案必须把“依赖存在”与“功能已经启用”区分开。
- 终端输出:
rich、rich-argparse和textual>=1.0.0可用于命令行展示,但输出字段和持久化方式未提供。 - Web 通信基础:依赖中存在 Flask、Flask-CORS 和 Flask-SocketIO,但监听端口、绑定地址、认证方式及跨域策略未在资料中说明。
- 重试基础:项目依赖
tenacity,但哪些操作会重试、最大次数和退避参数无法从资料确认。 - 测试信号:
xfail_strict=true能使意外通过的预期失败测试受到严格处理,有助于减少测试状态被忽略的情况。
根据本文作者的经验判断,实际部署前至少应记录任务标识、目标仓库与提交、模型调用状态、执行命令退出码和最终文件变更,同时对密钥与代码内容做脱敏。不过这些字段不是仓库资料声明的内置日志能力,是否可以直接配置应以当前版本文档为准。
健康检查地址、指标采集协议、日志轮转、任务超时、并发队列和故障恢复机制均没有出现在给定资料中。存在明确 SLA、审计留存或多租户隔离要求的团队,需要在采用前完成源码审查和验证,不应假定项目已经提供这些运维保障。
安全与合规边界
SWE-agent 能够接触代码仓库、调用模型并执行软件工程任务,仓库描述还明确涉及进攻性网络安全用途。所有安全测试仅限自有资产、书面授权目标、合法 CTF 或专门实验环境,不得将其用于未授权扫描、入侵、持久化或数据获取。
权限最小化
GitHub 令牌应只授予任务所需的仓库和操作范围,并使用单独的测试身份验证流程。.env.example 给出的 public_repo 与 repo 是所需权限提示,不代表每个场景都必须授予覆盖全部仓库的长期令牌。
执行隔离
智能体生成的命令和代码不应直接在保存生产密钥、个人数据或内部凭据的主机上执行。资料没有承诺沙箱强度、网络隔离、文件系统边界或资源限制,因此安全评估不能只依据 swe-rex 依赖名称得出隔离结论。
隐私与模型数据流
GitHub Issue、私有源代码、测试数据和命令输出都可能包含敏感信息。所选模型服务是否保存请求、用于训练或传输至其他区域,官方仓库在给定资料中未提供该信息,应由使用者结合模型服务条款、组织政策和适用法规单独审核。
授权安全研究
CTF 标记只能证明项目测试体系中存在对应类别,不能视为对任意外部目标的测试许可。应限定目标地址、凭据、时间窗口、数据处理方式和结果披露对象,并在隔离网络内保留审计记录。
许可证与商用条款
项目采用 MIT License,允许使用、复制、修改、合并、发布、分发、再许可和销售软件副本,因此从该许可证文本看可以用于商业项目。授权条件是所有软件副本或软件的重要部分必须包含原版权声明和许可声明。
许可证明确按“原样”提供软件,不附带明示或默示保证,包括适销性、特定用途适用性和不侵权保证。作者或版权持有人不对因软件或其使用、交易产生的索赔、损害及其他责任负责。
MIT License 只处理仓库自身代码的版权许可,不自动覆盖模型服务条款、GitHub 平台规则、输入数据版权、第三方依赖许可或自动生成代码的权利状态。商业使用者仍需审核依赖、模型供应商和目标仓库的授权条件;法律结论以仓库 LICENSE 原文及专业意见为准。
局限性与已知限制
当前资料足以确认项目入口、依赖和基础定位,但不足以证明完整修复流程的确定性、安全性或可运维性。以下限制来自资料缺口或项目描述中的明确措辞,而不是对未公开实现的猜测。
- 项目只声明“尝试”修复 GitHub Issue,没有承诺修复成功率、测试通过率或补丁可合并性。
- 没有提供可核查的 Benchmark 数值、硬件需求、任务延迟、吞吐量、并发上限或成本数据。
- 语言模型供应商、受支持模型版本、上下文限制和密钥字段没有出现在给定资料中。
- 没有提供完整的 Issue 运行命令、配置文件模式、任务输出结构和退出码定义。
- 没有说明执行环境的沙箱级别、默认网络权限、资源配额或恶意代码防护边界。
- Web 相关依赖存在,但服务启动命令、默认端口、认证机制和跨域默认值未提供。
- 除部分依赖外,多数依赖未锁定精确版本,因此仅凭
pyproject.toml不能得到完全可重现的依赖集合。 - GitHub 元信息快照未附统计日期,Star 和 Fork 数值只能表示题目提供时的状态。
上述缺口并不等同于仓库当前版本一定没有对应实现,而是给定资料无法支持更强结论。需要这些能力时,应检查默认分支的最新 README、官方文档、命令帮助和实际源码。
适合谁
是否采用该项目,应根据任务输入、Python 环境、权限边界和验证能力判断。以下信号都可以在试点前通过仓库、权限和流程清单核验。
- 团队的待处理任务以 GitHub Issue 为入口,并能提供独立测试仓库验证自动生成的改动。
- 现有运行环境能够使用 Python 3.11 或 Python 3.12,并接受以 Python 包和命令行入口集成。
- 团队已经选定语言模型服务,能够自行管理模型凭据、费用、数据传输和供应商合规要求。
- 团队可以配置最小权限 GitHub 令牌,并在合并前执行代码审查、测试和安全检查。
- 研究人员在自有环境、书面授权项目或 CTF 中评估软件工程智能体,并能隔离不受信任的执行结果。
不适合谁
当组织需要确定性保证、直接处理高敏感生产环境或无法审核模型输出时,不应仅依赖 SWE-agent 完成变更。以下条件任一成立,都应先补充隔离、审计或人工审批能力。
- 业务要求固定修复成功率、响应时限或厂商 SLA,而现有资料没有这些承诺。
- 目标环境禁止源代码或 Issue 内容发送到外部模型服务,且团队尚未确认实际数据流向。
- 组织无法提供隔离执行环境,却计划让智能体直接操作生产凭据、生产数据库或关键基础设施。
- 流程要求完整的多租户隔离、审计日志、指标端点和灾难恢复证明,而团队不能自行实现和验证这些能力。
- 使用目标是扫描或攻击未授权系统,或者试图绕过访问控制、监测与取证机制。
常见问题与排查(FAQ / Troubleshooting)
排查应从 Python 版本、包安装、命令入口和权限四个层次展开。模型请求和任务执行相关错误缺少统一错误码资料,应结合当前版本输出与官方文档定位。
安装时提示 Python 版本不满足要求
检查 python --version,项目要求 >=3.11。分类器明确列出 Python 3.11 和 3.12,低于 3.11 的环境不符合打包要求。
安装后找不到 sweagent 命令
先确认虚拟环境已经激活,并检查安装命令是否在同一个 Python 环境中执行。可以运行前述 python -c "import sweagent; print(sweagent.__version__)";若导入成功但命令仍不可见,应检查该环境的脚本目录是否位于当前 PATH。
GitHub API 操作被拒绝
确认 GITHUB_TOKEN 已设置、尚未失效,并具有目标仓库所需权限。资料给出的权限是公开仓库使用 public_repo、私有仓库使用 repo,但组织策略、仓库授权和令牌类型仍会影响实际访问结果。
应该配置哪个模型 API 密钥
给定资料没有列出模型供应商的环境变量名,也没有给出受支持模型清单。应查看所安装版本的 sweagent --help 和官方文档,不能用 GITHUB_TOKEN 替代模型凭据。
如何启动 Web 界面,默认端口是什么
依赖列表包含 Flask、Flask-CORS 和 Flask-SocketIO,但给定资料没有提供启动命令、路由或默认端口。官方仓库未提供该信息,建议以最新 README 为准,不应根据 Flask 的独立默认行为推断 SWE-agent 的服务配置。
为什么某些测试没有运行
检查是否使用了 -m "not slow",该表达式会排除带有 slow 标记的测试。CTF 测试使用独立的 ctf 标记,其外部依赖和运行条件未在给定资料中说明。
能否保证自动生成的补丁安全
不能从现有资料得出该保证。所有改动都应经过差异审查、自动测试和安全检查,再由具备仓库权限的人员决定是否合并;许可证也明确声明软件按“原样”提供且不附带保证。
如何确认当前安装版本
项目版本从 sweagent.__version__ 动态读取,可以使用快速开始中的 Python 命令查看。给定资料没有提供固定版本号,因此不能用本文内容替代实际环境中的版本检查。
采用前检查清单
一次受控试点应先验证安装、权限、数据边界和回滚路径,再评估修复质量。该清单不假设项目已经提供缺失的运维能力。
- 确认 Python 版本不低于 3.11,并在独立虚拟环境中安装。
- 通过
sweagent --help核对当前版本的真实参数,不复制未经验证的旧命令。 - 仅使用测试仓库和最小权限 GitHub 令牌,验证读取、分支与 PR 权限边界。
- 确认模型服务会接收哪些代码和日志,并完成隐私、版权及数据驻留审查。
- 将生成的命令放入隔离环境,限制网络、文件、凭据和计算资源访问。
- 为每次任务保留 Issue、目标提交、差异、测试结果和人工审批记录。
- 在扩大使用范围前评估错误补丁、依赖变更、秘密泄露和不可回滚操作。
项目地址与资源
以下链接均来自仓库元信息或所给文档,可用于核对最新安装方式、配置和开发说明。涉及命令参数、模型接入与版本差异时,应优先查阅与当前安装版本对应的官方文档。



