Open SWE:开源的异步编码代理框架

在当今的软件开发环境中,企业越来越需要智能的工具来提高工程师的工作效率。Open SWE正是为此而生,它是一个用于构建组织内部编码代理的开源框架,让企业能够在Slackbot、命令行界面(CLI)和Web应用中,与工程师的日常工作完美结合。

Open SWE的设计灵感来源于Stripe、Ramp和Coinbase等领先的工程机构,它们构建了自己的内部编码代理,能够以最小的人类监督,在适当的上下文、权限和安全边界下与系统进行交互。使用Open SWE,您可以获得与这些公司内部架构相同的解决方案,包括云沙盒、Slack和Linear的调用、子代理编排,以及自动化的PR创建,所有这一切都可以根据您自己的代码库和工作流进行定制。

架构设计

Open SWE采用最佳实践的核心架构决策,以下是它与Stripe的Minions、Ramp的Inspect和Coinbase的Cloudbot的映射:

1. 代理架构 — 基于Deep Agents构建

Open SWE在Deep Agents框架之上进行组合,而不是从头开始构建。这为您提供了一个升级路径(可以引入上游改进),同时让您能够定制自己组织的编排、工具和中间件。

create_deep_agent(
    model="anthropic:claude-opus-4-6",
    system_prompt=construct_system_prompt(repo_dir, ...),
    tools=[http_request, fetch_url, commit_and_open_pr, linear_comment, slack_thread_reply],
    backend=sandbox_backend,
    middleware=[ToolErrorMiddleware(), check_message_queue_before_model, ...],
)
2. 沙盒 — 隔离的云环境

每个任务都在一个隔离的云沙盒中运行,这意味着它们不会影响其他任务,确保了全权限的情况下最大限度地防止错误带来的风险。Open SWE支持多种沙盒提供者,包括ModalDaytonaRunloopLangSmith,同时您也可以插件自定义的沙盒。每个线程都有一个持久的沙盒,所有的任务均在自己的沙盒中并行运行,无需排队。

3. 工具 — 精心策划而非数量堆积

Open SWE遵循“工具策划比数量重要”的理念,提供了一小套专注的工具:

工具 目的
execute 在沙盒中执行Shell命令
fetch_url 以Markdown格式获取网页内容
http_request 进行API调用(GET, POST等)
commit_and_open_pr Git提交并打开GitHub草稿PR
linear_comment 在Linear的ticket上更新回复
slack_thread_reply 在Slack线程中回复

这些工具旨在为您提供开发者日常工作所需的核心功能,同时内置的Deep Agents工具(如read_filewrite_file等)使得操作更加灵活。

4. 上下文工程 — AGENTS.md和源上下文

Open SWE通过两个来源收集上下文信息:

  • AGENTS.md:如果代码库的根目录中包含AGENTS.md文件,代理将读取并在沙盒中注入这些信息,帮助代理在执行时遵循相应的编码规范、测试要求和架构决策。
  • 源上下文:将完整的Linear问题(标题、描述、评论)或Slack线程历史过去给代理,从而确保代理在进行工具调用之前拥有丰富的上下文信息。
5. 编排 — 子代理和中间件

Open SWE的编排分为两层:

子代理:Deep Agents框架支持通过task工具派生子代理。主代理可以同时向多个独立的子代理发出任务,每个子代理都有自己的中间件栈、待办事项和文件操作。

中间件:中间件挂钩在代理运行过程中执行:

  • check_message_queue_before_model:在模型调用之前注入新的消息(如Linear评论或Slack消息),确保代理在执行任务时,能够及时接收到新的输入。
  • open_pr_if_needed:如果代理没有自己打开PR,该中间件将作为安全网进行补充操作,确保关键步骤的执行不会因为模型无法预期的行为而被跳过。
  • ToolErrorMiddleware:优雅地处理工具错误。
6. 调用方式 — Slack、Linear和GitHub

Open SWE支持通过SlackLinearGitHub进行调用:

  • Slack:在任何线程中提及代理,支持repo:owner/name语法来指定工作仓库。代理会在对应的线程内回复状态更新和PR链接。
  • Linear:在任何问题上评论@openswe,代理会读取完整的问题上下文,并在处理后以评论的形式反馈结果。
  • GitHub:在代理创建的PR评论中标记@openswe,以使其回应审查反馈并将修复推送到同一个分支上。
7. 验证 — 基于提示和安全网

代理被指示在进行提交之前运行代码检查、格式化和测试,open_pr_if_needed中间件则作为补充,确保无论代理行为如何,都能保证生成PR。

特性总结

  • 从Linear、Slack或GitHub触发 — 在评论中提及@openswe以开始任务
  • 即时确认 — 一旦接收到您的消息,代理会迅速以👀表情作出确认
  • 在执行时与其交流 — 发送后续消息,代理将在执行下一步之前接收这些信息
  • 并行运行多个任务 — 每个任务将在自己的隔离云沙盒中运行
  • 内置GitHub OAuth — 自动与您的GitHub账户进行身份验证
  • 自动打开PR — 完成后自动提交更改并打开草稿PR,并与相应的ticket链接
  • 支持子代理 — 代理可以为并行子任务派生子代理

开始使用

  • 安装指南 — 包含GitHub应用创建、LangSmith、Linear/Slack/GitHub触发器和生产部署指南。
  • 定制指南 — 交换沙盒、工具、触发器和中间件等,以适应您组织的需求。

同类项目对比

项目 功能 特点
Open SWE 内部编码代理 基于Deep Agents构建,支持自定义沙盒、工具,提供安全性和上下文管理
Stripe Minions 内部编码代理 基于Goose构建,使用AWS EC2开发箱,功能强大但不如Open SWE灵活
Ramp Inspect 内部编码工具 基于OpenCode构建,提供可视化DOM验证,但缺少Open SWE的安全性
Coinbase Cloudbot 内部编码助手 从头构建,功能灵活,但定制复杂度提升

通过Open SWE,企业可以轻松定制其内部编码代理,提升工程师工作效率,提升开发质量和安全性。希望以上信息能够帮助您了解Open SWE,快速构建符合您需求的编码解决方案。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