在前面的系列文章中,我们逐一掌握了 Hermes Agent 的方方面面:从核心架构到平台集成,从交互控制到自动化定时任务。你已经能够熟练使用单个 Hermes Agent 完成各种任务。

多 Agent 编排 —— Spawn 实例与 Tmux 协调、单发模式、PTY 模式、多 Agent 协作

简介

在前面的系列文章中,我们逐一掌握了 Hermes Agent 的方方面面:从核心架构到平台集成,从交互控制到自动化定时任务。你已经能够熟练使用单个 Hermes Agent 完成各种任务。

但现在,让我们面对一个现实:

单个 Agent 有局限性。

  • 当一个任务需要同时做代码审查、文档更新、测试编写时,串行执行意味着 3 倍的等待时间
  • 当你的项目涉及前端、后端、数据库、运维多个领域时,一个通用的 Agent 可能不如多个专精 Agent 的组合
  • 当你想让一个 Agent 写代码,另一个 Agent 审查代码,第三个 Agent 运行测试时——你需要的是多 Agent 协作

这就是 Hermes Agent 的 多 Agent 编排系统 要解决的问题。

多 Agent 编排让 Hermes 能够:

  • 动态创建多个 Agent 实例,每个实例可以有独立的模型、工具集、上下文
  • 通过 Tmux 协调多个终端会话,实现可视化的多 Agent 管理
  • 使用单发模式(Fire-and-forget)快速分发子任务
  • 使用 PTY 模式进行交互式多 Agent 协作
  • 编排复杂的协作模式:主从、并行、流水线、辩论

读完本文后,你将能够设计和实现多 Agent 协作系统,让多个 AI Agent 像一支团队一样协同工作。

目录

多 Agent 编排概述

为什么需要多 Agent?

text
┌─────────────────────────────────────────────────────────┐
│              单 Agent vs 多 Agent                         │
│                                                         │
│  单 Agent:                                              │
│  ┌──────────────────────────────────────┐               │
│  │         Agent (gpt-4o)               │               │
│  │                                      │               │
│  │  1. 审查代码 (2 min)                 │               │
│  │  2. 更新文档 (3 min)                 │               │
│  │  3. 编写测试 (4 min)                 │               │
│  │  4. 运行测试 (1 min)                 │               │
│  │                                      │               │
│  │  总耗时: 10 分钟                      │               │
│  └──────────────────────────────────────┘               │
│                                                         │
│  多 Agent:                                              │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐   │
│  │ Agent 1 │  │ Agent 2 │  │ Agent 3 │  │ Agent 4 │   │
│  │ 审查代码 │  │ 更新文档 │  │ 编写测试 │  │ 运行测试 │   │
│  │(claude) │  │(gpt-4o) │  │(gpt-4o) │  │(haiku) │   │
│  │ 2 min   │  │ 3 min   │  │ 4 min   │  │ 1 min  │   │
│  └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘   │
│       │            │            │            │         │
│       └────────────┴────────────┴────────────┘         │
│                        │                               │
│                   协调器                                  │
│                   汇总结果                                │
│                                                         │
│  总耗时: 4 分钟(最慢子任务的时间)                        │
│                                                         │
└─────────────────────────────────────────────────────────┘

多 Agent 架构

text
┌──────────────────────────────────────────────────────────┐
│                   多 Agent 编排系统                         │
│                                                          │
│  ┌────────────────────────────────────────────────────┐  │
│  │              编排器 (Orchestrator)                  │  │
│  │                                                    │  │
│  │  • 任务分解                                        │  │
│  │  • Agent 实例管理                                  │  │
│  │  • 依赖关系调度                                    │  │
│  │  • 结果聚合                                        │  │
│  │  • 冲突解决                                        │  │
│  └───────────────────┬────────────────────────────────┘  │
│                      │                                   │
│       ┌──────────────┼──────────────┐                    │
│       ▼              ▼              ▼                    │
│  ┌─────────┐   ┌─────────┐   ┌─────────┐               │
│  │ Agent A │   │ Agent B │   │ Agent C │               │
│  │ model:  │   │ model:  │   │ model:  │               │
│  │ gpt-4o  │   │ claude  │   │ haiku   │               │
│  │         │   │         │   │         │               │
│  │ tools:  │   │ tools:  │   │ tools:  │               │
│  │ terminal│   │ terminal│   │ terminal│               │
│  │ read    │   │ read    │   │ read    │               │
│  │ search  │   │ write   │   │ write   │               │
│  │         │   │ patch   │   │         │               │
│  └─────────┘   └─────────┘   └─────────┘               │
│                                                          │
│  ┌────────────────────────────────────────────────────┐  │
│  │            Tmux 会话协调层                           │  │
│  │                                                    │  │
│  │  • 每个 Agent 运行在独立的 Tmux pane                 │  │
│  │  • 编排器通过 Tmux API 管理 Agent 生命周期           │  │
│  │  • 支持实时监控和手动干预                            │  │
│  └────────────────────────────────────────────────────┘  │
│                                                          │
└──────────────────────────────────────────────────────────┘

