Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第十一章:并行工作流——让多个 AI 同时协作

📌 本章李明轩在做什么:这是他最期待的一章。4 个平台 4 个循环并行跑——他睡 8 小时相当于 AI 干了 32 小时。本书开篇那个"一个人顶一个团队"的承诺就在这一章兑现。

一个人 vs 一个团队

想象两种场景:

场景A:一个工人,按顺序完成三件事:修前门锁、刷厨房墙、修后花园篱笆。需要 6 小时。

场景B:三个工人同时工作,各做一件事。同样的工作,2 小时完成。

Ralph 支持两种维度的并行工作:

  1. 循环级并行:多个独立的 Ralph 循环同时运行(适合完全独立的任务)
  2. 波浪级并行:单个循环内,同一顶帽子处理多个任务(适合"批量审查"类工作)

循环级并行:多个 AI 同时工作

基本概念

Ralph 支持在同一个项目里同时运行多个循环,每个循环处理一个独立的任务。Ralph 使用 Git Worktree(工作树)机制确保这些循环在隔离的文件系统环境里工作,互不干扰。

📖 名词解释 · Git Worktree(工作树)

Git 传统上只允许你同时在"一个分支"上工作——想看另一个分支的代码,就得先把当前的改动藏起来或提交。Worktree 打破了这个限制:同一个仓库,可以在不同目录里同时检出多个分支,互不打扰。

比喻:一本小说有三个改写版本,传统 Git 像"只有一张桌子,想看 B 版要先把 A 版收起来";Worktree 像"把三张桌子一字排开,三个版本同时摊着,各改各的"。

Ralph 用它实现并行循环的"安全隔离":每个循环各占一个 worktree,各自改各自的文件,最后再合并回主工作树——不会出现"循环 A 写了一半,循环 B 把它改没了"的混乱。

进一步学习:Git 官方文档:git-worktree · Atlassian 中文教程

📁 项目仓库(同一份 Git 历史) 🏠 主工作树(main) 处理:添加用户登录 API 持有 .ralph/loop.lock (标识这是主循环) 循环完成后 负责合并其他结果 🌳 .worktrees/loop-abc 处理:修 CSS 性能问题 独立文件系统 (各改各的,互不干扰) 🌳 .worktrees/loop-def 处理:加单元测试覆盖 独立文件系统 (各改各的,互不干扰) 🌳 .worktrees/loop-xyz ……(更多可以继续开) 📬 合并队列(.ralph/merge-queue.jsonl) 每个 worktree 循环完成后,把自己的改动"排队"等主循环合并 主循环最后一步按顺序合并,自动解决简单冲突 ✅ 最终成果 主工作树合并所有改动 作为一次统一的 commit 产出 完成后入队 完成后入队 主循环按队列合并 主工作树(1 个) 工作树循环(N 个) 合并队列(文件) 最终成果 同一份 Git 历史 + 多个隔离的工作目录 = 并行不打架

启动并行循环

在不同的终端窗口,分别启动不同的任务:

# 终端 1 - 主循环
ralph run -p "添加用户注册和登录 API,包括 JWT 认证"

# 终端 2 - 工作树循环(同时启动)
ralph run -p "修复用户列表页面加载缓慢的性能问题" --max-iterations 30

# 终端 3 - 另一个工作树循环
ralph run -p "添加单元测试覆盖 user_service.py 里的所有函数"

所有循环同时跑,互不干扰。

查看所有循环的状态

ralph loops

# 输出:
# ID         STATUS     ITER   RUNTIME   DESCRIPTION
# loop-main  ✓ Active   12     15m       添加用户注册和登录 API
# loop-abc   ✓ Active   5      8m        修复性能问题
# loop-def   ✓ Complete 18     22m       添加单元测试

结果如何合并

每个工作树循环完成后,会把自己的修改排队到合并队列(merge queue)。当主循环完成时,Ralph 会自动按照完成顺序合并所有工作树循环的结果:

loop-def 完成 → 排队等待合并
loop-abc 完成 → 排队等待合并

主循环完成 → 开始合并:
  合并 loop-def 的修改
  合并 loop-abc 的修改
  处理可能的冲突
  最终提交

一个测试并行循环的实验

如果你想动手体验并行循环,可以用这个贴近李明轩真实场景的实验——把同一篇文章并行改写成两个平台版本:

# 创建一个干净的测试目录
mkdir /tmp/ralph-parallel-test
cd /tmp/ralph-parallel-test
git init

# 准备一篇假的源文稿(你可以用任何一段长文字顶替正文)
cat > article.md <<'EOF'
# 35 岁转型 AI 的三个陷阱

这是一篇 3000 字左右的深度稿,主题是职场中年人想转做 AI 相关工作时
最容易踩的三个陷阱:过度追新、忽视数据基础、低估工程化难度。
……(正文省略)……
EOF

git add . && git commit -m "initial"
ralph init --backend claude

# 终端 1:主循环,生成公众号版本
ralph run -p "读取 article.md,改写成 2000 字左右的公众号版本,
保留原文结构但更流畅有代入感,保存为 wechat.md" \
  --max-iterations 5

