介绍 Open SWE:一个开源的异步编码代理
本文信息来源:langchain

在过去两年中,人工智能在软件工程中的应用不断发展。它最初是自动补全功能,然后发展为集成开发环境(IDE)中的副驾驶,而在过去几个月中,又演变为一种在云端异步运行的、持续时间更长、更端到端的智能代理。
我们相信,未来所有的智能代理都会更像这样——长时间运行、异步执行、更具自主性。具体来说,我们认为它们将会:
- 在云端异步运行
- 直接与您的工具集成
- 对环境有足够的上下文理解,以便在更长的时间范围内合理规划任务
- 在完成任务之前审查自己的工作(并修复任何问题)
在过去的几个月里,我们发现软件工程是第一个能够将这一愿景变为现实的领域。然而,当时并没有一个开源项目能够体现这些特性。
因此我们构建了 Open SWE,这是第一个开源的、异步的、云端托管的编码代理。它可以直接连接到你的 GitHub 仓库,让你能够从 GitHub issues 或我们的 自定义界面中委派任务。Open SWE 的运作方式就像你团队中的另一位工程师:它可以研究代码库、创建详细的执行计划、编写代码、运行测试、审查自己的工作以查找错误,并在完成后发起 pull request。

我们一直在内部使用它来加速我们在 LangGraph 等项目上的开发,以及在 Open SWE 仓库本身的开发中,它已经是主要贡献者之一。

今天,我们很高兴与社区分享它。
如何使用
你可以在几分钟内开始使用托管版本的 Open SWE。你只需要一个 Anthropic API 密钥。
- 访问 swe.langchain.com。
- 连接你的 GitHub 账户,并选择你希望 Open SWE 访问的代码库。
- 在设置中提供你的 Anthropic API 密钥。
- 开始一个新任务并观看它的运行!

如果你在寻找一个开始的地方,可以查看我们文档中的示例页面 。
为什么选择 Open SWE?
市面上已经有许多开源的编码项目,为什么还要再做一个新的?我们希望将关注点和重点放在除了提示词和所用工具之外的其他方面。具体来说,我们想要强调更多整体流程和用户体验(UX),以便让这些智能体能够以一种可靠的方式与我们进行交互。
我们认为,在智能体构建中,UI/UX 往往是探索较少的领域之一。应用程序的整体交互模式会极大地影响其使用情况。由于异步智能体是一个非常新的概念,我们认为这里有许多有趣的模式值得探索。两个主要的关注点是更多的控制和深度集成 。
控制:Open SWE 有两个主要功能,可以让你在运行过程中对编码代理有更多的控制。你可以在需要审查工作或将其引导回正轨时中断代理,而无需重新启动。
- 人工参与: 当 Open SWE 生成计划时,它会暂停并让你有机会接受、编辑、删除或请求更改该计划。它遗漏了什么?只需告诉它继续深入,它就会为你的任务重新启动规划过程。
- 重复发送消息: 大多数编码代理在运行时不支持接受新的请求或反馈。Open SWE 不受这一限制。如果你改变了对产品规格的想法、想添加新功能,或者发现它偏离了预期,只需给它发送一条消息,它就会将这些内容顺畅地整合到当前的会话中。
深度集成:Open SWE 可直接与您的 GitHub 账户和代码库集成,因此您可以像分配给其他开发者一样分配任务给它,并为其提供代码上下文。开发者本就工作在 GitHub 中,为什么还要让他们学习一款新产品呢?使用 Open SWE,每个新任务都会生成一个跟踪 issue。在整个会话过程中,该 issue 会不断更新状态、执行计划等信息。当任务完成时,会自动创建一个 pull request,并与该跟踪 issue 关联。
你也可以直接从 GitHub 触发运行:
- 只需在 GitHub issue 中添加一个标签(例如
open-swe-auto),Open SWE 就会开始工作。完成后,它会打开一个 pull request,等待你审核。它能够无缝融入你现有的流程,就像一位人类队友一样。
除了这两个核心支柱外,我们还专注于另外两个组件。它们与人类和 OpenSWE 的交互模式关系不大,而是更关注 OpenSWE 如何运行以及如何完成工作。
- 在隔离的沙箱中运行 每个任务都在安全、隔离的 Daytona 沙箱中运行。由于每个 Open SWE 会话都有自己独立的沙箱,你无需担心恶意命令,可以让 Open SWE 执行它想要的任何 shell 命令。这意味着我们可以更快地推进,而不必对它想要运行的每个命令都进行人工审批。
- 在云端异步运行: 云原生架构意味着 Open SWE 可以并行处理多个任务,而不会占用你的本地资源。你可以在早上分配一系列任务,下午回来时就能看到一组 PR。
- 提交前的计划与审查: 许多代理会直接开始编写代码,这往往会导致错误,从而破坏你的 CI 流水线。Open SWE 采用多代理架构,配备专门的 Planner 和 Reviewer 组件。Planner 会先研究代码库,制定稳健的策略。代码编写完成后,Reviewer 会检查常见错误、运行测试和格式化工具,并在打开 PR 之前对更改进行反思。我们发现,这种方式在编写可用代码时更高效,且需要的审查周期更少。
注意事项:Open SWE 非常适合处理复杂、运行时间较长的任务。但对于一些简单的一行代码修复或样式更新,这种架构并不理想。对于这类任务,你会希望代理能够跳过规划和审查阶段,直接进入执行。我们目前正在开发一个能够实现这一点的 Open SWE 版本。它通过 CLI 在本地运行,更具自主性,可以自行决定是否需要规划或审查代码。完成后,Open SWE 将真正成为涵盖所有工程任务的一站式工具,从简单的一行样式修复,到从零开始实现完整产品都能胜任。
工作原理:代理架构
Open SWE 通过三个按顺序运行的专用 LangGraph 代理进行操作:Manager、Planner 和 Programmer(其中包含一个子代理 Reviewer)。

