Introducing Open SWE: An Open-Source Asynchronous Coding Agent

隆重推出 Open SWE:一个开源的异步编码代理

7 分钟阅读

过去两年,人工智能在软件工程领域的应用不断发展。它起初是自动补全,然后发展成为 IDE 中的副驾驶,而在过去的几个月里,它已经演变成了一个长时间运行、更端到端的代理,在云端异步运行。

我们相信,未来所有的代理都将更像这样——长时间运行、异步、更自主。具体来说,我们认为它们将

  • 在云端异步运行
  • 直接与您的工具集成
  • 拥有足够的关于您环境的上下文,以便在更长的时间范围内正确地规划任务
  • 在完成任务前审查自己的工作(并修复任何问题)

在过去的几个月里,很明显,软件工程将是这一愿景成为现实的第一个领域。然而,还没有一个开源项目能够体现这些特性。

因此,我们构建了 Open SWE,这是第一个开源、异步、云托管的编码代理。它可以直接连接到您的 GitHub 存储库,让您能够从 GitHub issue 或我们的 自定义 UI 委托任务。Open SWE 的运作方式就像您团队中的另一名工程师:它可以研究代码库、制定详细的执行计划、编写代码、运行测试、审查自己的工作是否存在错误,并在完成后提交一个拉取请求。

Open SWE 对 LangGraph 存储库的贡献

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

Open SWE 对其自身存储库的贡献

今天,我们很高兴与社区分享它。

如何使用

您可以在几分钟内开始使用 Open SWE 的托管版本。您只需要一个 Anthropic API 密钥。

  1. 访问 swe.langchain.com
  2. 连接您的 GitHub 帐户,并选择 Open SWE 要访问的存储库。
  3. 在 设置 中提供您的 Anthropic API 密钥。
  4. 开始一个新任务,然后看着它去吧!
Open SWE 主页

如果您想从头开始,可以查看我们文档中的 示例页面

为什么选择 Open SWE?

有很多开源编码项目。为什么还要创建一个新的?我们希望将注意力集中在提示词和工具使用之外的方面。具体来说,我们希望强调将这些代理带到我们可以可靠地与之交互的程度所需的整体流程和用户体验。

我们认为 UI/UX 常常是构建代理过程中被探索最少的领域之一。您的应用程序的整体交互模式在很大程度上决定了它的使用情况。随着异步代理成为一个如此新的想法,我们认为这里有许多有趣的模式可以探索。两个主要方面是更强的控制力深度集成

控制:Open SWE 具有两项主要功能,可在代理运行时为您提供更强的控制力。您可以在代理运行时中断它,以便审查工作或将其拉回正轨,而无需重新启动。

  1. 人类参与:当 Open SWE 生成计划时,它会中断并让您有机会接受、编辑、删除或请求对计划的更改。它遗漏了什么?只需告诉它继续深入研究,它将重新启动您任务的规划过程。
  2. 双重通信:大多数编码代理不支持在运行时接受新请求或反馈。Open SWE 不受此限制。如果您改变了对产品规格的想法,想添加新功能,或发现它偏离了轨道,只需发送一条消息,它就会将其平滑地集成到其活动会话中。

深度集成:Open SWE 直接与您的 GitHub 帐户和存储库集成,因此您可以像分配给其他开发人员一样为其分配工作,并为其提供代码的上下文。开发人员已经习惯于使用 GitHub,那么为什么要让他们学习一个新产品呢?使用 Open SWE,每个新任务都会获得一个跟踪 issue。该 issue 在整个会话过程中会更新状态更新、执行计划等信息。当它完成一个任务时,会自动打开一个拉取请求并链接回跟踪 issue。

您也可以直接从 GitHub 触发运行

  • 只需向 GitHub issue 添加一个标签(例如,open-swe-auto),Open SWE 就会开始工作。完成后,它会打开一个拉取请求,供您审查。它就像一个人类队友一样融入您现有的流程。