Spawn 实例:动态创建 Agent

什么是 Spawn?

Spawn 是 Hermes Agent 在运行时动态创建新 Agent 实例的能力。每个 Spawn 出来的 Agent 实例是完全独立的:

  • 独立的 LLM 调用上下文
  • 独立的工具执行环境
  • 独立的会话状态
  • 可以配置不同的模型和工具集

基本 Spawn 操作

bash
# 在 TUI 中 Spawn 新 Agent
/spawn
# → 正在创建新 Agent 实例...
# → Agent #2 已创建 (session: worker-001)
# → 模型: gpt-4o (继承父 Agent)
# → 工具集: terminal, read_file, write_file, patch, search_files

# Spawn 并指定模型
/spawn --model claude-sonnet-4
# → Agent #3 已创建 (session: worker-002)
# → 模型: claude-sonnet-4

# Spawn 并指定工具集
/spawn --tools terminal,read_file,search_files
# → Agent #4 已创建 (session: worker-003)
# → 工具集: terminal, read_file, search_files(仅 3 个工具)

# Spawn 并指定工作目录
/spawn --workdir /path/to/project
# → Agent #5 已创建
# → 工作目录: /path/to/project

# Spawn 完整配置
/spawn --model haiku --tools terminal --workdir /tmp/sandbox --name test-runner
# → Agent #6 已创建
# → 名称: test-runner
# → 模型: haiku
# → 工具集: terminal
# → 工作目录: /tmp/sandbox

查看所有 Spawn 的实例

bash
/spawn list
# → 活跃 Agent 实例:
#
#  ┌────┬──────────────┬──────────────┬──────────┬──────────┬────────────┐
#  │ ID │ 名称         │ 模型         │ 工具数   │ 状态     │ 运行时间   │
#  ├────┼──────────────┼──────────────┼──────────┼──────────┼────────────┤
#  │  1 │ main         │ gpt-4o       │    10    │ ● 活跃   │ 2h 15m     │
#  │  2 │ worker-001   │ gpt-4o       │     5    │ ● 活跃   │ 45m        │
#  │  3 │ worker-002   │ claude-sonnet│     5    │ ⏳ 工作中 │ 12m        │
#  │  4 │ worker-003   │ gpt-4o       │     3    │ ✓ 完成   │ 8m         │
#  │  5 │ test-runner  │ haiku        │     1    │ ● 活跃   │ 3m         │
#  └────┴──────────────┴──────────────┴──────────┴──────────┴────────────┘

/spawn status worker-002
# → Agent #3 (worker-002) 状态:
#
#   模型: claude-sonnet-4
#   工具集: terminal, read_file, write_file, patch, search_files
#   工作目录: /opt/data/project
#   会话消息数: 28
#   Token 使用: 输入 12,450 / 输出 3,200
#   当前状态: 正在执行 terminal 工具...
#   运行时间: 12m 34s
#   内存使用: 45MB

管理 Spawn 实例

bash
# 向指定 Agent 发送指令
/spawn send worker-001 "请审查 src/auth.py 文件"
# → 指令已发送到 Agent #2

# 接收指定 Agent 的输出
/spawn recv worker-001
# → Agent #2 (worker-001) 输出:
#   已完成对 src/auth.py 的审查...
#   [审查报告内容]

# 等待 Agent 完成
/spawn wait worker-002
# → 等待 Agent #3 完成...
# → Agent #3 已完成 ✅

