从零开始理解 Open SWE:一个会自己写代码的异步编程助手
“如果代码能自己改自己,工程师还能做什么?”
你可以把 Open SWE 想象成一位 24 小时在线的“代码管家”:它先读懂你的仓库,再制定计划、动手改代码,最后把成品打包成 Pull Request。你只需在关键节点点头或摇头,剩下的交给它。
1. Open SWE 到底是什么?
一句话:Open SWE 是一个开源、异步、云原生的编程代理,用 LangGraph 框架写成,能独立完成从规划到提交 Pull Request 的完整工作流。
它自带三个“大脑”:
大脑名称 | 职责 | 类比 |
---|---|---|
Planner(规划者) | 阅读仓库、拆分任务、生成计划表 | 项目经理 |
Programmer(程序员) | 根据计划改代码、跑测试、修 Bug | 资深工程师 |
Manager(经理) | 协调 Planner 和 Programmer,处理人工反馈 | 技术主管 |
图:三个大脑协同流程(对应仓库
langgraph.json
配置)
2. 为什么需要异步?
传统脚本在本地跑,占 CPU、占端口、还怕断电。
Open SWE 把任务放进云沙盒:
-
并行:你可以同时开 10 个任务,互不影响。 -
断点续跑:掉线、关机、浏览器关掉,任务继续。 -
人力节省:真正需要人出面的只有“计划确认”和“最终 Review”。
3. 两种最常用入口
入口 | 适合谁 | 一句话说明 |
---|---|---|
Web UI | 想点点鼠标就搞定 | 打开 https://swe.langchain.com,新建任务、看进度、发消息。 |
GitHub 标签 | 习惯在 Issue 里沟通 | 给 Issue 打 open-swe 标签,系统自动生成计划;加 -auto 让它直接开干。 |
FAQ:
Q: 用 GitHub 标签时,我怎么中途插话?
A: 直接在 Issue 里评论,Manager 大脑会实时读取并调整计划。
4. 安装到本地:15 分钟跑起来
以下步骤全部来自仓库根目录文档,不增删任何命令。
4.1 准备环境
-
Node.js ≥ 18 -
Yarn 3.5.1(已配置在 .yarnrc.yml
,不要换成 npm)
4.2 克隆与安装
git clone <repo-url>
cd open-swe
yarn install # 一次性装好所有 workspace 依赖
4.3 构建顺序
Turbo 会自动按依赖顺序跑:
yarn build # shared → open-swe → web
技巧:
以后每次改完代码,只要yarn build
,Turbo 会增量编译,省去重复劳动。
5. 项目结构 3 分钟速览
仓库是一个 Yarn workspace + Turbo 的 monorepo:
open-swe/
├─ apps/open-swe # LangGraph 代理核心
│ ├─ src/graphs # planner / programmer / manager
│ └─ langgraph.json # 图配置
├─ apps/web # Next.js 15 前端
│ └─ src/components # 基于 Shadcn UI
├─ packages/shared # 公共工具
│ ├─ crypto.ts
│ └─ open-swe/types.ts
└─ turbo.json # 任务编排
小贴士:
想写共享函数?先去packages/shared/src
搜一下,别重复造轮子。
6. 开发守则速查表
规则 | 一句话记忆法 |
---|---|
只用 Yarn | npm i 会直接报错 |
根目录跑命令 | yarn lint 、yarn format 都在根目录 |
禁止 console.log |
用 createLogger('模块名') 替代 |
先 build shared | yarn build 会自动处理 |
提交前自检 | yarn lint:fix && yarn format |
7. 测试:让代码自己证明自己
7.1 三类测试
类型 | 文件名后缀 | 例子 |
---|---|---|
单元测试 | .test.ts |
take-action.test.ts |
集成测试 | .int.test.ts |
sandbox.int.test.ts |
单次 | 任意 | yarn test:single take-action.test.ts |
7.2 常用命令
yarn test # 全仓单元测试
yarn test:int # 仅 open-swe 的端到端测试
注意:
集成测试默认 20 秒超时,跑在云沙盒里,第一次会拉镜像,耐心等。
8. 如何写第一个任务:手把手示例
场景:给 React 项目加一个按钮
-
用 Web UI
-
打开 https://swe.langchain.com -
新建任务 → 填描述:“在首页右上角加一个绿色登录按钮” -
等 Planner 生成计划 → 你点“确认” -
Programmer 开始改代码 → 你可以随时发消息“按钮颜色改成蓝色” -
完成后自动提 PR,附带关闭关联 Issue 的关键字。
-
-
用 GitHub 标签
-
新建 Issue:标题同上 -
打标签 open-swe
-
5 分钟后,Planner 在 Issue 回复计划,你回复 LGTM -
系统自动提 PR。
-
9. 高级用法:标签里的“暗语”
标签 | 含义 | 适用场景 |
---|---|---|
open-swe |
人工确认计划 | 普通任务 |
open-swe-auto |
计划直接通过 | 简单改文案、修拼写 |
open-swe-max |
用 Claude Opus 4.1 做规划 | 复杂架构调整 |
open-swe-max-auto |
最强模型 + 自动执行 | 重构、大版本升级 |
10. 常见问题(FAQ)
Q1:我可以用自己的 LLM API Key 吗?
A:可以。Web UI 和 GitHub App 都支持在设置页填写 OpenAI / Anthropic Key,数据只在你的沙盒里用,不会回传。
Q2:沙盒里能装私有依赖吗?
A:支持。只要在仓库根目录放 `.npmrc` 或 `.yarnrc.yml` 指向私有源,构建时会把 token 注入容器。
Q3:任务失败怎么办?
A:
1. 打开任务详情 → Logs 面板看报错。
2. 在聊天框里@它“请重试第 3 步”。
3. 如果依赖版本问题,直接发“把 Node 升到 20”。
Q4:本地开发时,前端如何连本地代理?
A:
1. `cd apps/open-swe && yarn dev` 起代理(默认端口 8000)。
2. `cd apps/web && yarn dev` 起前端。
3. 浏览器自动通过 `/api` 反向代理到 8000。
11. 把 Open SWE 放进 CI/CD:一条命令模式
很多团队想让“每周依赖升级”自动化。最简单做法:
# .github/workflows/weekly-deps.yml
- name: Trigger Open SWE
run: |
gh issue create \
--title "Weekly dependency bump" \
--body "Bump all minor versions, run tests, open PR." \
--label "open-swe-auto"
12. 小结与下一步
你现在的位置 | 建议的下一步 |
---|---|
只是听说 | 打开 在线 Demo 新建一个“Hello World”任务 |
已跑通 Demo | 把私有仓库加到 GitHub App,试一次真实 Issue |
想贡献代码 | 阅读 packages/shared 的接口规范,提 PR 前跑 yarn test:int |
最后提醒:Open SWE 不是“替代程序员”,而是把你从重复劳动里解放出来,让你专注更有趣的事。祝你玩得开心!