# 终端 2(同时启动):工作树循环,生成小红书版本
ralph run -p "读取 article.md,改写成 800 字左右的小红书短图文版本,
口语化、分段短、带适当 emoji,保存为 xiaohongshu.md" \
  --max-iterations 5

完成后,目录下会同时出现 wechat.mdxiaohongshu.md——两种截然不同的风格,两个循环互不干扰地并行产出。把这个实验扩展到 4 个终端,就是李明轩每天晚上真正在做的事。


波浪级并行:批量处理多个文件

第二种并行方式是波浪(Wave):单个帽子在一次迭代里同时处理多个工作单元。

最典型的场景是代码审查:你有 20 个文件需要审查,与其一个一个审查(20 次迭代),不如同时审查(1 次迭代,20 个并行工作者)。

波浪的配置

在帽子配置里,设置 concurrency 参数来启用波浪:

hats:
  file_reviewer:
    name: "🔍 文件审查者"
    triggers: ["review.file"]
    publishes: ["review.done"]
    concurrency: 4               # 同时最多 4 个并行工作者
    instructions: |
      审查指定的文件,检查:
      1. 是否有安全漏洞
      2. 是否有性能问题
      3. 代码风格是否统一
      输出审查报告。
      
  synthesizer:
    name: "📊 综合分析者"
    triggers: ["review.done"]
    publishes: ["analysis.complete"]
    aggregate:
      mode: wait_for_all         # 等待所有并行审查完成
      timeout: 300               # 最多等待 5 分钟
    instructions: |
      综合所有文件的审查结果,生成总体报告。

波浪的触发

AI 在工作时,可以用命令触发波浪,同时提交多个工作单元:

# 在帽子的指令里,AI 会运行这个命令来触发波浪
ralph wave emit review.file \
  --payloads "src/auth.py" "src/user.py" "src/admin.py" "src/api.py"

这会同时启动 4 个 AI 实例,各自审查一个文件,然后把结果汇总给 synthesizer 帽子。

使用 wave-review 预设

Ralph 官方仓库里提供了 wave-review.yml 预设,专门用于并行代码审查。它不随 npm 包发布,需要你手动从上游仓库下载再本地引用:

# 下载预设到本地 presets/ 目录(只做一次)
mkdir -p presets
curl -L -o presets/wave-review.yml \
  https://raw.githubusercontent.com/mikeyobrien/ralph-orchestrator/main/presets/wave-review.yml

# 对整个 src/ 目录进行并行代码审查
ralph run -H presets/wave-review.yml \
  --prompt "审查 src/ 目录下的所有 Python 文件,重点关注安全性"

同一个仓库的 presets/ 目录下还有 autoresearch.ymlcode-assist.ymldebug.ymlpdd-to-code-assist.ymlresearch.ymlreview.yml 等,后面六个同时也通过 -H builtin:<name> 作为内置预设提供;wave-review.yml 目前只能走下载这条路。


并行工作的注意事项

避免任务冲突

并行循环处理的任务最好是完全独立的:

适合并行

  • 添加新功能 A(不影响功能 B 的文件)
  • 修复 bug X(不影响 bug Y 的文件)
  • 为模块 M 添加测试(不影响模块 N)

不适合并行

  • 两个循环都要修改同一个核心文件
  • 一个循环的输出是另一个循环的输入
  • 两个循环都要修改配置文件

如果并行循环修改了相同的文件,合并时会产生冲突。Ralph 会尝试自动处理简单冲突,但复杂冲突可能需要你手动介入。

资源消耗

每个并行循环都会调用 AI 后端,产生费用。在启动多个并行循环前,先评估:

  • AI API 的费用(Claude、Gemini 等都是按 token 计费)
  • 本地系统资源(CPU、内存)
  • AI 服务的请求速率限制

通常,2-3 个并行循环是一个合理的起点。


实用场景:并行研究

Ralph 的 autoresearch 预设支持并行研究,同时从多个角度研究同一个主题:

ralph run -H builtin:autoresearch \
  --prompt "研究 WebAssembly 在 2024 年的应用现状:
  从性能、生态系统、实际案例三个维度分别研究,
  然后综合成一篇深度报告"

这会启动三个并行的研究帽子,分别研究三个维度,最后由综合者帽子整合成统一报告。


查看并行进度

# 查看所有循环(含状态、迭代次数、运行时间)
ralph loops list

# 查看特定循环的事件历史
ralph loops history loop-abc

# 查看特定循环的实时输出
ralph loops logs loop-abc --follow

本章小结

  • 循环级并行:多个 Ralph 循环同时运行,使用 Git Worktree 隔离,完成后自动合并
  • 波浪级并行:单个帽子同时处理多个工作单元,用于批量审查等场景
  • 并行最适合完全独立的任务,避免修改相同文件
  • wave-review.yml 预设提供开箱即用的并行代码审查
  • 考虑 AI API 费用和速率限制再决定并行程度

并行让李明轩的晚上产能提高了 4 倍。但他很快碰到一个新情况:周三早上地铁上,他看到昨晚一个循环卡在"微博签名算法"问题上,离公司还有 15 分钟——他能用的只有手机。下一章讲 Telegram 人机协作:怎么用手机给正在跑的循环发指令。