# 终止 Agent
/spawn kill worker-003
# → Agent #4 已终止

# 终止所有 Agent
/spawn kill --all
# → 已终止 4 个 Agent 实例(保留主 Agent)

Tmux 协调:多会话管理

为什么用 Tmux?

Tmux 是终端复用器,它天然适合作为多 Agent 的协调层:

  1. 隔离性:每个 Agent 在独立的 pane 中运行,互不干扰
  2. 可视化:可以同时看到所有 Agent 的实时输出
  3. 持久性:即使 SSH 断开,Agent 仍在后台运行
  4. 可编程:通过 tmux 命令行 API 可以程序化管理
  5. 可干预:随时可以 attach 到任意 pane 进行手动操作

启动 Tmux 协调模式

bash
# 启动 Tmux 多 Agent 会话
hermes tmux start --session hermes-agents
# → 创建 Tmux 会话: hermes-agents
# → 创建面板布局:
#   ┌──────────────────────────────────┐
#   │          编排器 (0)               │
#   ├──────────────┬───────────────────┤
#   │  Agent A (1) │   Agent B (2)     │
#   ├──────────────┴───────────────────┤
#   │          Agent C (3)             │
#   └──────────────────────────────────┘

# 指定布局
hermes tmux start --layout even-horizontal
# → 水平均分布局: [Agent A] [Agent B] [Agent C]

hermes tmux start --layout tiled
# → 平铺布局

hermes tmux start --layout main-vertical
# → 左侧大面板 + 右侧多个小面板

Tmux 面板管理

bash
# 列出所有面板
hermes tmux panes
# → 会话: hermes-agents
#
#   ┌────┬──────────────┬────────┬──────────┐
#   │ #  │ 名称         │ 大小   │ 状态     │
#   ├────┼──────────────┼────────┼──────────┤
#   │  0 │ orchestrator │ 80x10  │ ● 活跃   │
#   │  1 │ agent-a      │ 40x20  │ ⏳ 工作  │
#   │  2 │ agent-b      │ 40x20  │ ● 等待   │
#   │  3 │ agent-c      │ 80x10  │ ✓ 完成   │
#   └────┴──────────────┴────────┴──────────┘

# 向面板发送指令
hermes tmux send agent-a "请审查代码"
# → 已向面板 agent-a 发送指令

# 查看面板输出
hermes tmux capture agent-a --lines 20
# → 面板 agent-a 最近 20 行输出:
#   [输出内容]

# Attach 到指定面板(手动干预)
hermes tmux attach agent-b
# → 已连接到面板 agent-b
#   按 Ctrl+B 然后 D 返回编排器

# 添加新面板
hermes tmux add --name agent-d --model gpt-4o
# → 已添加面板 agent-d

# 移除面板
hermes tmux remove agent-c
# → 已移除面板 agent-c(Agent 实例保留)

# 调整布局
hermes tmux resize --layout even-vertical
# → 布局已调整为垂直均分

Tmux 布局示例

text
# main-vertical 布局
┌────────────────────────────────────────────────┐
│                  编排器                          │
│  正在协调 3 个 Agent 执行代码审查任务...         │
│  [=====>                    ] 45%               │
├───────────────────────┬────────────────────────┤
│   Agent A (审查)      │   Agent B (文档)        │
│  分析 main.py...      │  更新 README...         │
│  发现 2 个问题        │  完成 3 个章节          │
│  ▌                    │  ▌                     │
├───────────────────────┴────────────────────────┤
│                Agent C (测试)                   │
│  生成测试用例...                                │
│  已创建 15 个测试                               │
│  正在运行测试...                                │
│  ▌                                             │
└────────────────────────────────────────────────┘

单发模式(Fire-and-forget)

什么是单发模式?

单发模式是一种"发射后不管"的任务分发方式。你给 Agent 一个任务,它自动执行并返回结果,你不需要等待它完成就可以去做其他事情。

使用单发模式

bash
# 单发模式运行任务
/hermes spawn --mode fire-and-forget "审查 src/ 目录下的所有 Python 文件"
# → 任务已提交 (task-id: task-20250522-001)
# → Agent 正在执行中...
# → 完成后结果将自动发送

