单 Agent 处理 700+ 任务耗时 29 小时,无法接受。需要多 Agent 并行执行。
多 Agent 并行执行同一 Skill,如何确保各 Agent 拥有完全相同的 Skill 能力?
任务数量远大于单 Agent 处理上限,需要有效的任务分发机制。
用户 / 编排者 Agent
分析任务 → 创建任务队列 → 监控进度
↓ 创建 N 个任务
┌─────────────────────────────────────────────────────────────┐
│ Kanban 调度层 │
│ dispatch_interval_seconds: 5s max_spawn: 15 │
│ Ready ──→ 调度器按 max_spawn 上限 Spawn Worker │
│ Running ─→ 跟踪正在执行的任务 │
│ Done ────→ 标记完成 │
│ Blocked ─→ 等待人工介入 │
└────────────────────────────┬────────────────────────────────┘
│ spawn_nowait()
↓
┌──────── Worker 1 ────────┐ ┌──────── Worker 2 ────────┐
│ hermes -p collector_a │ │ hermes -p collector_b │
│ 加载 Skill: │ │ 加载 Skill: │
│ policy-batch-collector │ │ policy-batch-collector │
│ kanban_read_task() │ │ kanban_read_task() │
│ → 执行采集逻辑 │ │ → 执行采集逻辑 │
│ kanban_complete() │ │ kanban_complete() │
└────────────────────────┘ └────────────────────────┘
↓
┌─────────────────────────┐
│ 共享结果存储 │
│ ~/七大政策/{城市}/... │
└─────────────────────────┘
所有批量任务进入 Kanban 队列,调度器统一分发。
固定数量 Worker 进程,任务完成后立即接新任务,减少空窗期。
Skill 实体存于一处,所有 Profile 通过符号链接共享。
| 参数 | 推荐值 |
|---|---|
dispatch_interval_seconds | 5s 近乎无空窗 |
max_spawn | 15 并发上限 |
dispatch_in_gateway | true 内嵌 Gateway |
failure_limit | 5 次后 Block |
# dispatch_once() ready = db.select( "status='ready'") for row in ready: if spawned >= max_spawn: break claim_task(conn,row.id) spawn_nowait( "hermes -p <profile> kanban task <id>") spawned += 1
独立 ~/.hermes/profiles/collector_a/
独立 SOUL.md + Skill 链接
独立 API Key 配置
独立 ~/.hermes/profiles/collector_b/
独立 SOUL.md + Skill 链接
独立 API Key 配置
独立 ~/.hermes/profiles/collector_c/
独立 SOUL.md + Skill 链接
独立 API Key 配置
subprocess.Popen("hermes -p <profile> chat -q work kanban task <id>")
每个 Worker 是独立 OS 进程,启动后自行读取任务、执行 Skill、标记完成。
每个 Profile 目录单独维护 Skill 副本。更新时需逐个复制。
Skill 实体存于 ~/.hermes/skills/,各 Profile 通过 ln -s 引用。
所有 Profile 的 skills/ 配置指向同一根目录,通过 hermes skills link 关联。
~/.hermes/
skills/ ← Skill 单一来源(实体)
policy-batch-collector/
kanban-batch-collection/
profiles/
collector_a/skills/ ──ln -s──→ ../../skills/
collector_b/skills/ ──ln -s──→ ../../skills/
collector_c/skills/ ──ln -s──→ ../../skills/
700 任务 / 15 Worker = 每 Worker 处理约 47 任务。
单任务平均耗时 2.5 分钟 → 整体完成时间 ≈ 30 分钟
| 策略 | 适用 |
|---|---|
| 轮询 | 任务耗时相近时首选 |
| 最短队列 | 任务耗时差异较大 |
| 加权 | 各 Worker 硬件不一致 |
进程异常退出 → 调度器 tick 发现 TTL 超期 → 任务自动重新入 Ready 队列
连续失败 5 次(failure_limit)→ 标记 Blocked → 人工介入或自动重置
写入前检查文件是否存在 → 已存在则跳过 → 可安全重跑,不影响已成功结果