ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Open SWE:基于 Deep Agents 与 LangGraph 的开源软件工厂实战指南

Open SWE:基于 Deep Agents 与 LangGraph 的开源软件工厂实战指南 Open SWE基于 Deep Agents 与 LangGraph 的开源软件工厂实战指南【免费下载链接】open-sweAn Open-Source Asynchronous Coding Agent项目地址: https://gitcode.com/GitHub_Trending/op/open-sweOpen SWEOpen-Source Software Factory是一个由 LangChain 主导、在 LangGraph 之上构建的开源异步编码智能体框架你从 Dashboard、GitHub、Slack 或 Linear 提交一个代码变更任务或按计划定时触发它便会在隔离环境中理解代码库、动手修改、验证结果并最终交付 Pull Request。本文以仓库根目录 README.md 为核心骨架结合 agent/ 目录下的源码实现系统讲解 Open SWE 的软件工厂循环、五大 LangGraph 图入口、沙箱与工具体系、五个产品入口、安全控制机制以及从本地开发到团队部署的完整实操路径。读完本文你将掌握如何搭建、配置、扩展并安全运维一套端到端的异步编码智能体系统。软件工厂循环从任务到 PR 的闭环Open SWE 将工程工作变成可重复的系统。README 用一条流水线概括了整个核心循环Plan and investigate规划并调查仓库Implement in an isolated sandbox在隔离沙箱中实现Validate and deliver a PR验证并交付 PRReview, CI, and feedback评审、CI 与反馈若有后续工作则回到规划环节形成闭环。这一循环承载在Thread线程与Invocation调用的模型之上详见 openwiki/concepts/threads-and-state.md每个云端编码线程绑定一个独立的持久化沙箱当你回复时智能体可以从先前的工作继续一个线程是持久的对话与工作上下文可包含多次 invocation每次 invocation 都是一次由消息或自动化触发的一次智能体执行。首次请求与后续跟进属于同一线程、产生两次 invocation各自计费相互独立的线程并行运行同一线程则从请求到交付再到跟进持续携带上下文。只读的 PR 聊天无需沙箱而桌面端工作可以直接针对已授权allowlist的本地项目运行。四大能力域README 将系统能力划分为四个域Build构建调查仓库、规划工作、编辑代码并运行聚焦验证提交并推送变更后打开或更新 PR使用 subagent 并行化调研与独立工作支持可复用的 skills、仓库指令与自定义环境。Review评审按需或自动执行只读 PR 评审从历史反馈中学习仓库特定的评审偏好支持只读 PR 聊天以调查变更而不修改它把发现findings锚定在 diff 上并发布回 GitHub。Operate运维从 Web Dashboard、GitHub、Slack、Linear 运行任务通过确定性自动化调度周期性工作以/baby-sit监控已选入的 PR、诊断 CI 失败并且只重跑有证据支持的 flaky 任务将后续消息路由到原线程与沙箱。Customize定制选择智能体与评审可用的模型和推理强度配置支持的集成并在不 fork Deep Agents 的前提下扩展精选工具集定义个人与仓库的编码指令以及组织级评审准则可替换沙箱提供商、中间件、skills、触发器与交付策略。技术栈剖析Deep Agents 提供能力LangGraph 提供运行时Deep Agents 是智能体骨架Open SWE 使用 Deep Agents 组装智能体。Deep Agents 提供规划、文件操作、shell 访问、skills、状态与 subagent 等原语Open SWE 在其之上补充软件工程所需的工具、提示词、中间件、集成、授权与产品面从而保持系统可扩展同时继承底层 LangChain 智能体栈的改进。LangGraph 是运行时五个图入口LangGraph 提供持久化执行与线程状态。每次 Open SWE 调用都以线程内的一个 LangGraph run 执行。图入口的注册可以在 langgraph.json 中直接看到{ python_version: 3.14, api_version: 0.13.3, graphs: { agent: agent.graphs.agent:traced_agent, reviewer: agent.graphs.reviewer:traced_reviewer_agent, analyzer: agent.graphs.analyzer:traced_analyzer, chat: agent.graphs.chat:traced_chat_agent, scheduler: agent.graphs.scheduler:get_scheduler }, http: { app: agent.webapp:app } }五个图入口与职责如下对应 README 的表格GraphRoleAgent规划、实现、验证并交付软件变更Reviewer执行只读 PR 评审Analyzer学习仓库特定的评审风格Chat回答关于 PR 的问题而不改动代码Scheduler派发周期性任务与 CI 监控工作其中agent.graphs.agent直接导出agent.server中的get_agent与traced_agent见 agent/graphs/agent.pyreviewer 同理见 agent/graphs/reviewer.py。值得注意的是Scheduler 并不是一个独立的智能体而是把 cron tick 扇出到新的智能体线程——agent/scheduler.py 的模块 docstring 明确定义它为 LangGraph entrypoint that fans cron ticks into fresh agent threads它根据任务类型分发reconcile清理陈旧 run、baby_sit评估 CI 监控看板evaluate_watch、后台任务监控、环境刷新run_environment_refresh_tick、以及通过launch_scheduled_agent_run启动计划中的智能体运行。LangGraph 的 checkpointer 配置同样值得留意langgraph.json中ttl.strategy为delete、sweep_interval_minutes为 60、default_ttl为 43200即 12 小时说明线程检查点默认保留 12 小时后被清扫。FastAPI 后端与 API 契约swagger.json是自定义 FastAPI 后端agent.webapp:app自动生成的 OpenAPI 3.1 契约。入口文件 agent/webapp.py 只有三行——它只是agent.api.app的兼容性入口真正的应用组装在 agent/api/app.py应用启动时依次校验 GitHub 登录 allowlist、沙箱启动配置与本地开发 LLM 配置validate_sandbox_startup_config、validate_local_dev_llm_config并挂载 Dashboard 路由、plan 路由、workflow 审批路由、Linear/Slack/GitHub webhook 路由、健康检查路由最后通过mount_dashboard_ui在同一 origin 的/上托管 Dashboard 构建。CORS 中间件仅在显式配置DASHBOARD_ALLOWED_ORIGINS时启用且禁止通配符*因为启用了allow_credentials。要浏览交互式 API 文档运行make run后打开http://localhost:8000/docs其中/openapi.json提供实时 schema修改后端路由或模型后用make swagger重新生成契约文件。需要注意两个边界部分请求/响应 schema 与认证要求尚未文档化且 LangGraph 运行时端点如/runs、/threads、/assistants不包含在契约中。沙箱隔离与持久化云端工作运行在隔离的 Linux 沙箱中开发工具链由配置的环境environment或快照提供。沙箱与其线程一起持久化沙箱与其线程绑定但不可达的编码沙箱不会被静默替换——Open SWE 宁可失败也不冒险丢弃未提交的工作源码中SandboxGoneError与不可达的沙箱做了区分见 agent/sandboxes/providers/registry.py。沙箱提供者是可插拔的。默认提供者是 LangSmith同时承担 tracing 职责也支持 Modal、Daytona、Runloop、E2B 与本地执行。提供者的选择由环境变量SANDBOX_TYPE决定工厂注册表定义在 agent/sandboxes/providers/registry.py 的SANDBOX_FACTORIES字典中SANDBOX_FACTORIES: dict[str, tuple[str, str]] { langsmith: (agent.sandboxes.providers.langsmith, create_langsmith_sandbox), daytona: (agent.sandboxes.providers.daytona, create_daytona_sandbox), modal: (agent.sandboxes.providers.modal, create_modal_sandbox), runloop: (agent.sandboxes.providers.runloop, create_runloop_sandbox), e2b: (agent.sandboxes.providers.e2b, create_e2b_sandbox), local: (agent.sandboxes.providers.local, create_local_sandbox), }当传入不支持的sandbox_type时_load_sandbox_factory会抛出包含所有支持类型的ValueError确保配置错误立即可见。每个提供者的工厂实现位于 agent/sandboxes/providers/ 下的同名模块如daytona.py、modal.py、runloop.py、e2b.py等沙箱生命周期与路径细节可进一步参考 openwiki/architecture/sandbox-lifecycle.md 与 openwiki/integrations/sandbox-providers.md。工具体系保持精选Deep Agents 提供核心的文件系统、shell 与 subagent 工具Open SWE 在此基础上增加聚焦的 GitHub 交付、Linear、Slack、线程管理、网络调研web_search、浏览器应用验证、规划enter_plan_mode、approve_plan、save_plan、评审fetch_review_diff、publish_review、add_finding等、CI 监控与连接服务Notion/workspace MCP等能力这些工具在 agent/tools/ 目录下可以看到完整清单共 40 个。个人集成使用用户自己的连接加载管理员配置的 workspace MCP 工具对所有编码智能体用户可用。工具的加载与校验机制同样有源码支撑动态工具装载、工具输入清洗、工具错误处理、模型调用超时与回退等都以 LangGraph middleware 的形式实现位于 agent/middleware/可参考 openwiki/architecture/middleware-stack.md。可用的模型与推理强度清单定义在 agent/dashboard/options.py。在团队工作的地方工作五个产品入口Dashboard——启动与继续任务、检查工作、管理 PR、配置用户与团队设置。GitHub——从 issue 启动任务、从 PR 对话请求变更、运行评审并在同一分支上继续工作。Slack——从频道、线程或 code channel 启动并在上下文中接收进度与交付更新。Linear——从 issue 调用 Open SWE 并把结果回贴到该 issue。Desktop实验性——对本地项目运行同一个智能体打包版本目前面向 macOS源码构建也支持 Windows 与 LinuxElectron 应用在 desktop/ 目录。控制与安全自主与边界的平衡一个有用的软件工厂需要自主性与边界并存。README 列出 Open SWE 内置的安全机制云端编码任务拥有每线程沙箱隔离与持久化工作区GitHub App 安装边界与可选的每用户 OAuth组织与仓库 allowlist配合参与者授权检查凭据保存在服务端进程或通过沙箱代理注入推送 workflow 文件变更前需要人工审批见 agent/middleware/workflow_push_guard.py 与 agent/tools/approve_plan.py 附近的审批工具只读的 reviewer 与 PR chat 智能体Plan mode在改动代码前先评审实现方案见 agent/middleware/plan_mode.py可选加入的自动评审与 CI 监控。沙箱可以访问网络并拥有强大的工具因此部署时应遵循最小权限原则使用最小权限凭据、限制启用的仓库与集成、针对自身环境定制审批规则。快速上手本地开发到团队部署Open SWE 由三部分组成LangGraph 后端、Web Dashboard 与实验性桌面客户端。一套部署以单一 URL 同时提供 API、webhooks 与 Dashboard。本地开发环境make dev本地开发涉及 Python 3.14 与 uv、LangGraph CLI由uv sync安装、Node 22.22.2 与 pnpm、一个免费 ngrok 账号用于 webhook 隧道以及一个 Slack 工作区与 GitHub 账号/组织。完整流程见 docs/DEVELOPMENT.mdgit clone https://github.com/langchain-ai/open-swe.git cd open-swe uv venv source .venv/bin/activate uv sync --all-extras make build-dashboard # pnpm install Vite build of the dashboard make dev # http://localhost:2024 serves the API and the dashboard然后为你的机器创建 GitHub App回调地址http://localhost:2024/dashboard/api/auth/callback与 Slack App按开发指南填写.env并在http://localhost:2024登录。UI 开发用make dev-uiVite 与后端同跑同一 URL 热更新。GitHub 与 Slack 需要将 webhook 投递到公网 URL本地使用免费 ngrok 的静态域名make tunnel NGROK_DOMAINname.ngrok-free.dev。关键安全提示本地隧道必须只暴露/webhooks/*因为langgraph dev下的 LangGraph API/threads、/runs、/assistants、/store本身没有任何认证。make tunnel通过 examples/ngrok/webhooks-only.yml 流量策略文件强制该限制任何转发整个端口的隧道都等于把这套无认证 API 暴露到公网。验证方法curl https://name.ngrok-free.dev/webhooks/slack应返回{status:ok, …}而/ok会得到 ngrok 自身的 404。本地常用 Make 目标详见 Makefile 与开发指南Target作用make devlanggraph dev运行在 2024 端口graphs、webhooks、dashboard API以及有构建时的 bundled dashboardmake dev-uimake web与make dev一起跑后端代理 ViteUI 在 2024 端口热更新make web单独运行 Vite dev server3000 端口make build-dashboard安装 dashboard 依赖并构建到ui/.output/publicmake tunnel NGROK_DOMAIN…在静态域名上运行ngrok http 2024仅暴露/webhooks/*make run单独用 uvicorn 运行 FastAPI8000 端口无 LangGraph 运行时无法创建 runmake test [TEST_FILEtests/…]对tests/或指定路径运行pytest -vvvmake lint/make format/make typecheckruff 检查/格式化format会改写文件、ty check agent testsmake swagger根据后端路由重新生成swagger.json本地端点速查/是 DashboardPOST /webhooks/github、POST /webhooks/slack、POST /webhooks/slack/interactivity、POST /webhooks/linear是四个 webhook 入口GET /dashboard/api/auth/login与callback是 GitHub 登录GET /ok与GET /health是健康检查。团队部署安装指南完整的团队部署步骤见 docs/INSTALLATION.md核心流程如下。一套部署是一个 LangGraph 服务器运行五个图 FastAPI 应用拥有 webhooks 与 dashboard API Web Dashboard全部同一 origin因此没有第二个前端部署也不需要跨域 cookie 或 CORS 配置。部署前需要的值摘自安装指南的对照表值获取方式LANGSMITH_API_KEYLangSmith → Settings → API KeysLangGraph Platform 会自动注入模型提供者 key如ANTHROPIC_API_KEY或LANGSMITH_GATEWAY_API_KEY提供者或带gateway:invoke权限的 LangSmith keyGITHUB_APP_ID/CLIENT_ID/CLIENT_SECRET/PRIVATE_KEY/WEBHOOK_SECRET/INSTALLATION_ID第 3 步创建的 GitHub AppSLACK_BOT_TOKEN/SIGNING_SECRET/BOT_USER_ID/BOT_USERNAME第 5 步创建的 Slack AppTOKEN_ENCRYPTION_KEY、DASHBOARD_JWT_SECRET自行生成的两个随机密钥ALLOWED_GITHUB_ORGS或ALLOWED_GITHUB_USERS允许登录的组织或用户CONFIGURED_ADMINS管理员 GitHub 登录名或邮箱LANGGRAPH_URL部署自身的公网 URL声明式配置中心README/安装指南强调每个 Open SWE 读取的变量都在 agent/config.py 中声明含描述与默认值该文件是完整参考。该文件确实实现了统一的配置注册表EnvVardataclass 记录名称、描述、默认值、别名、secret 标记与弃用信息ENV注册表在模块加载时声明全部 100 个变量并提供get_int/get_bool/get_list等类型化读取。例如布尔值只认1/true/yes/on与0/false/no/off两组取值列表变量按逗号拆分并去除空白。这意味着配置的单一事实来源任何模块都不再直接读取os.environ。GitHub App 关键配置回调 URL 为URL/dashboard/api/auth/callbackwebhook URL 为URL/webhooks/githubsecret 用openssl rand -hex 32生成仓库权限中 Contents/Pull requests/Issues/Checks 为读写Checks 用于上报 Open SWE Review check run 并让/baby-sit读取第三方 CI 结论Commit statuses 为只读/baby-sit评估完整 PR 状态集所需Code scanning alerts 与 Actions 只读可选Actions 读写才允许/baby-sit重跑有证据支持的 flaky Actions 任务Workflows 读写允许推送含 workflow 变更的分支组织权限 Members 只读用于校验组织成员身份订阅事件为 Issue comment、Pull request review、Pull request review comment、Check run、Check suite、Workflow run后三个让/baby-sit获得即时失败检测以及可选的 Status。模型提供者Open SWE 通过 LangChain chat model 名称provider:model调用模型给哪个提供者配 key 就能用哪个。部署默认模型为仅配置 Anthropic key 时用anthropic:claude-opus-5否则用openai:gpt-5.6-sol推理强度medium可通过LLM_MODEL_IDprovider:model形式、LLM_REASONING_EFFORTlow/medium/high/max覆盖并可用LLM_FALLBACK_MODEL_ID指定主提供者失败时的回退模型。管理员可在Admin → Global defaults设团队默认用户在My settings自选支持清单在 agent/dashboard/options.py。也可用单个带gateway:invoke权限的 LangSmith keyLANGSMITH_GATEWAY_API_KEY把所有模型调用路由到 LangSmith LLM Gateway。Docker 自托管根目录 Dockerfile 构建的是生产 LangGraph API server 镜像不是沙箱镜像docker build -t open-swe . docker run \ --env-file .env \ -p 8123:8000 \ --add-hosthost.docker.internal:host-gateway \ -e DATABASE_URIpostgres://postgres:postgreshost.docker.internal:5432/postgres?sslmodedisable \ -e REDIS_URIredis://host.docker.internal:6379 \ -e LANGGRAPH_AUTH_TYPElangsmith \ -e LANGSMITH_AUTH_ENDPOINThttps://api.smith.langchain.com \ -e LANGSMITH_TENANT_IDyour LangSmith workspace id \ -e LANGGRAPH_URLhttps://your-backend-url \ open-swe独立自托管还需要LANGSMITH_API_KEY与LANGGRAPH_CLOUD_LICENSE_KEY并需注意不要使用缩容到零的托管后台运行依赖 Postgres/Redis 支撑的 worker 保持存活。认证方面独立镜像默认noop会让 LangGraph API 对任何能触达端口的人开放务必改用langsmith每个调用都要求工作区的 LangSmith API key。验证部署Dashboard 打开URL用 GitHub 登录Slack 邀请 bot 到频道后Open SWE whats in the repo?GitHub 在已安装 App 的仓库 issue 上评论openswe what files are in this repo?几秒内应看到 反应、LangSmith 项目中的 run 与回复评论。可选增强模块安装指南还包含若干可选模块Slack Sign in with Slack 账号关联与 code channelsearly access见 agent/slack/code_channels.pyLinear 触发器webhook 指向URL/webhooks/linear并在 Admin → Workspace MCPs 添加名为linear的 MCP server见 docs/INSTALLATION.md 的 Linear 小节Dashboard 独立部署与 mount prefixCI/脚本用的管理员 API 凭据——支持 GitHub Actions OIDCADMIN_OIDC_SUBJECTS白名单附可复制的 examples/github-actions/set-base-snapshot.yml或管理员 PAT仓库 allowlist、mention handle默认openswe,open-swe,openswe-dev可改OPEN_SWE_MENTION_TAGS与用户映射以及TOKEN_ENCRYPTION_KEY的滚动轮换机制接受按最新优先排序的 Fernet key 列表写用第一个 key读按序尝试。常见问题排查要点安装指南与开发指南的 Troubleshooting 章节覆盖了高频故障Webhook 收不到事件URL 必须是部署 URLGitHub 的Advanced标签页可查看每次投递与响应webhook secret 必填缺失时端点对所有请求返回 401Invalid signature改了 secret 后必须重启后端并到 Slack Event Subscriptions 按Retry。Dashboard 登录失败GITHUB_APP_CLIENT_ID not configured表示缺客户端凭据redirect_uri is not associated表示回调 URL 未在 App 中登记session 不持久时用https://并确保在LANGGRAPH_URL本身上打开保存时报403 CSRF check failed说明请求Origin不在DASHBOARD_BASE_URL或DASHBOARD_ALLOWED_ORIGINS内启动失败报ALLOWED_GITHUB_ORGS or ALLOWED_GITHUB_USERS must be configured时需至少配置一个非空登录 allowlistAdmin 页 403 则把登录名/邮箱加入CONFIGURED_ADMINS。Dashboard 显示 LangGraph JSON 而非 UI镜像中没有 dashboard 构建LangGraph Platform 检查构建日志是否出现dashboard build failedDocker 下先make build-dashboard或用DASHBOARD_STATIC_DIR指定构建目录。沙箱创建失败LANGSMITH_API_KEY必须有效且工作区有沙箱权限沙箱端点 403 即无权限Failed to create sandbox from snapshot id表示管理员捕获的环境或基础快照不存在或未就绪到Admin → Environments删除/重新捕获或清空Admin → Sandbox → Base snapshot回退到根快照。Agent 不响应评论GitHub 评论须含已配置的 handle默认openswe大小写不敏感且评论者至少登录过一次 Dashboard否则日志出现No email mapping for GitHub userLinear 评论须含 handleSlack 中 bot 必须在频道内且被提及。项目状态与演进机制Open SWE 由 LangChain 在开放环境中快速迭代开发正处于活跃开发期API、安装方式与产品面可能持续演进README 中明确以 [!NOTE]标注。架构与技术决策通过 Open SWE Enhancement ProposalsOEPs 机制评审——包括流程规范 oeps/0000-process.md、快速 Slack 评审 oeps/0002-expedited-slack-review.md 等。系统基于 MIT LicenseLICENSE开源代码库为单仓库结构后端 Python 代码在 agent/Dashboard 前端在 ui/桌面客户端在 desktop/测试覆盖在 tests/约 150 个测试文件覆盖中间件、评审、沙箱、Slack、Dashboard 等模块。架构细节还可参考 openwiki/ 下的架构、概念、集成与运维文档以及 docs/CUSTOMIZATION.md模型、沙箱、工具、skills、提示词、触发器与中间件的定制指南。【免费下载链接】open-sweAn Open-Source Asynchronous Coding Agent项目地址: https://gitcode.com/GitHub_Trending/op/open-swe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表