# 查看任务状态
/task status task-20250522-001
# → Task: task-20250522-001
#   状态: 执行中
#   进度: 审查 12/45 个文件
#   预计剩余时间: 3 分钟
#   模型: gpt-4o
#   已使用 Token: 8,450

# 等待任务完成
/task wait task-20250522-001
# → 等待中...
# → Task 完成 ✅
#   结果:
#   ├── 审查完成: 45 个文件
#   ├── 发现问题: 8 个
#   ├── 高危: 2 个 (SQL 注入, 路径遍历)
#   ├── 中危: 3 个
#   └── 低危: 3 个

批量单发任务

bash
# 批量分发任务
/task batch <<EOF
{"task": "审查 src/auth/*.py", "model": "claude-sonnet-4", "priority": "high"}
{"task": "审查 src/api/*.py", "model": "gpt-4o", "priority": "medium"}
{"task": "审查 src/utils/*.py", "model": "gpt-4o", "priority": "low"}
{"task": "运行所有单元测试", "model": "haiku", "priority": "high"}
EOF
# → 批量任务已提交
# → 4 个子任务已创建:
#   task-20250522-002 (high)    - src/auth/*.py 审查
#   task-20250522-003 (medium)  - src/api/*.py 审查
#   task-20250522-004 (low)     - src/utils/*.py 审查
#   task-20250522-005 (high)    - 运行单元测试

# 查看批量任务状态
/task batch-status
# → ┌──────────────────┬──────────┬────────┬──────────┐
#   │ 任务             │ 优先级   │ 状态   │ 进度     │
#   ├──────────────────┼──────────┼────────┼──────────┤
#   │ task-20250522-002│ 高      │ ✓ 完成 │ 100%     │
#   │ task-20250522-003│ 中      │ ⏳ 执行 │ 67%      │
#   │ task-20250522-004│ 低      │ ⏳ 执行 │ 23%      │
#   │ task-20250522-005│ 高      │ ✓ 完成 │ 100%     │
#   └──────────────────┴──────────┴────────┴──────────┘
#
#   总体进度: 2/4 完成, 2/4 执行中

单发模式的结果处理

yaml
# 单发任务结果配置
fire_and_forget:
  # 结果回调
  on_complete:
    # 发送结果到 Telegram
    - type: "telegram"
      chat_id: "-100987654321"
      template: |
        任务 {{task_id}} 已完成:
        {{result}}

    # 保存结果到文件
    - type: "file"
      path: "~/results/{{task_id}}.md"

  # 错误处理
  on_error:
    # 重试
    retry:
      max_attempts: 2
      delay: 60
    # 错误通知
    notify:
      - type: "telegram"
        chat_id: "-100987654321"
        template: |
          ⚠️ 任务 {{task_id}} 执行失败:
          {{error}}

PTY 模式:交互式协作

什么是 PTY 模式?

PTY(Pseudo Terminal)模式允许你在一个伪终端中与 Agent 进行交互式对话。在多 Agent 场景中,PTY 模式让多个 Agent 可以在各自的终端中进行实时交互式协作

启动 PTY 模式

bash
# 启动 PTY 模式
hermes pty start
# → PTY 模式已启动
# → 连接到 /dev/pts/2
# → 输入 'exit' 或 Ctrl+D 退出

# 在 PTY 模式下交互
PTY> 帮我重构这个模块
Agent: 好的,让我先查看代码结构...
       [调用 search_files]
       [调用 read_file]
       我发现了 3 个可以改进的地方...

PTY> 先从数据库层开始
Agent: 好的,让我重构数据库层...
       [调用 write_file]
       [调用 patch]
       数据库层重构完成...

PTY> /spawn --pty --model claude
PTY> 请审查刚才的数据库层重构
PTY(spawn-1): 好的,让我检查修改...
              我发现了以下问题:
              1. 缺少事务处理...
              2. 连接池配置需要优化...

PTY> 好的,我来修复这些问题

PTY 模式下的多 Agent 协作

bash
# 创建 PTY 会话并启动多 Agent
hermes pty session --name code-review
# → PTY 会话已创建: code-review
# → 会话 ID: pts-3

# 在会话中添加 Agent
/hermes pty add --name reviewer --model claude-sonnet-4
# → 已添加 reviewer Agent