除了这两个核心支柱,我们还关注了另外两个组件。这些组件不太关注人类与 OpenSWE 的交互模式,而是更关注 OpenSWE 如何运行及其工作方式。

  • 在隔离沙箱中运行 每个任务都在一个安全的、隔离的 Daytona 沙箱中运行。由于每个 Open SWE 会话都有自己的沙箱,因此您无需担心恶意命令,可以允许 Open SWE 执行它想要的任何 shell 命令。这意味着我们可以更快地进行,而无需为它想要运行的每个命令获得人工批准。
  • 在云端异步运行:云原生架构意味着 Open SWE 可以并行处理多个任务,而不会消耗您的本地资源。您可以在早上为其分配一系列任务,并在下午回来查看一系列 PR。
  • 在提交前进行规划和审查: 许多代理直接跳到代码,经常导致错误,破坏您的 CI 流水线。Open SWE 使用多代理架构,带有专门的规划器审查器组件。规划器首先研究代码库以形成一个稳健的策略。代码编写完成后,审查器会在打开 PR 之前检查常见错误、运行测试和格式化程序,并对更改进行反思。我们发现,这种方法在编写可工作代码方面更有效,审查周期更少。

考虑因素:Open SWE 非常适合复杂、耗时长的任务。但对于小的单行 bug 修复或简单的样式更新,这种架构并不理想。对于这类任务,您希望代理能够跳过规划和审查阶段,直接进入执行。我们目前正在开发一个版本的 Open SWE,它正是这样做的。它通过 CLI 在本地运行,并且更具代理性,允许它选择是否需要规划或审查其代码。完成后,Open SWE 将成为所有工程任务的一站式解决方案,涵盖从简单的单行样式修复到从头开始的完整产品实现。

工作原理:代理架构

Open SWE 通过三个专门的 LangGraph 代理按顺序工作:管理器、规划器和程序员(包含一个子代理审查器)。

  1. 管理器: 此图是入口点。它处理用户交互并路由任务。当您创建任务时,它会初始化状态并将控制权传递给规划器。
  2. 规划器: 在编写第一行代码之前,规划器会分析请求,通过查看文件和运行搜索来研究代码库,并创建一个详细的分步执行计划。默认情况下,这需要手动审查步骤,您可以在其中编辑、批准或对提议的计划提供反馈。但是,如果您胆子大,可以跳过此步骤。
  3. 程序员和审查器: 计划获得批准后,程序员将在沙箱中执行每个步骤。这包括编写代码、运行测试和搜索 Web 获取文档。当程序员完成其任务后,它会将控制权交给审查器,审查器会分析生成的代码的质量、正确性和完整性。如果发现问题,它会将任务连同反馈发回给程序员进行另一次迭代。此操作-审查循环会持续进行,直到代码完美为止。

当审查器批准工作后,Open SWE 会生成最终结论,打开一个拉取请求,并将任务标记为完成。

我们使用的技术:LangGraph 和 LangGraph 平台

Open SWE 构建在 LangGraph 之上,它使我们能够更好地控制工作流中的每个步骤。Open SWE 通过四个代理运行,每个代理都有自己的状态和独特的输入/输出。通过使用 LangGraph,我们可以轻松地编排对所有代理的调用,随时管理它们的状态,并处理边缘错误情况。除了 LangGraph 框架之外,Open SWE 还部署在 LangGraph 平台 (LGP) 上。LGP 专为长时间运行的代理(这些代理有时可能运行长达一个小时)而设计,具有内置持久性(支持我们的人工参与功能)和自动扩展(因此我们可以根据需要启动数百次代理运行)。

使用 LangSmith 精炼

Open SWE 是一个复杂的多代理系统。使该系统有用的主要挑战是确保它产生的结果足够准确。最大的挑战在于上下文工程。它是否具有正确的工具使用说明?它是否获取了正确的上下文?如果我们更改了这些说明,性能会如何变化?为了首先调试上下文工程,然后评估上下文工程的更改,我们使用了 LangSmith——领先的 AI 可观测性和评估平台。

开源且可扩展

我们构建 Open SWE 是为了成为一个强大的开箱即用工具,但我们最兴奋的是它作为社区基础的潜力。整个项目是开源的,基于 LangGraph 构建,并且设计成可扩展的。

您可以 fork 该存储库,自定义提示词,为您的内部 API 添加新工具,或修改代理的核心逻辑以适应您团队的特定需求。我们的 开发人员文档 提供了有关设置和部署您自己版本的详细指南。

我们相信软件开发的未来将是人类与代理的协作。Open SWE 是我们在开放环境中构建这一未来的第一大步。

© . This site is unofficial and not affiliated with LangChain, Inc.