LangChain 开源异步编码 Agent,支持本地部署与自定义扩展,为想要自主开发 AI 编码工具的开发者提供参考实现。
在过去两年中,人工智能在软件工程中的应用方式不断演进。它首先是自动补全,接着演变成 IDE 中的副驾驶,最近几个月已经发展为长时间运行、端到端的代理,在云端异步执行。
我们相信所有代理未来都会更像这样运行——长时间运行、异步、更加自主。具体来说,我们认为它们会:
在云端异步运行
直接集成到你的工具链中
对环境有足够的理解,能够在更长的时间范围内恰当地规划任务
在完成任务前审查自己的工作(并修复任何问题)
在过去的几个月里,很显然软件工程是第一个能将这个愿景变为现实的领域。然而,当时没有一个开源项目具备这些特征。
所以我们构建了 Open SWE,第一个开源的、异步的、云端托管的编码代理。它直接连接到你的 GitHub 仓库,允许你从 GitHub issue 或我们的自定义 UI 委派任务。Open SWE 就像你团队中的另一名工程师:它可以研究代码库、创建详细的执行计划、编写代码、运行测试、审查自己的工作是否有错误,并在完成时开启一个 Pull Request。
我们一直在内部使用它来加速我们在 LangGraph 等项目上的开发,也包括 Open SWE 仓库本身——它已经是顶级贡献者之一。
今天,我们很高兴将其与社区分享。
你可以在几分钟内开始使用 Open SWE 的托管版本。你只需要一个 Anthropic API key。
连接你的 GitHub 账户并选择你想让 Open SWE 访问的仓库。
在设置中提供你的 Anthropic API key。
开启新任务然后观看它运作!
如果你在寻找一个起点,可以查看我们文档中的示例页面。
有很多开源编码项目。为什么还要构建新的一个?我们想要推动关注和重点放在 prompt 和工具之外的方面。具体来说,我们想要突出整体流程和 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,准备好供你审查。它融入你现有的流程,就像一个人类队友。
除了这两个核心支柱,我们还关注了两个其他组件。这些组件关注的不是人与 Open SWE 的交互模式,而是 Open SWE 如何运作和做工作。
在隔离沙箱中运行: 每个任务都在安全、隔离的 Daytona 沙箱中运行。由于每个 Open SWE 会话都被赋予自己的沙箱,你不需要担心恶意命令,可以让 Open SWE 执行它想要的任何 shell 命令。这意味着我们可以更快地推进,而无需对它想要运行的每个命令都要求人工批准。
在云端异步运行: 云原生架构意味着 Open SWE 可以并行处理多个任务,而不会消耗你的本地资源。你可以在早上给它分配一个任务列表,下午回来时会有一组 PR。
在提交前进行规划和审查: 许多代理直接跳到编码,通常导致破坏 CI 管道的错误。Open SWE 使用具有专用 Planner 和 Reviewer 组件的多代理架构。Planner 研究代码库以首先形成稳健的战略。代码编写后,Reviewer 检查常见错误、运行测试和格式化程序,并在打开 PR 前反思这些更改。我们发现这在编写可行代码方面更有效,需要的审查周期更少。
Open SWE 非常适合复杂、长时间运行的任务。但对于小的单行 bug 修复或简单的风格更新,这个架构不是最优的。对于这样的任务,你希望代理能够跳过规划和审查阶段,直接进入执行。我们目前正在实现一个版本的 Open SWE 来做到这一点。它通过 CLI 本地运行,更加代理化,允许它选择是否需要规划或审查其代码。完成后,Open SWE 将成为所有工程任务的真正一站式解决方案,从简单的单行风格修复一直到从头完整的产品实现。
Open SWE 使用三个专用的 LangGraph 代理按顺序工作:Manager、Planner 和 Programmer(包含一个子代理 Reviewer)。
Manager: 这个图是入口点。它处理用户交互并路由任务。当你创建一个任务时,它初始化状态并将控制权传递给 Planner。
Planner: 在编写单行代码之前,Planner 分析请求、通过查看文件和运行搜索来研究代码库,并创建一个详细的、逐步的执行计划。默认情况下,这需要一个手动审查步骤,你可以在其中编辑、批准或对提议的计划提供反馈。但是,如果你感到大胆,你也可以跳过这一步。
Programmer 和 Reviewer: 计划被批准后,Programmer 在沙箱中执行每一步。这包括编写代码、运行测试和在网上搜索文档。当 Programmer 完成其任务时,它将控制权移交给 Reviewer,后者分析生成的代码的质量、正确性和完整性。如果发现问题,它会将任务发回给 Programmer,并提供反馈以供进一步迭代。这个行动-审查循环持续进行,直到代码完美。
一旦 Reviewer 批准了工作,Open SWE 生成最终结论、打开一个 Pull Request,并将任务标记为完成。
Open SWE 构建在 LangGraph 之上,这允许我们对工作流中的每一步有更多的控制。Open SWE 通过四个代理运作,每个都有自己的状态和独特的输入/输出。通过使用 LangGraph,我们能够轻松地编排调用所有代理、管理它们在任何时间点的状态,并处理边界错误情况。除了 LangGraph 框架之外,Open SWE 部署在 LangGraph Platform(LGP)上。LGP 是为长时间运行的代理专门构建的(这些代理有时可以运行一小时之久),配备内置持久化(支持我们的人在回路功能)和自动扩展(这样我们可以启动数百个代理运行,如果必要的话)。
Open SWE 是一个复杂的多代理系统。让这个系统有用的主要挑战是确保它产生的结果足够准确。最大的挑战是上下文工程。它对如何使用工具有正确的指令吗?它是否在获取正确的上下文?如果我们改变了这些指令,性能会如何改变?为了首先调试上下文工程,然后稍后评估上下文工程的变化,我们使用了 LangSmith——领先的 AI 可观测性和评估平台。
我们构建 Open SWE 是为了成为一个强大的开箱即用的工具,但我们对它作为社区基础的潜力感到最兴奋。整个项目是开源的,构建在 LangGraph 上,并设计为可扩展的。
你可以 fork 仓库、自定义 prompt、为你的内部 API 添加新工具,或修改代理的核心逻辑以满足你团队的特定需求。我们的开发者文档提供了设置和部署自己版本的详细指南。
我们相信软件开发的未来将是人与代理之间的协作。Open SWE 是我们在公开构建这个未来中迈出的第一大步。
了解你的代理在做什么
LangSmith,我们的代理工程平台,帮助开发者调试每个代理决策、评估变化,并一键部署。