/hermes pty add --name tester --model gpt-4o
# → 已添加 tester Agent

# 切换到指定 Agent
/hermes pty switch reviewer
# → 已切换到 reviewer Agent
# reviewer> 开始审查代码...

/hermes pty switch tester
# → 已切换到 tester Agent
# tester> 开始编写测试...

# 广播消息给所有 Agent
/hermes pty broadcast "代码已更新,请重新审查"
# → 消息已广播给 3 个 Agent
# reviewer> 收到,重新审查中...
# tester> 收到,更新测试用例...

# 查看会话状态
/hermes pty status
# → PTY 会话: code-review
#   Agent 列表:
#   - main (gpt-4o)    ● 活跃
#   - reviewer (claude) ⏳ 工作中
#   - tester (gpt-4o)  ● 等待

PTY 模式 vs 单发模式

特性 单发模式 PTY 模式
交互性 无(一次性任务) 有(持续对话)
适用场景 简单的独立任务 需要多轮对话的任务
结果返回 完成后一次性返回 实时流式输出
资源占用 较高
并发能力 高(可批量分发) 中(受终端数限制)

多 Agent 协作模式

模式 1:主从模式(Manager-Worker)

主 Agent 负责任务分解和结果汇总,多个 Worker Agent 并行执行子任务。

text
┌─────────────────────────────────────┐
│           Manager Agent              │
│           (gpt-4o)                   │
│                                      │
│  1. 分析需求,分解任务               │
│  2. 分发子任务给 Worker              │
│  3. 等待所有 Worker 完成             │
│  4. 汇总结果,生成最终输出           │
└──────────┬──────┬──────┬─────────────┘
           │      │      │
     ┌─────┘      │      └─────┐
     ▼            ▼            ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│Worker 1 │ │Worker 2 │ │Worker 3 │
│代码审查  │ │文档更新  │ │测试编写  │
│claude   │ │gpt-4o   │ │gpt-4o   │
└─────────┘ └─────────┘ └─────────┘
python
# 主从模式编排脚本
from hermes.orchestrate import Orchestrator

orchestrator = Orchestrator(mode="manager-worker")

# 定义任务
task = """
对以下 PR 进行完整审查:
- 代码质量审查
- 文档更新
- 测试用例编写

PR 链接: https://github.com/org/repo/pull/123
"""

# 配置 Worker
orchestrator.add_worker(
    name="code-reviewer",
    model="claude-sonnet-4",
    system_prompt="你是一个资深的代码审查专家,关注代码质量、安全性和最佳实践。",
    tools=["terminal", "read_file", "search_files", "patch"],
)

orchestrator.add_worker(
    name="doc-writer",
    model="gpt-4o",
    system_prompt="你是一个技术文档专家,擅长编写清晰、准确的技术文档。",
    tools=["terminal", "read_file", "write_file"],
)

orchestrator.add_worker(
    name="test-engineer",
    model="gpt-4o",
    system_prompt="你是一个测试工程师,擅长编写全面的单元测试和集成测试。",
    tools=["terminal", "read_file", "write_file"],
)

# 执行
result = orchestrator.run(task)
print(result.summary)

模式 2:并行模式(Parallel)

多个 Agent 并行执行相同任务的不同部分,最后合并结果。

text
┌──────────────────────────────────────────────┐
│              协调器                            │
│                                              │
│  将大文件拆分为多个部分,分发给不同 Agent      │
└────┬──────┬──────┬──────┬────────────────────┘
     │      │      │      │
     ▼      ▼      ▼      ▼
┌──────┐┌──────┐┌──────┐┌──────┐
│Part 1││Part 2││Part 3││Part 4│
│审查   ││审查   ││审查   ││审查   │
└──┬───┘└──┬───┘└──┬───┘└──┬───┘
   │       │       │       │
   └───────┴───────┴───────┘
           │
           ▼
┌──────────────────────────────────┐
│          结果合并                 │
│  合并 4 个部分的审查结果          │
│  去重、排序、生成最终报告         │
└──────────────────────────────────┘
python
# 并行模式编排脚本
from hermes.orchestrate import Orchestrator

orchestrator = Orchestrator(mode="parallel")