- 经理: 这个图是入口点。它处理用户交互并分配任务。当你创建一个任务时,它会初始化状态并将控制权交给规划器。
- 规划者: 在编写第一行代码之前,规划者会分析请求,通过查看文件和运行搜索来研究代码库,并创建一个详细的、逐步的执行计划。默认情况下,这需要一个人工审核步骤,在此过程中你可以编辑、批准或对提议的计划提供反馈。不过,如果你足够大胆,也可以跳过这一步。
- 程序员与审查者: 一旦计划获批,程序员会在沙盒中执行每个步骤。这包括编写代码、运行测试以及在网上搜索文档。当程序员完成任务后,会将其交给审查者,审查者会分析生成的代码的质量、正确性和完整性。如果发现问题,它会将任务连同反馈发回给程序员进行下一轮迭代。这个执行—审查循环会持续进行,直到代码完美为止。
一旦审阅者批准了工作,Open SWE 会生成最终结论,打开一个 pull request,并将任务标记为完成。
我们使用的技术:LangGraph 和 LangGraph Platform
Open SWE 构建在 LangGraph 之上,这使我们能够对工作流程中的每一步有更多的控制。Open SWE 通过四个代理运行,每个代理都有自己的状态和独特的输入/输出。通过使用 LangGraph,我们能够轻松地协调调用所有代理,在任何时间点管理它们的状态,并处理边缘错误情况。除了 LangGraph 框架之外,Open SWE 还部署在 LangGraph Platform(LGP)上。LGP 专为长时间运行的代理而设计(这些代理有时一次运行可长达一小时),内置持久化功能(支持我们的人类参与环节功能),并具备自动扩展能力(因此在必要时我们可以启动数百个代理运行)。
使用 LangSmith 精炼
Open SWE 是一个复杂的多智能体系统。让这个系统真正有用的主要挑战是确保它产生的结果足够准确。其中最大的挑战是上下文工程 。它是否有正确的工具使用说明?它是否获取了正确的上下文?如果我们更改这些说明,性能会发生怎样的变化?为了首先调试上下文工程,然后评估对上下文工程的更改,我们使用了 LangSmith —— 领先的 AI 可观测性与评估平台。
开源与可扩展
我们构建 Open SWE 旨在让它开箱即用且功能强大,但我们最兴奋的是它作为社区基础的潜力。整个项目是开源的,基于 LangGraph 构建,并且设计为可扩展。
你可以 fork 该代码库,自定义提示词,为你的内部 API 添加新工具,或修改代理的核心逻辑以满足你团队的特定需求。我们的开发者文档 提供了详细的指南,帮助你设置并部署自己的版本。
我们相信,软件开发的未来将是人类与代理协作完成的。Open SWE 是我们在开放环境中构建这一未来的第一大步。