确定性多 Agent 开发流水线:在 OpenClaw + Lobster 上的实战
> 来源: https://dev.to/ggondim/how-i-built-a-deterministic-multi-agent-dev-pipeline-inside-openclaw-and-contributed-a-missing-4ool
> 作者: ggondim
> 日期: 2026 年初
> 关键词: OpenClaw, Lobster, 多 Agent, 确定性编排
📌 核心内容
这是一篇极其详尽的实战文章,作者用了两个月时间探索如何构建一个自主运行的 AI 开发团队流水线:程序员 Agent → 审查员 Agent → 测试员 Agent,最终在 OpenClaw + Lobster 上找到了解决方案,并为 Lobster 贡献了循环(loop)支持(PR #20)。
核心原则:LLM 做创造性工作,代码做编排逻辑。绝不用 LLM 做流程控制。
🗺️ 探索历程:5 次尝试
❌ 尝试 1:Ralph Orchestrator
- 优点:优雅的硬上下文重置模式
- 不足:无法做 Agent 间协调、通道连接有限、无工具生态
❌ 尝试 2:OpenClaw Sub-Agents
sessions_spawn创建子 Agent,但父 Agent 是 LLM 在决定何时派发- 非确定性流程控制、并发上限(8)、生成深度限制
❌ 尝试 3:外部事件总线
- Redis Streams + 状态机 + Worker Pool
- 能用但过度工程化,重新发明了 OpenClaw 已有的一半功能
❌ 尝试 4:技能驱动自编排
- 在 Agent 的 Skill 里写"完成后调用 sessions_send 通知审查员"
- 状态机活在 LLM 脑子里 → 不可靠
❌ 尝试 5:Plugin Hooks 事件总线
- 自定义 Hook 解析 Agent 输出中的事件标记,触发下一步
- 接近目标但需要维护订阅映射和自定义插件
✅ 最终方案:Lobster + Sub-Lobsters
突破口:仔细读文档后发现 OpenClaw 三个关键原语:
1. agentToAgent — Agent 间点对点消息(非子 Agent,是对等 Agent)
2. sessions_send — 可寻址的 session 消息发送
3. Webhooks + Session Routing — 外部触发器路由到特定 Agent/Session
Lobster 几乎完美,唯一缺的是循环支持。于是作者直接为 Lobster 贡献了 PR #20。
🏗️ 最终架构
Telegram
│
▼
OpenClaw Gateway
│
├── Agents(独立工作区/工具/身份/模型)
│ ├── programmer/ (Opus, 有写权限)
│ ├── reviewer/ (Sonnet, 只读权限, 省钱)
│ └── tester/ (有测试运行器)
│
├── Lobster 工作流引擎
│ ├── dev-pipeline.lobster (主流程: 循环 → 测试 → 通知)
│ └── code-review.lobster (子流程: 写码 → 审查 → 解析)
│
└── llm-task 插件(结构化 JSON + Schema 验证)
主工作流
name: dev-pipeline
steps:
- id: code-review-loop
lobster: ./code-review.lobster # 嵌套子工作流
loop:
maxIterations: 3 # 最多 3 轮
condition: '! echo "$LOBSTER_LOOP_JSON" | jq -e ".approved"'
- id: test
command: openclaw.invoke --tool agent-send ...
condition: $code-review-loop.json.approved == true
- id: notify
command: openclaw.invoke --tool message --action send ...
子工作流(code-review.lobster)
steps:
- id: code # 程序员写代码
- id: review # 审查员审查
- id: parse # llm-task 解析审查结果为 {approved, feedback}
关键:循环条件由 shell 命令判断(检查 JSON 中的 approved 字段),不是 LLM 判断。完全确定性。
💡 作者总结的五条经验
1. 不要用 LLM 做编排
> "每次我试图在 prompt 里放流程控制('完成后发给审查员'),就引入了一个故障模式。LLM 是不可靠的路由器。"
2. 仔细读文档(读两遍)
> "我差点建了个完整的外部事件总线,才发现 OpenClaw 已经有 agentToAgent、sessions_send 和 webhook session routing。"
3. 贡献缺失的部分,而不是绕过它
> "Lobster 没有循环。与其写 wrapper 模拟循环,不如直接给 Lobster 加上循环支持。PR 只有 129 行实现 + 186 行测试。"
4. Session Key 就是你的数据模型
> pipeline: 一个字符串搞定项目隔离、角色分离和可寻址。不需要数据库。
5. 类型化管道碾压 Prompt Engineering
> "一个带 condition、loop、stdin 管道的 YAML 文件,比告诉 LLM '如果审查是否定的就回到步骤 2,但最多 3 次' 可靠一万倍。"
📊 分析与评价
与之前报告的关联
这篇文章完美印证了我们之前两篇报告的观点:
| 报告 | 核心观点 | 本文实证 |
|---|---|---|
| [Agentic 工程师指南](https://temp.jaylab.io/world-class-agentic-engineer-report) | 研究与实现分离;把确定性步骤固化 | Lobster 做编排,LLM 做创造 |
| [Lobster 工作流引擎](https://temp.jaylab.io/lobster-workflow-shell-report) | 审批门、类型化管道、节省 token | 本文是 Lobster 最完整的实战案例 |
特别值得注意的
1. GitHub Copilot 写了 100% 的实现代码 — PR #20 的代码完全由 Copilot coding agent 编写
2. 模型差异化:程序员用 Opus(贵但强),审查员用 Sonnet(省钱)
3. 零外部基础设施:不需要 Redis、不需要消息队列、不需要数据库
评分
| 维度 | 评分(/10) |
|---|---|
| 技术深度 | 9.5 |
| 实用价值 | 9 |
| 写作质量 | 9.5 |
| 开源贡献 | 9 |
| **综合** | **9.3** |
🔗 与我们的关联
1. 直接可用:我们就在用 OpenClaw,这个架构可以直接复用
2. 深度研究自动化:可以用 Lobster 把"抓取 → 搜索 → 写报告 → 部署"流水线化
3. 多 Agent 协作模式:程序员/审查员/测试员的模式可以推广到其他场景(如研究员/编辑/校对)
4. PR #20:循环支持是关键缺失,值得关注合并进度
报告由深度研究助手自动生成 | 2026-03-07