# 定义并行任务
# 将大文件列表拆分为 4 组,每组由一个 Agent 审查
files = [f"src/{f}.py" for f in [
    "auth", "api", "models", "utils",
    "config", "middleware", "validators", "serializers",
    "managers", "signals", "admin", "templatetags"
]]

orchestrator.split(files, chunks=4)  # 分为 4 组

orchestrator.add_worker(
    model="gpt-4o",
    system_prompt="审查 Python 代码,关注安全性和性能问题。",
    tools=["read_file", "search_files"],
    prompt_template="请审查以下文件:\n{files}\n\n生成审查报告。",
)

# 配置合并逻辑
orchestrator.set_merger("""
请合并以下审查报告:

{reports}

要求:
1. 去除重复的问题
2. 按严重程度排序
3. 按模块分组
4. 生成汇总统计
""")

result = orchestrator.run()

模式 3:流水线模式(Pipeline)

Agent 按顺序串联,前一个 Agent 的输出作为后一个 Agent 的输入。

text
┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐
│ Agent 1 │───▶│ Agent 2 │───▶│ Agent 3 │───▶│ Agent 4 │
│ 代码生成 │    │ 代码审查 │    │ 测试编写 │    │ 测试执行 │
└─────────┘    └─────────┘    └─────────┘    └─────────┘
   gpt-4o      claude-sonnet   gpt-4o         haiku

   输出:         输出:          输出:          输出:
   源码文件      审查意见+       测试文件       测试报告
                 修改后代码
python
# 流水线模式编排脚本
from hermes.orchestrate import Orchestrator

orchestrator = Orchestrator(mode="pipeline")

# 定义流水线阶段
orchestrator.add_stage(
    name="generate",
    model="gpt-4o",
    prompt="根据以下需求生成 Python 代码:\n{requirements}\n\n只输出代码,不要解释。",
    tools=["write_file"],
)

orchestrator.add_stage(
    name="review",
    model="claude-sonnet-4",
    prompt="审查以下代码,指出问题并修复:\n{input}\n\n输出修复后的完整代码。",
    tools=["read_file", "patch"],
)

orchestrator.add_stage(
    name="test",
    model="gpt-4o",
    prompt="为以下代码编写全面的单元测试:\n{input}\n\n输出测试代码。",
    tools=["read_file", "write_file"],
)

orchestrator.add_stage(
    name="verify",
    model="haiku",
    prompt="运行测试并报告结果:\n{input}\n",
    tools=["terminal"],
)

# 执行流水线
requirements = "实现一个线程安全的缓存类,支持 TTL 过期和 LRU 淘汰。"
result = orchestrator.run(requirements=requirements)

模式 4:辩论模式(Debate)

多个 Agent 就同一个问题提出不同观点,最终由裁决 Agent 做出决策。

text
┌──────────────────────────────────────────────┐
│              议题: 使用哪种架构?              │
│              "微服务 vs 单体"                  │
└──────────┬───────────────────┬───────────────┘
           │                   │
           ▼                   ▼
┌──────────────────┐  ┌──────────────────┐
│   Agent A (正方)  │  │   Agent B (反方)  │
│   支持微服务      │  │   支持单体        │
│   "可扩展性好..." │  │   "部署简单..."   │
└────────┬─────────┘  └────────┬──────────┘
         │                     │
         └──────────┬──────────┘
                    │
                    ▼
┌──────────────────────────────────────────────┐
│              多轮辩论                           │
│  第一轮: 陈述立场                               │
│  第二轮: 反驳对方                              │
│  第三轮: 总结陈词                              │
└──────────────────────┬───────────────────────┘
                       │
                       ▼
┌──────────────────────────────────────────────┐
│              裁决 Agent                        │
│  综合双方论点,给出推荐方案                     │
│  说明选择理由                                  │
└──────────────────────────────────────────────┘
python
# 辩论模式编排脚本
from hermes.orchestrate import Orchestrator

orchestrator = Orchestrator(mode="debate")

# 定义议题
topic = "我们的新项目应该使用微服务架构还是单体架构?"

# 配置辩论双方
orchestrator.add_debater(
    side="pro",
    name="微服务支持者",
    model="gpt-4o",
    position="微服务架构",
    arguments=[
        "独立部署和扩展",
        "技术栈自由选择",
        "故障隔离",
        "团队自治",
    ],
)

