上周有个团队照着 多智能体流水线架构文 画好了 Supervisor + Worker 拓扑,却在 Linux 云 VPS 上踩了同一个坑:把 LangGraph 的编排进程和 OpenClaw 的 Gateway 塞进一个 screen 会话,周末机器重启后 Slack 能收消息,但图状态全丢,Cron 触发的 Worker 还在跑过期 checkpoint。
复盘结论很直白——多智能体不是「多开几个 Python 进程」,而是两层职责必须拆开:LangGraph 回答「下一步跑哪个节点、状态存哪」;OpenClaw Gateway 回答「谁触发、从哪条通道进、7×24 谁守着」。本文是落地 FAQ,不讲概念科普,只给我们在 VPS 上反复验证过的分工矩阵、最小拓扑、systemd 清单与 L0–L3 排障顺序。Gateway 常驻与日志对齐见 OpenClaw Linux 常驻排障 FAQ;成本与 token 预算对照 团队 Agent 成本账单。
为什么 VPS 上必须拆「编排」和「执行面」
在本地 Demo 里,你用一个 while True 循环就能串 Planner → Coder → Reviewer。搬到 Linux 云 VPS 面向真实用户时,会立刻遇到四类生产问题:
- 触发源多样——Slack 斜杠命令、Telegram 私聊、Webhook、Cron 整点报告,不可能每种都写进 LangGraph 入口。
- 状态要持久——人机
interrupt可能等 8 小时才有人点「批准」;进程重启不能丢 checkpoint。 - 权限要分层——接 IM 的 Gateway 不应持有写生产库的 MCP 令牌;Worker 节点才该有重工具。
- 观测要分流——通道 403、TLS 过期是 Gateway 问题;节点死循环是图编排问题;混在一起只会通宵看日志。
因此我们给客户的默认建议是:LangGraph(或同等 Runtime)跑在内网端口,只暴露 HTTP API 给可信调用方;OpenClaw Gateway 跑在另一单元,负责通道、Cron、轻量 tool 与把用户消息翻译成「启动哪个 thread_id」。这不是两个产品打架,而是编排层与执行面各干各的——和 CI 里「调度器 vs Runner」的分工同构。
openclaw logs 能看懂的通道语义。别让 Gateway 直接实现 Supervisor 逻辑——迟早会变成第二个删不掉的 prompt 怪兽。
拓扑决策矩阵:三种常见 VPS 落地形态
同一台 Linux 云 VPS 上可以有多种组合。选型看「通道要不要 7×24」「图要不要持久 interrupt」「重工具在哪跑」:
| 形态 | LangGraph | OpenClaw | 适用 | 主要风险 |
|---|---|---|---|---|
| A · 单机双进程 | 127.0.0.1:8123 |
公网反代 + 通道 | PoC、10 人以内试点 | 内存争用;升级时要协调两个单元 |
| B · 编排内网 + 重 Worker 外置 | VPS 内网 | VPS Gateway + 云 Mac Worker | 含 xcodebuild、浏览器重自动化 |
跨机 MCP/SSH 延迟;令牌轮换 |
| C · 仅 OpenClaw 轻量多 agent | 不用(或仅离线批处理) | 多 Profile / 子 agent | 顺序 FAQ、单通道客服 | 并行与评审拓扑表达力不足 |
形态 A 是本文重点:2 vCPU / 4 GB 的 Linux VPS 可以跑通双进程,但要把 LangGraph 的 checkpoint 存到磁盘或 Redis(别放 /tmp),OpenClaw 配置里用 HTTP tool 或 webhook 调 /threads/{id}/runs 一类入口。形态 B 适合昨天架构文里的「重 Worker」——Gateway 和图在 VPS,git push、Headless Chrome、Xcode 编译丢到云 Mac,避免 VPS 内存被 Chromium 吃光。形态 C 则适合还没准备好上图的团队,别硬上 LangGraph。
LangGraph 官方把多 Agent 拓扑建模为图上的边(Supervisor、Handoff 等),见 Multi-agent 概念文档;OpenClaw 侧通道与网关配置见 Gateway 配置文档。
最小可复现拓扑(形态 A)
下面是我们给试点客户用的最小路径,假设 VPS 已装好 Docker 或原生 Python 3.11+,域名与 TLS 已就绪:
- LangGraph 服务——用 FastAPI 包一层,监听
127.0.0.1:8123;checkpoint 用 SQLite 或 Postgres 持久化目录/var/lib/langgraph-checkpoints。 - OpenClaw Gateway——按 OpenClaw CLI 文档 安装,
gateway绑定回环或内网,由 Nginx/Caddy 做 TLS 终结。 - 桥接规则——Slack 事件 → Gateway 解析用户意图 → HTTP POST 到 LangGraph
/threads创建 run;图结束时 Gateway 把结果发回通道。 - systemd 双单元——
langgraph-api.service与openclaw.service分别Restart=on-failure,不要写在一个 ExecStart 里。
# /etc/systemd/system/langgraph-api.service
[Unit]
Description=LangGraph multi-agent API
After=network-online.target
[Service]
User=deploy
WorkingDirectory=/opt/langgraph-app
Environment=CHECKPOINT_DIR=/var/lib/langgraph-checkpoints
ExecStart=/opt/langgraph-app/.venv/bin/uvicorn main:app --host 127.0.0.1 --port 8123
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Gateway 单元名与路径以你环境为准;systemctl enable --now langgraph-api openclaw 后,用 ss -lntp 确认只有反代监听 443,8123 不对公网开放。这与 OpenClaw「最小暴露面」决策一致——公网只碰 Gateway,编排 API 走内网或 SSH 隧道。
节点交接契约:Gateway 与图之间交什么
拆层之后最容易翻车的是交接数据结构。我们建议固定一份 JSON schema,禁止 Gateway 把整段聊天记录塞进 LangGraph state:
thread_id——稳定会话键;同一 Slack thread 映射同一 id,方便 resume。intent——枚举:new_task/approve/cancel/status,别用自然语言让 Planner 猜按钮。payload——结构化任务:仓库 URL、文件路径、用户附带的单条指令;大附件走对象存储指针。caller_scope——通道 + 用户 id,供图内做权限判断;Gateway 已做白名单校验,图内仍要二次校验。
LangGraph 的 Memory 与 checkpoint 模型 适合存「世界状态」;Gateway 不该维护第二份状态机,否则两边 thread 对不上时,你会看到「Slack 说完成了,图还在跑 Worker」的经典分裂。
intent=approve 的 HTTP 调用。若把「等人确认」写在 Gateway 的临时变量里,进程一重启,批准链就断了。
L0–L3 分层排障:先 Gateway 还是先图
用户报「机器人没反应」时,按层剥洋葱,不要同时改两边配置:
L0:systemd 与端口
systemctl status openclaw langgraph-api 必须都是 active。若 LangGraph 挂了,Gateway 仍会收 Slack 事件,但 HTTP 桥接 502——日志里只有「upstream error」,容易被误判成通道问题。L0 通过后再进 L1。
L1:OpenClaw 通道与桥接日志
openclaw logs 看事件是否到达、桥接 URL 是否配置错。TLS、Webhook 403、HTTP 202 改写等问题,优先对照通道专项 FAQ,不要在 LangGraph 里找根因。
L2:LangGraph trace 与 checkpoint
用同一 thread_id 调状态查询接口,看卡在哪个节点;checkpoint 目录权限错误时,表现为「每次像新会话」。并行 Worker 节点若共享写目录,要查文件锁冲突——这是图内问题,重启 Gateway 无解。
L3:跨机 Worker 与 MCP
形态 B 下,Worker 在云 Mac 上通过 MCP/SSH 执行重工具。L3 查网络、NO_PROXY、令牌过期。VPS 上 Gateway 正常、图状态 running,但 Worker 超时时,别急着重装 OpenClaw。
上线前清单(30 分钟自检)
- LangGraph 监听回环;公网仅反代 Gateway。
- checkpoint 目录持久化卷,不在容器可丢层。
- Gateway → 图的 HTTP 超时 < 通道平台重试窗口,避免重复触发。
- 每个节点工具白名单;Reviewer 节点无写权限。
- 模拟 VPS 重启:thread interrupt 后能 resume,Cron 不双跑。
- 全链路 trace id 从 Gateway 传入图,方便一条线查完。
/tmp;Gateway 与图共用一个 API Key 无预算分账;重 Worker 和 Gateway 同机跑 Headless Chrome——四件事各能单独搞垮一台 4 GB VPS。
FAQ
多智能体流水线一定要上 LangGraph 吗?
不一定。顺序三步、无并行、无人机等待,OpenClaw 多子 agent 或单脚本即可。需要 checkpoint、并行边、interrupt 时再引入 LangGraph。
OpenClaw 和 LangGraph 能装在同一台 Linux VPS 吗?
可以,形态 A 就是。注意内存与 FD 上限;含浏览器或编译的 Worker 建议拆到云 Mac,VPS 只留 Gateway + 编排 API。
已有 OpenClaw 生产网关,怎么渐进上图编排?
先挑一条 Cron 或单通道命令做「桥接 PoC」,只把一类任务送进 LangGraph;稳定后再迁 Supervisor 逻辑,避免一刀切换配置。
编排上 VPS,重活在云 Mac
多智能体落地到 Linux 云 VPS,核心不是「多装几个包」,而是LangGraph 管状态与拓扑,OpenClaw 管入口与 7×24。VPS 适合轻量、常在线、要接 Webhook 的 Gateway;需要大仓库索引、Xcode、长时浏览器自动化时,把 Worker 节点放到 VPSSpark 云 Mac,和形态 B 矩阵一致。
模型再强,也救不了 screen 里跑的生产进程。先用 systemd 把两层服务拴牢,再用 L0–L3 排障——比再写五千字 prompt 划算得多。
若你在搭第一条 VPS + 多 Agent 流水线,可从 VPSSpark 首页 了解云 Mac 套餐,把重 Worker 从 4 GB VPS 上卸下来;或继续阅读 OpenClaw 云 Mac launchd 差异 FAQ,对照 macOS 与 Linux 常驻差异。