orchestrator.add_debater(
    side="con",
    name="单体架构支持者",
    model="claude-sonnet-4",
    position="单体架构",
    arguments=[
        "开发和部署简单",
        "调试方便",
        "数据一致性好",
        "适合小型团队",
    ],
)

# 配置裁决
orchestrator.set_judge(
    model="gpt-4o",
    prompt="请综合以上辩论双方的论点,给出你的推荐和建议。",
)

# 执行辩论
result = orchestrator.run(topic=topic, rounds=3)
print(result.judgment)

实战案例

实战 1:自动化 PR 审查流水线

python
"""
自动化 PR 审查流水线
触发: 新 PR 创建时(通过 Webhook)
执行: 并行代码审查 + 安全检查 + 文档检查 → 汇总报告
"""
from hermes.orchestrate import Orchestrator
import os

class PRReviewPipeline:
    def __init__(self, pr_number):
        self.pr_number = pr_number
        self.orchestrator = Orchestrator(mode="parallel")

    def setup(self):
        # 获取 PR 信息
        import subprocess
        result = subprocess.run(
            ["gh", "pr", "view", str(self.pr_number), "--json", "files,body,title"],
            capture_output=True, text=True
        )
        self.pr_info = result.stdout

        # 获取变更文件列表
        result = subprocess.run(
            ["gh", "pr", "diff", str(self.pr_number)],
            capture_output=True, text=True
        )
        self.diff = result.stdout

    def run(self):
        self.setup()

        # 配置并行 Worker
        self.orchestrator.add_worker(
            name="code-reviewer",
            model="claude-sonnet-4",
            prompt=f"审查以下代码变更,关注代码质量和最佳实践:\n\n{self.diff}",
            max_tokens=4096,
        )

        self.orchestrator.add_worker(
            name="security-scanner",
            model="gpt-4o",
            prompt=f"审查以下代码变更,关注安全问题(注入、XSS、CSRF 等):\n\n{self.diff}",
            max_tokens=2048,
        )

        self.orchestrator.add_worker(
            name="doc-checker",
            name="文档检查器",
            model="gpt-4o-mini",
            prompt=f"检查以下代码变更是否同步更新了文档:\n\nPR 描述: {self.pr_info}\n代码变更: {self.diff}",
            max_tokens=1024,
        )

        # 配置合并
        self.orchestrator.set_merger("""
合并以下审查报告,生成一份结构化的 PR 审查摘要:

代码审查: {code-reviewer}
安全审查: {security-scanner}
文档检查: {doc-checker}

格式:
## PR 审查摘要

### 代码质量
[代码审查结果]

### 安全问题
[安全审查结果]

### 文档
[文档检查结果]

### 建议
[综合建议]

### 结论
[Approve / Request Changes / Comment]
""")

        return self.orchestrator.run()

# 执行
pipeline = PRReviewPipeline(pr_number=123)
result = pipeline.run()
print(result)

实战 2:多 Agent 系统调试

python
"""
多 Agent 系统调试
场景: 系统出现性能问题,多个 Agent 从不同角度分析
"""
from hermes.orchestrate import Orchestrator

def debug_system():
    orchestrator = Orchestrator(mode="manager-worker")

    # Manager: 协调调试
    orchestrator.manager_prompt = """
系统出现性能问题。请将调试任务分解并分发给 Worker:

1. 分析数据库查询性能
2. 分析 API 响应时间
3. 分析内存和 CPU 使用
4. 分析网络 I/O

汇总所有 Worker 的结果,给出诊断报告和修复建议。
"""

    # Worker 1: 数据库分析
    orchestrator.add_worker(
        name="db-analyst",
        model="gpt-4o",
        system_prompt="你是数据库性能专家。",
        prompt="""
分析数据库性能:
1. 运行: EXPLAIN ANALYZE <慢查询>
2. 检查索引使用情况
3. 分析查询计划
4. 给出优化建议
""",
        tools=["terminal", "read_file"],
    )

    # Worker 2: API 分析
    orchestrator.add_worker(
        name="api-analyst",
        model="claude-sonnet-4",
        system_prompt="你是 API 性能专家。",
        prompt="""
分析 API 性能:
1. 检查慢请求日志: grep "response_time>1000" /var/log/api.log
2. 识别最慢的端点
3. 分析请求链路
4. 给出优化建议
""",
        tools=["terminal", "search_files"],
    )

    # Worker 3: 资源分析
    orchestrator.add_worker(
        name="resource-analyst",
        model="gpt-4o",
        system_prompt="你是系统资源分析专家。",
        prompt="""
分析系统资源使用:
1. top -bn1 | head -20
2. free -h
3. df -h
4. iostat -x 1 5
5. 分析内存泄漏、CPU 瓶颈、磁盘 I/O
""",
        tools=["terminal"],
    )

    return orchestrator.run()

result = debug_system()
print(result.summary)

实战 3:Tmux + Spawn 多 Agent 编码会话

bash
# 启动 Tmux 编码会话
hermes tmux start --session coding --layout main-vertical

# 添加编码 Agent
hermes tmux add --name coder --model gpt-4o --tools terminal,read_file,write_file,patch
hermes tmux add --name reviewer --model claude-sonnet-4 --tools terminal,read_file,search_files

# 向 coder 发送任务
hermes tmux send coder "实现一个 REST API 的用户认证模块,包括登录、注册、token 刷新"

# 等待 coder 完成
hermes tmux wait coder

# 向 reviewer 发送审查任务
hermes tmux send reviewer "审查 coder 刚完成的认证模块代码,关注安全性和最佳实践"

# 等待 reviewer 完成
hermes tmux wait reviewer

# 查看 reviewer 的输出
hermes tmux capture reviewer

# 如果有问题,向 coder 发送修改指令
hermes tmux send coder "根据 reviewer 的意见修改以下问题:\n[问题列表]"

# 循环直到满意

总结与下篇预告

总结

本文全面介绍了 Hermes Agent 的多 Agent 编排系统:

核心要点:

  1. Spawn 实例让你动态创建 Agent —— 每个实例独立运行,可以配置不同的模型、工具集、工作目录。这是多 Agent 协作的基础设施。

  2. Tmux 协调提供了可视化的多 Agent 管理 —— 每个 Agent 在独立的 pane 中运行,你可以实时看到所有 Agent 的状态和输出,随时进行手动干预。

  3. 单发模式(Fire-and-forget)适合独立子任务 —— 你分发任务后不需要等待,结果会自动返回。支持批量分发、优先级调度、结果回调。

  4. PTY 模式适合需要多轮对话的协作场景 —— 多个 Agent 在各自的终端中持续交互,编排者可以随时切换和广播。

  5. 四种协作模式覆盖绝大多数场景

    • 主从模式:Manager 分解任务,Worker 并行执行,Manager 汇总结果
    • 并行模式:将大任务拆分,多个 Agent 并行处理,最后合并
    • 流水线模式:Agent 按顺序串联,前一个的输出是后一个的输入
    • 辩论模式:多个 Agent 就同一问题提出不同观点,裁决 Agent 做决策

最佳实践建议:

  • 选择合适的协作模式:简单并行用并行模式,有依赖用流水线,复杂决策用辩论
  • 为不同任务选择合适模型:复杂推理用 gpt-4o/claude,简单任务用 haiku 节省成本
  • 用 Tmux 监控长时间运行的多 Agent 任务,随时可以介入
  • 为关键任务配置超时和失败重试,避免 Agent 卡死
  • 合理控制 Spawn 的 Agent 数量,避免并发过多导致 API 限流

下篇预告

生产环境部署 —— Docker 容器化、Kubernetes 编排、监控与告警、高可用架构

在下一篇文章中,我们将把 Hermes Agent 从开发环境推向生产环境:

  • Docker 容器化:构建 Hermes Agent 的 Docker 镜像,配置多阶段构建
  • Kubernetes 编排:在 K8s 上部署多 Agent 集群,配置自动扩缩容
  • 监控与告警:集成 Prometheus + Grafana,监控 Agent 健康状态和性能指标
  • 高可用架构:多实例部署、故障转移、数据持久化、备份恢复

从开发到生产,让 Hermes Agent 在真实环境中稳定、高效地运行。

敬请期待!