⚡ 中级进阶教程

深入掌握 Hermes 主脑调度策略、多 Worker 编排、MCP 深度实战、Skills 精细配置,构建真正的多 Agent 协作系统

课程概述

本教程将带你从单 Agent 使用升级到多 Agent 协作。你将学会如何让 Hermes 作为中央大脑,调度多个专业化 OpenClaw Worker,通过 MCP 协议通信,配合 Skills 扩展,构建高效的 AI Agent 团队。

🧠 Hermes 主脑
⚡ MCP 调度
🦞 Worker A
🦞 Worker B
🦞 Worker C
🧠

调度策略深度

adaptive / round-robin / least-loaded 三种策略的原理、配置和适用场景

🦞

多 Worker 编排

专业化分工、模型分配、Docker 容器化、健康检查、自动恢复

MCP 深度实战

多服务器配置、传输方式选择、环境变量管理、调试排错

🔧

Skills 精细配置

技能安装、绑定、冲突解决、自定义参数、性能调优

💡 前置要求: 请先完成 初级教程,确保 Hermes 和 OpenClaw 已正确安装配置,并能正常对话。本教程假设你已经掌握了基本的 CLI 操作和配置方法。

Hermes 主脑调度深度

Hermes 作为主脑,核心能力在于理解意图、拆解任务、智能分发、结果聚合。深入理解调度策略,是构建高效协作系统的关键。

调度流程详解

当用户发送一个请求时,Hermes 的处理流程如下:

用户意图
意图分析
任务拆解
Worker 匹配
并行执行
结果聚合

完整调度配置

yaml
# ~/.hermes/config.yaml - 完整调度配置
orchestration:
  strategy: adaptive
  
  task_decomposition:
    max_subtasks: 8
    timeout_per_task: 120
    min_subtask_size: 50
    decomposition_model: anthropic/claude-sonnet-4
    allow_re_decompose: true
    
  worker_selection:
    mode: skill-based
    prefer_local: true
    fallback_strategy: round-robin
    max_retries: 3
    health_check_interval: 30
    
  result_aggregation:
    mode: merge
    conflict_resolution: latest
    deduplication: true
    quality_check: true
    
  context_sharing:
    enabled: true
    max_shared_tokens: 32000
    compression_threshold: 0.8
    share_tool_results: true
    share_memory: true

  execution:
    parallel: true
    max_concurrent: 5
    retry_on_failure: true
    retry_max_attempts: 3
    retry_backoff: exponential
    timeout_graceful: true

三种调度策略深度对比

策略原理配置参数适用场景优缺点
adaptive 分析任务类型,匹配 Worker 的 Skills 和历史表现,智能选择最优 Worker skill_match_weight: 0.6
load_weight: 0.3
history_weight: 0.1
大多数场景(推荐) ✅ 效果最好
❌ 调度开销略大
round-robin 按顺序轮流分配任务给各 Worker,确保负载均匀 sticky_session: false
skip_unhealthy: true
同质化 Worker、负载均衡 ✅ 简单公平
❌ 不考虑能力差异
least-loaded 实时监控 Worker 负载,分配给当前最空闲的 Worker load_metric: queue_depth
cooldown: 5s
高并发、任务量波动大 ✅ 响应快
❌ 不考虑技能匹配

策略选择决策树

决策逻辑
你的 Worker 是否专业化分工?
├── 是 → Worker 技能差异大吗?
│   ├── 是 → adaptive(智能匹配技能)
│   └── 否 → 任务量波动大吗?
│       ├── 是 → least-loaded(负载优先)
│       └── 否 → round-robin(简单轮询)
└── 否 → Worker 都是同质化的?
    ├── 是 → round-robin(均匀分配)
    └── 否 → 建议重新设计 Worker 专业化分工

意图分析与任务拆解

Hermes 使用 LLM 分析用户意图,将复杂请求拆解为可执行的子任务。理解这个过程有助于你编写更好的提示词:

拆解示例
# 用户输入
"帮我开发一个博客系统,要有用户注册、文章管理、评论功能"

# Hermes 拆解过程
意图分析: 全栈 Web 应用开发
├── 子任务1: 数据库设计(用户表、文章表、评论表)→ Worker: analyst
├── 子任务2: 后端 API 开发(注册/登录/CRUD)      → Worker: coder
├── 子任务3: 前端页面开发(首页/详情/管理后台)    → Worker: coder
├── 子任务4: API 接口测试                          → Worker: coder (测试技能)
├── 子任务5: 部署配置(Docker + Nginx)            → Worker: operator
└── 依赖关系: 1 → 2 → 3,4 → 5

# 拆解配置影响
max_subtasks: 8     # 最多拆8个子任务(本项目5个,合理)
timeout_per_task: 120  # 每个子任务最多2分钟
allow_re_decompose: true  # 如果子任务还是太复杂,允许二次拆解

结果聚合模式

模式说明适用场景配置
merge 将所有 Worker 的输出按逻辑顺序合并为完整交付物 代码开发、文档生成 conflict_resolution: latest
vote 多个 Worker 独立完成同一任务,取多数一致的结果 代码审查、决策判断 min_voters: 3
consensus_threshold: 0.6
cascade 前一个 Worker 的输出作为后一个的输入,链式处理 代码→测试→部署流水线 stop_on_error: true

多 Worker 编排实战

部署多个 OpenClaw Worker,每个 Worker 专业化分工,形成高效的执行团队。本节将详细讲解如何设计、配置和管理多 Worker 系统。

Worker 专业化设计原则

🎯 核心原则: 每个 Worker 应该有明确的职责边界专精的技能集。不要让一个 Worker 做所有事情——专业化分工能显著提高执行质量和效率。

完整 Worker 配置

json
// ~/.openclaw/agents/agents.json - 完整多 Worker 配置
{
  "agents": {
    "default": {
      "id": "default",
      "name": "默认助手",
      "model": { "primary": "anthropic/claude-sonnet-4" }
    },
    "list": [
      {
        "id": "coder",
        "name": "代码工程师",
        "emoji": "💻",
        "model": {
          "primary": "anthropic/claude-sonnet-4",
          "fallbacks": [
            "openai/gpt-5.1",
            "google/gemini-2.5-flash"
          ],
          "retry": {
            "max_attempts": 3,
            "backoff": "exponential",
            "initial_delay_ms": 1000
          }
        },
        "skills": [
          "code-generation",
          "code-review",
          "debugging",
          "refactoring",
          "git-operations"
        ],
        "system_prompt": "你是一个专业的全栈工程师。编写高质量、可维护的代码。遵循 SOLID 原则和设计模式。代码必须包含错误处理和日志记录。",
        "tools": {
          "allow": ["file_read", "file_write", "file_edit", "code_execute", "git"],
          "deny": ["system_admin", "network_access"]
        },
        "limits": {
          "max_tokens": 8192,
          "timeout": 180,
          "max_retries": 3
        },
        "description": "专注于代码编写、审查和调试"
      },
      {
        "id": "analyst",
        "name": "数据分析师",
        "emoji": "📊",
        "model": {
          "primary": "openai/gpt-5.1",
          "fallbacks": ["anthropic/claude-sonnet-4"]
        },
        "skills": [
          "data-analysis",
          "visualization",
          "sql-query",
          "report-generation",
          "statistics"
        ],
        "system_prompt": "你是一个数据分析专家。擅长 SQL 查询、数据可视化、统计分析和报告生成。分析结果必须包含数据支撑和可视化建议。",
        "tools": {
          "allow": ["file_read", "database_query", "code_execute"],
          "deny": ["file_write", "system_admin"]
        },
        "limits": {
          "max_tokens": 8192,
          "timeout": 120
        },
        "description": "专注于数据分析和可视化"
      },
      {
        "id": "operator",
        "name": "运维工程师",
        "emoji": "🔧",
        "model": {
          "primary": "google/gemini-2.5-flash",
          "fallbacks": ["anthropic/claude-sonnet-4"]
        },
        "skills": [
          "file-ops",
          "api-calls",
          "monitoring",
          "deployment",
          "docker"
        ],
        "system_prompt": "你是一个 DevOps 工程师。擅长部署、监控、API 调用和文件操作。操作前必须确认安全性,关键操作需要二次确认。",
        "tools": {
          "allow": ["file_read", "file_write", "api_call", "code_execute", "docker"],
          "deny": ["system_admin"]
        },
        "limits": {
          "max_tokens": 4096,
          "timeout": 60
        },
        "description": "专注于文件操作、API调用和运维"
      },
      {
        "id": "reviewer",
        "name": "审查专家",
        "emoji": "🔍",
        "model": {
          "primary": "anthropic/claude-opus-4",
          "fallbacks": ["anthropic/claude-sonnet-4"]
        },
        "skills": [
          "code-review",
          "security-audit",
          "performance-analysis",
          "architecture-review"
        ],
        "system_prompt": "你是一个资深技术审查专家。审查代码质量、安全漏洞、性能瓶颈和架构合理性。给出具体的改进建议和优先级。",
        "tools": {
          "allow": ["file_read", "code_execute"],
          "deny": ["file_write", "system_admin", "network_access"]
        },
        "limits": {
          "max_tokens": 8192,
          "timeout": 180
        },
        "description": "专注于代码审查和安全审计"
      }
    ]
  }
}

启动多个 Worker

bash
# 方式一:逐个启动(适合调试)
# 启动代码工程师 Worker(端口 18789)
OPENCLAW_AGENT=coder openclaw gateway start --port 18789

# 启动数据分析师 Worker(端口 18790)
OPENCLAW_AGENT=analyst openclaw gateway start --port 18790

# 启动运维工程师 Worker(端口 18791)
OPENCLAW_AGENT=operator openclaw gateway start --port 18791

# 启动审查专家 Worker(端口 18792)
OPENCLAW_AGENT=reviewer openclaw gateway start --port 18792

# 方式二:批量启动脚本
cat > start-workers.sh << 'SCRIPT'
#!/bin/bash
WORKERS=("coder:18789" "analyst:18790" "operator:18791" "reviewer:18792")

for worker in "${WORKERS[@]}"; do
  IFS=':' read -r id port <<< "$worker"
  echo "启动 Worker: $id (端口: $port)"
  OPENCLAW_AGENT=$id openclaw gateway start --port $port --daemon
  sleep 2
done

echo "所有 Worker 已启动"
openclaw gateway status --all
SCRIPT

chmod +x start-workers.sh
./start-workers.sh

Worker 健康检查与自动恢复

yaml
# ~/.hermes/config.yaml - Worker 健康管理
workers:
  health_check:
    enabled: true
    interval: 30s
    timeout: 5s
    unhealthy_threshold: 3
    
  auto_recovery:
    enabled: true
    max_restart_attempts: 5
    restart_cooldown: 60s
    notify_on_failure: true
    
  load_balancing:
    max_queue_per_worker: 10
    overflow_strategy: reject  # reject | queue | redirect
    
  registration:
    auto_discover: true
    discover_interval: 60s

模型回退机制详解

当主模型不可用时,自动切换到备用模型,确保服务不中断:

json
"model": {
  "primary": "anthropic/claude-sonnet-4",
  "fallbacks": [
    "openai/gpt-5.1",
    "google/gemini-2.5-flash"
  ],
  "retry": {
    "max_attempts": 3,
    "backoff": "exponential",
    "initial_delay_ms": 1000,
    "max_delay_ms": 30000,
    "retryable_errors": [
      "rate_limit",
      "timeout",
      "server_error",
      "connection_reset"
    ],
    "non_retryable_errors": [
      "invalid_api_key",
      "model_not_found",
      "context_length_exceeded"
    ]
  },
  "circuit_breaker": {
    "enabled": true,
    "failure_threshold": 5,
    "recovery_timeout": 60s,
    "half_open_requests": 3
  }
}

Worker 间通信与协作

yaml
# ~/.hermes/config.yaml - Worker 间通信
communication:
  protocol: mcp
  
  message_queue:
    type: redis
    host: localhost
    port: 6379
    db: 0
    
  event_bus:
    enabled: true
    topics:
      - task.assigned
      - task.completed
      - task.failed
      - worker.health
      
  shared_state:
    enabled: true
    backend: redis
    ttl: 3600
    key_prefix: "hermes:state:"

Docker 容器化部署

使用 Docker 部署 Worker 可以实现环境隔离、快速扩展和一致的生产环境。

Docker Compose 完整配置

yaml
# docker-compose.yml
version: '3.8'

services:
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    restart: unless-stopped

  hermes:
    image: hermes-agent:latest
    build:
      context: .
      dockerfile: Dockerfile.hermes
    ports:
      - "18788:18788"
    environment:
      - OPENAI_API_KEY=${XIDAO_API_KEY}
      - OPENAI_BASE_URL=https://api.xidao.online/v1
      - REDIS_URL=redis://redis:6379
    volumes:
      - ./hermes-config:/root/.hermes
      - ./workspace:/workspace
    depends_on:
      - redis
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:18788/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  worker-coder:
    image: openclaw:latest
    build:
      context: .
      dockerfile: Dockerfile.openclaw
    environment:
      - OPENCLAW_AGENT=coder
      - OPENAI_API_KEY=${XIDAO_API_KEY}
      - OPENAI_BASE_URL=https://api.xidao.online/v1
    ports:
      - "18789:18789"
    volumes:
      - ./workspace:/workspace
      - ./openclaw-config:/root/.openclaw
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:18789/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  worker-analyst:
    image: openclaw:latest
    environment:
      - OPENCLAW_AGENT=analyst
      - OPENAI_API_KEY=${XIDAO_API_KEY}
      - OPENAI_BASE_URL=https://api.xidao.online/v1
    ports:
      - "18790:18790"
    volumes:
      - ./workspace:/workspace
      - ./openclaw-config:/root/.openclaw
    restart: unless-stopped

  worker-operator:
    image: openclaw:latest
    environment:
      - OPENCLAW_AGENT=operator
      - OPENAI_API_KEY=${XIDAO_API_KEY}
      - OPENAI_BASE_URL=https://api.xidao.online/v1
    ports:
      - "18791:18791"
    volumes:
      - ./workspace:/workspace
      - ./openclaw-config:/root/.openclaw
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

volumes:
  redis-data:

环境变量管理

bash
# .env 文件(不要提交到 Git!)
XIDAO_API_KEY=sk-your-api-key-here

# Docker Compose 启动
docker compose up -d

# 查看所有服务状态
docker compose ps

# 查看日志
docker compose logs -f hermes
docker compose logs -f worker-coder

# 扩展 Worker 数量
docker compose up -d --scale worker-coder=3

# 重启单个服务
docker compose restart worker-coder

# 停止所有服务
docker compose down

Dockerfile 示例

dockerfile
# Dockerfile.openclaw
FROM node:20-slim

RUN apt-get update && apt-get install -y \
    python3 python3-pip git curl \
    && rm -rf /var/lib/apt/lists/*

RUN npm install -g openclaw

WORKDIR /workspace

EXPOSE 18789

CMD ["openclaw", "gateway", "start", "--host", "0.0.0.0"]

MCP 服务器深度配置

MCP(Model Context Protocol)是 Hermes 与 OpenClaw Worker 之间的通信桥梁,也是 Agent 访问外部工具和数据源的标准协议。本节将深入讲解 MCP 的配置、管理和调试。

MCP 三大原语

🔧

Tools(工具)

AI 可调用的函数,如 read_filesearch_webexecute_code。工具是 Agent 执行操作的核心能力。

📦

Resources(资源)

AI 可读取的数据源,如文件内容、数据库记录、API 响应。资源是只读的,提供上下文信息。

📝

Prompts(提示模板)

预定义的提示词模板,标准化交互模式。可包含参数,动态生成提示词。

传输方式选择

传输方式原理适用场景配置参数优缺点
stdio 通过标准输入/输出通信,Agent 作为父进程启动 MCP Server 本地开发、单机部署 "transport": "stdio" ✅ 简单可靠
❌ 仅限本地
SSE Server-Sent Events,HTTP 长连接单向推送 远程 MCP 服务器、云端服务 "transport": "sse"
"url": "https://..."
✅ 支持远程
❌ 单向通信
Streamable HTTP 双向 HTTP 通信,支持流式响应 新版推荐,远程服务 "transport": "streamable-http" ✅ 双向通信
✅ 流式响应

Hermes MCP 服务器完整配置

yaml
# ~/.hermes/config.yaml - MCP 服务器完整配置
mcp_servers:
  # === 文件系统 ===
  filesystem:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"]
    transport: stdio
    disabled: false
    
  # === GitHub ===
  github:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_PERSONAL_ACCESS_TOKEN: ${GITHUB_TOKEN}
    transport: stdio
    disabled: false
    
  # === 数据库 ===
  postgres:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-postgres", "postgresql://user:pass@localhost/mydb"]
    transport: stdio
    disabled: false
    
  sqlite:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-sqlite", "/workspace/data.db"]
    transport: stdio
    disabled: false
    
  # === 浏览器自动化 ===
  puppeteer:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-puppeteer"]
    transport: stdio
    disabled: false
    
  # === 搜索 ===
  brave-search:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-brave-search"]
    env:
      BRAVE_API_KEY: ${BRAVE_API_KEY}
    transport: stdio
    disabled: false
    
  # === 远程 MCP 服务 ===
  remote-analytics:
    url: https://mcp.example.com/sse
    transport: sse
    headers:
      Authorization: Bearer ${MCP_AUTH_TOKEN}
    disabled: false
    
  # === 内存服务 ===
  memory:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-memory"]
    transport: stdio
    disabled: false

# MCP 全局配置
mcp:
  connection_timeout: 30s
  request_timeout: 60s
  max_concurrent_servers: 10
  retry_on_failure: true
  retry_max_attempts: 3
  log_level: info

OpenClaw MCP 配置

json
// ~/.openclaw/mcp/servers.json
{
  "mcp": {
    "servers": {
      "filesystem": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"],
        "transport": "stdio",
        "disabled": false
      },
      "github": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-github"],
        "env": {
          "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
        },
        "transport": "stdio"
      },
      "remote-api": {
        "url": "https://mcp.example.com/sse",
        "transport": "sse",
        "headers": {
          "Authorization": "Bearer ${MCP_AUTH_TOKEN}"
        }
      }
    },
    "global": {
      "connection_timeout": 30,
      "request_timeout": 60,
      "max_retries": 3
    }
  }
}

环境变量安全管理

MCP 服务器通常需要 API Key 等敏感信息,使用环境变量引用而非硬编码:

bash
# ~/.hermes/.env - MCP 相关环境变量
GITHUB_TOKEN=ghp_your_github_token
BRAVE_API_KEY=bsa_your_brave_key
MCP_AUTH_TOKEN=your_mcp_auth_token
DATABASE_URL=postgresql://user:pass@localhost/mydb

# 设置文件权限
chmod 600 ~/.hermes/.env

# 在配置中使用 ${VAR_NAME} 引用
# Hermes 会自动从 .env 文件读取并替换

MCP 服务器调试

bash
# 列出所有已配置的 MCP 服务器
hermes mcp list

# 测试 MCP 服务器连接
hermes mcp test filesystem
hermes mcp test github

# 查看 MCP 服务器提供的工具
hermes mcp tools filesystem
hermes mcp tools github

# 查看 MCP 服务器提供的资源
hermes mcp resources postgres

# 启用/禁用 MCP 服务器
hermes mcp enable github
hermes mcp disable puppeteer

# 查看 MCP 通信日志
hermes mcp logs --verbose

# 重启 MCP 服务器
hermes mcp restart filesystem

MCP Tools 实战详解

配置好 MCP 服务器后,你的 Agent 就获得了新的工具能力。本节通过详细的实战案例,展示每个 MCP 服务器的具体用法。

📁 文件系统 MCP 实战

让 Agent 可以读写指定目录下的文件,是最基础也最常用的 MCP 服务器:

对话实战
# 读取文件
> 读取 /workspace/src/main.py 的内容

# Agent 调用: read_file("/workspace/src/main.py")
# 返回: 文件完整内容

# 写入文件
> 在 /workspace/src/ 下创建 utils.py,包含以下函数:
> - format_date(date): 格式化日期
> - validate_email(email): 验证邮箱格式

# Agent 调用: write_file("/workspace/src/utils.py", content)

# 搜索文件
> 搜索项目中所有包含 "import" 的 Python 文件

# Agent 调用: search_files("import", "*.py")

# 列出目录
> 列出 /workspace/src/ 下的所有文件和子目录

# Agent 调用: list_directory("/workspace/src/")
⚠️ 安全提示: 文件系统 MCP 默认只能访问配置时指定的目录。不要将根目录 /C:\ 设为允许路径,这会带来安全风险。

🐙 GitHub MCP 实战

让 Agent 可以操作 GitHub 仓库,实现代码管理的自动化:

对话实战
# 查看仓库信息
> 查看 owner/repo 的最新提交和分支

# Agent 调用: get_commits("owner/repo")
# Agent 调用: list_branches("owner/repo")

# 管理 Issue
> 在 owner/repo 创建一个 Bug 报告 Issue:
> 标题: 登录页面在移动端布局错乱
> 标签: bug, mobile
> 描述: 在 iPhone SE 上测试发现...

# Agent 调用: create_issue("owner/repo", {...})

# 创建 Pull Request
> 基于 feature/auth 分支创建 PR 到 main
> 标题: feat: 添加 JWT 认证
> 描述: 实现了用户登录、Token 刷新、登出功能

# Agent 调用: create_pull_request("owner/repo", {...})

# 搜索代码
> 在 GitHub 上搜索使用 FastAPI 的项目

# Agent 调用: search_code("FastAPI language:python")

🗄️ 数据库 MCP 实战

让 Agent 可以查询和分析数据库:

对话实战
# PostgreSQL 实战
> 查看数据库中有哪些表

# Agent 调用: query("SELECT table_name FROM information_schema.tables")

> 查询 users 表中最近注册的 10 个用户

# Agent 调用: query("SELECT * FROM users ORDER BY created_at DESC LIMIT 10")

> 分析 orders 表的月度销售趋势

# Agent 会:
# 1. 查看表结构 → query("SELECT column_name, data_type FROM ...")
# 2. 执行分析查询 → query("SELECT DATE_TRUNC('month', created_at), SUM(amount) ...")
# 3. 生成可视化建议

# SQLite 实战
> 创建一个 SQLite 数据库并导入 CSV 数据

# Agent 会:
# 1. 创建表 → query("CREATE TABLE ...")
# 2. 导入数据 → 读取 CSV + INSERT 语句
# 3. 验证数据 → query("SELECT COUNT(*) FROM ...")
🔒 数据安全: PostgreSQL MCP 默认是只读模式。如需写入,需在启动参数中显式启用写权限,并严格限制可写入的表。

🌐 Puppeteer MCP 实战

让 Agent 可以控制浏览器进行自动化操作:

对话实战
# 网页截图
> 打开 https://example.com 并截图

# Agent 调用: puppeteer_navigate("https://example.com")
# Agent 调用: puppeteer_screenshot()

# 表单填写
> 打开登录页面,填写用户名 admin 和密码 123456,点击登录

# Agent 调用: puppeteer_navigate("https://example.com/login")
# Agent 调用: puppeteer_fill("#username", "admin")
# Agent 调用: puppeteer_fill("#password", "123456")
# Agent 调用: puppeteer_click("#login-btn")

# 数据抓取
> 访问 Hacker News 首页,提取前 10 条新闻标题和链接

# Agent 会:
# 1. 导航到页面
# 2. 提取 DOM 元素
# 3. 整理为结构化数据

# 网页测试
> 测试我的本地应用 http://localhost:3000 的响应式布局

# Agent 会:
# 1. 设置不同视口尺寸
# 2. 逐一截图
# 3. 分析布局问题

🔍 Brave Search MCP 实战

让 Agent 可以搜索互联网获取实时信息:

对话实战
# 搜索最新信息
> 搜索 2025 年 Python 的最新版本和新特性

# Agent 调用: brave_search("Python 2025 new features")

# 技术问题搜索
> 搜索 FastAPI 中如何实现 WebSocket

# Agent 调用: brave_search("FastAPI WebSocket implementation")

# 新闻搜索
> 搜索 AI Agent 领域的最新进展

# Agent 调用: brave_search("AI Agent latest news 2025")

# 代码搜索
> 搜索 MCP SDK TypeScript 示例代码

# Agent 调用: brave_search("MCP SDK TypeScript example code")

🧠 Memory MCP 实战

让 Agent 拥有持久化的知识图谱记忆,跨会话保持信息:

对话实战
# 存储知识
> 记住:我的项目使用 Next.js 15 + TypeScript + Prisma 技术栈

# Agent 调用: create_entities([{name: "用户项目", type: "project", 
#   observations: ["Next.js 15", "TypeScript", "Prisma"]}])

# 查询知识
> 我之前说过用什么技术栈?

# Agent 调用: search_nodes("技术栈")
# 返回: Next.js 15 + TypeScript + Prisma

# 建立关系
> 记住:前端和后端通过 REST API 通信

# Agent 调用: create_relation({from: "前端", to: "后端", relation: "communicates_via", detail: "REST API"})

# 查看完整知识图谱
> 展示我所有的项目知识

# Agent 调用: read_graph()

Skills 深度配置

Skills 是可插拔的能力模块,为 Worker 添加专业化技能。本节深入讲解 Skills 的安装、绑定、参数配置和冲突解决。

Skills 生命周期管理

bash
# 搜索可用技能
openclaw skills search code-review
openclaw skills search --category testing

# 安装技能
openclaw skills install code-review
openclaw skills install data-analysis
openclaw skills install web-scraper
openclaw skills install api-testing
openclaw skills install security-audit

# 安装指定版本
openclaw skills install code-review@2.1.0

# 查看已安装技能
openclaw skills list
openclaw skills list --verbose  # 详细信息

# 更新技能
openclaw skills update code-review
openclaw skills update --all    # 更新全部

# 卸载技能
openclaw skills uninstall web-scraper

# 查看技能详情
openclaw skills info code-review

为 Worker 精细绑定 Skills

json
// ~/.openclaw/agents/agents.json - Skills 绑定配置
{
  "agents": {
    "list": [
      {
        "id": "coder",
        "name": "代码工程师",
        "skills": [
          {
            "name": "code-generation",
            "priority": 1,
            "config": {
              "language": "typescript",
              "framework": "nextjs",
              "style": "functional"
            }
          },
          {
            "name": "code-review",
            "priority": 2,
            "config": {
              "severity": "strict",
              "check_security": true,
              "check_performance": true,
              "max_file_lines": 500
            }
          },
          {
            "name": "debugging",
            "priority": 3,
            "config": {
              "auto_fix": false,
              "max_iterations": 5
            }
          }
        ]
      },
      {
        "id": "analyst",
        "name": "数据分析师",
        "skills": [
          {
            "name": "data-analysis",
            "priority": 1,
            "config": {
              "default_format": "markdown",
              "include_visualization": true,
              "statistical_tests": true
            }
          },
          {
            "name": "sql-query",
            "priority": 2,
            "config": {
              "dialect": "postgresql",
              "max_rows": 1000,
              "read_only": true
            }
          }
        ]
      }
    ]
  }
}

Skills 冲突解决

当多个 Skills 提供相似功能时,需要配置优先级和冲突策略:

json
// ~/.openclaw/config.json - Skills 冲突配置
{
  "skills": {
    "conflict_resolution": "priority",
    "default_priority": 10,
    "overrides": {
      "code-review": {
        "priority": 1,
        "exclusive": false
      },
      "security-audit": {
        "priority": 0,
        "exclusive": true
      }
    },
    "compatibility": {
      "code-review+security-audit": "sequential",
      "code-generation+testing": "parallel"
    }
  }
}

Hermes 端 Skills 管理

bash
# Hermes 查看所有 Worker 的技能
hermes skills list --all-workers

# 查看特定 Worker 的技能
hermes skills list --worker coder

# 为 Worker 动态添加技能
hermes skills assign coder api-testing

# 移除 Worker 的技能
hermes skills unassign coder web-scraper

# 查看技能使用统计
hermes skills stats
💡 提示: 更多 Skills 资源请查看 Skill 资源页,包含 55+ 热门技能的分类索引和安装命令。

上下文共享与记忆

在多 Agent 协作中,上下文共享是关键挑战。本节讲解如何在 Worker 之间共享信息,以及如何管理跨 Worker 的记忆。

上下文共享模式

模式说明适用场景配置
shared_workspace 通过共享文件系统传递上下文,Worker 读写同一目录 代码开发、文件协作 volume mount
message_passing 通过消息队列传递上下文,Worker 发布/订阅消息 事件驱动、异步协作 Redis Pub/Sub
shared_memory 通过 MCP Memory 服务器共享知识图谱 知识积累、长期记忆 MCP Memory Server
hermes_relay Hermes 作为中继,将一个 Worker 的输出转发给另一个 流水线式协作 result_aggregation

共享工作区配置

yaml
# ~/.hermes/config.yaml - 上下文共享
context_sharing:
  enabled: true
  
  workspace:
    path: /workspace
    shared_with: [coder, analyst, operator]
    file_permissions: rw
    auto_sync: true
    
  memory:
    type: mcp-memory
    shared_entities: true
    namespace: "project-alpha"
    
  message_bus:
    type: redis
    channels:
      - "hermes:task:results"
      - "hermes:worker:status"
      - "hermes:context:updates"
      
  context_injection:
    mode: auto
    max_injected_tokens: 4000
    include:
      - project_structure
      - recent_changes
      - active_branch
      - dependencies

跨 Worker 记忆管理

bash
# 查看共享记忆
hermes memory list --shared

# 添加共享知识
hermes memory add "项目使用 Next.js 15 + TypeScript" --scope shared

# 查看特定 Worker 的记忆
hermes memory list --worker coder

# 清除过期记忆
hermes memory cleanup --older-than 7d

# 导出记忆
hermes memory export --format json > project-memory.json

# 导入记忆
hermes memory import project-memory.json

协作工作流实战

让我们通过两个完整的实战案例,深入体验 Hermes 主脑 + 多 OpenClaw 打手的协作流程。

实战一:全栈项目开发

用户请求:「帮我开发一个用户管理系统的后端 API」

1

Hermes 理解意图并拆解任务

Hermes 输出
📋 意图分析: 全栈 Web 应用开发 - 用户管理系统后端

🔍 任务拆解:
├── 子任务1: 设计数据库模型(用户表、角色表、权限表)
│   → Worker: analyst (数据分析师)
│   → 依赖: 无
│   → 预计: 30s
│
├── 子任务2: 编写 API 路由代码(注册/登录/CRUD/权限)
│   → Worker: coder (代码工程师)
│   → 依赖: 子任务1
│   → 预计: 60s
│
├── 子任务3: 编写单元测试和集成测试
│   → Worker: coder (代码工程师,测试技能)
│   → 依赖: 子任务2
│   → 预计: 45s
│
├── 子任务4: 代码审查和安全审计
│   → Worker: reviewer (审查专家)
│   → 依赖: 子任务2
│   → 预计: 40s
│
└── 子任务5: 生成 API 文档和部署配置
    → Worker: operator (运维工程师)
    → 依赖: 子任务3, 子任务4
    → 预计: 30s

📊 执行计划: 子任务1 → 子任务2 → [子任务3, 子任务4 并行] → 子任务5
2

Worker 执行子任务1:数据库设计

Worker: analyst 输出
📊 数据库设计方案

-- 用户表
CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    role_id UUID REFERENCES roles(id),
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW()
);

-- 角色表
CREATE TABLE roles (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name VARCHAR(50) UNIQUE NOT NULL,
    description TEXT
);

-- 权限表
CREATE TABLE permissions (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name VARCHAR(100) UNIQUE NOT NULL,
    resource VARCHAR(50) NOT NULL,
    action VARCHAR(20) NOT NULL
);

-- 角色-权限关联表
CREATE TABLE role_permissions (
    role_id UUID REFERENCES roles(id),
    permission_id UUID REFERENCES permissions(id),
    PRIMARY KEY (role_id, permission_id)
);

✅ 设计完成,已写入 /workspace/db/schema.sql
3

Worker 执行子任务2:API 代码开发

Worker: coder 输出
💻 API 路由代码开发

基于数据库设计方案,已创建以下文件:

/workspace/src/
├── routes/
│   ├── auth.ts      # 注册/登录/登出
│   ├── users.ts     # 用户 CRUD
│   └── roles.ts     # 角色管理
├── middleware/
│   ├── auth.ts      # JWT 认证中间件
│   └── rbac.ts      # 权限检查中间件
├── models/
│   ├── User.ts
│   ├── Role.ts
│   └── Permission.ts
└── utils/
    ├── hash.ts      # 密码哈希
    └── token.ts     # JWT 工具

✅ 代码开发完成,共 12 个文件
4

并行执行:测试 + 审查

Worker: coder (测试) 输出
🧪 测试用例编写

/workspace/tests/
├── auth.test.ts        # 8 个测试用例
├── users.test.ts       # 12 个测试用例
├── roles.test.ts       # 6 个测试用例
└── integration.test.ts # 4 个集成测试

运行结果: 28/30 通过 (2个需修复)
- ✅ 注册新用户
- ✅ 登录获取Token
- ✅ 获取用户列表(需管理员权限)
- ❌ 并发注册同一邮箱(竞态条件)
- ❌ Token过期后刷新(时间依赖)
Worker: reviewer (审查) 输出
🔍 代码审查报告

严重程度分布:
🔴 严重: 1 个
🟡 警告: 3 个
🟢 建议: 5 个

🔴 严重问题:
- auth.ts:23 - 密码比较使用 timing-safe 比较
  当前: bcrypt.compare() ✅ (已正确使用)
  ⚠️ 发现: token.ts:15 - JWT secret 硬编码
  建议: 使用环境变量 process.env.JWT_SECRET

🟡 警告:
- users.ts:45 - 缺少分页参数校验
- roles.ts:30 - 删除角色前未检查关联用户
- middleware/rbac.ts:12 - 权限缓存未设置过期时间
5

Hermes 聚合结果

Hermes 最终输出
✅ 用户管理系统后端 API 开发完成!

📦 交付物:
├── 数据库设计: /workspace/db/schema.sql
├── API 代码: /workspace/src/ (12个文件)
├── 测试用例: /workspace/tests/ (30个用例, 28通过)
├── API 文档: /workspace/docs/api.md
└── 部署配置: /workspace/docker-compose.yml

⚠️ 待修复:
1. [严重] JWT Secret 硬编码 → 改用环境变量
2. [警告] 并发注册竞态条件 → 添加数据库唯一约束
3. [警告] Token刷新时间依赖 → 使用mock时间

💡 建议: 修复以上3个问题后即可部署到测试环境

实战二:数据分析报告

用户请求:「分析我们电商平台的用户行为数据,生成月度报告」

1

Hermes 拆解任务

Hermes 输出
📋 意图分析: 数据分析 + 报告生成

🔍 任务拆解:
├── 子任务1: 连接数据库,提取用户行为数据
│   → Worker: analyst (数据分析师) + PostgreSQL MCP
│
├── 子任务2: 数据清洗和统计分析
│   → Worker: analyst (数据分析师) + Python 执行
│
├── 子任务3: 生成可视化图表
│   → Worker: analyst (数据分析师) + Python matplotlib
│
└── 子任务4: 生成 Markdown 报告文档
    → Worker: operator (运维工程师) + 文件写入
2

Worker 执行全流程

Worker: analyst 输出
📊 数据分析报告 - 2025年4月

1. 数据提取
   - 用户总量: 125,847 (+12.3% vs 上月)
   - 活跃用户: 45,231 (DAU/MAU = 35.9%)
   - 新增用户: 15,432

2. 行为分析
   - 平均会话时长: 8分32秒
   - 跳出率: 34.2% (-2.1% vs 上月)
   - 转化率: 4.8% (+0.3% vs 上月)

3. 关键发现
   - 移动端用户占比 67%,但转化率低于桌面端 1.2%
   - 搜索功能使用率上升 23%
   - 周末流量是工作日的 1.8 倍

4. 建议
   - 优化移动端结账流程
   - 加强搜索结果相关性
   - 周末增加促销活动

📈 图表已生成: /workspace/reports/charts/
📝 报告已保存: /workspace/reports/monthly-2025-04.md

调试与监控

在多 Agent 协作系统中,调试和监控至关重要。本节讲解如何追踪任务执行、诊断问题、监控性能。

日志系统

bash
# Hermes 日志
hermes logs --tail 50
hermes logs --level debug
hermes logs --worker coder
hermes logs --since "2025-01-01"

# OpenClaw 日志
openclaw logs --tail 50
openclaw logs --level debug
openclaw logs --agent coder

# Docker 日志
docker compose logs -f hermes
docker compose logs -f worker-coder --since 1h

# MCP 通信日志
hermes mcp logs --verbose
hermes mcp logs --server github

任务追踪

bash
# 查看当前任务状态
hermes tasks list
hermes tasks list --status running
hermes tasks list --worker coder

# 查看任务详情
hermes tasks show task-abc123

# 查看任务执行时间线
hermes tasks timeline task-abc123

# 取消正在执行的任务
hermes tasks cancel task-abc123

# 查看历史任务统计
hermes tasks stats --last 7d

Worker 状态监控

bash
# 查看所有 Worker 状态
openclaw gateway status --all

# 输出示例:
# WORKER     STATUS    PORT    MODEL               QUEUE  UPTIME
# coder      healthy   18789   claude-sonnet-4      2/10   3d 12h
# analyst    healthy   18790   gpt-5.1              0/10   3d 12h
# operator   healthy   18791   gemini-2.5-flash     1/10   3d 12h
# reviewer   warning   18792   claude-opus-4        5/10   3d 12h

# 查看特定 Worker 详情
openclaw gateway status --worker coder --verbose

# 检查 Worker 健康状态
curl http://localhost:18789/health
curl http://localhost:18790/health

性能监控

bash
# API 调用统计
hermes stats api --last 24h

# Token 使用统计
hermes stats tokens --last 7d

# Worker 性能指标
hermes stats workers --last 24h

# 输出示例:
# WORKER     REQUESTS  AVG_TIME  SUCCESS_RATE  TOKENS_USED
# coder      156       12.3s     98.7%         1.2M
# analyst    89        8.7s      99.1%         0.8M
# operator   234       3.2s      99.5%         0.3M
# reviewer   45        15.6s     97.8%         0.9M

常见问题诊断

❌ Worker 无响应

排查步骤
# 1. 检查进程是否存活
ps aux | grep openclaw

# 2. 检查端口是否监听
lsof -i :18789

# 3. 检查健康端点
curl http://localhost:18789/health

# 4. 查看错误日志
openclaw logs --agent coder --level error --tail 20

# 5. 重启 Worker
OPENCLAW_AGENT=coder openclaw gateway restart --port 18789

❌ MCP 服务器连接失败

排查步骤
# 1. 测试 MCP 服务器
hermes mcp test filesystem

# 2. 检查 npx 是否可用
npx --version

# 3. 手动启动 MCP 服务器测试
npx -y @modelcontextprotocol/server-filesystem /tmp

# 4. 检查环境变量
hermes config check

# 5. 查看 MCP 详细日志
hermes mcp logs --verbose --server filesystem

⚠️ 任务执行超时

yaml
# 调整超时配置
# ~/.hermes/config.yaml
orchestration:
  task_decomposition:
    timeout_per_task: 300  # 增加到5分钟
    
  execution:
    timeout_graceful: true  # 优雅超时,不强制中断

最佳实践

🎯 Worker 专业化原则

每个 Worker 应该有明确的职责边界,避免一个 Worker 做所有事情:

原则说明反例
单一职责每个 Worker 只负责一类任务一个 Worker 既写代码又做运维
技能精简只安装必要的 Skills给所有 Worker 安装所有技能
模型匹配根据任务复杂度选择模型简单任务用 Opus,浪费成本
权限最小只授予必要的工具权限给分析师写文件的权限

⚡ 模型选择策略

不同 Worker 使用不同模型,优化成本和速度:

Worker 类型推荐主模型推荐备模型原因
代码工程师Claude Sonnet 4GPT-5.1编程能力最强,性价比高
数据分析师GPT-5.1Claude Sonnet 4数据分析能力强
运维工程师Gemini FlashClaude Sonnet 4简单任务,速度优先
审查专家Claude Opus 4Claude Sonnet 4需要深度推理

🔒 安全最佳实践

  • API Key 隔离: 不同 Worker 使用不同的 API Key,便于追踪和限制
  • 权限最小化: 每个 Worker 只授予完成任务所需的最小权限
  • 审计日志: 开启所有 Worker 的操作日志,定期审计
  • 网络隔离: 使用 Docker 网络隔离 Worker,限制外部访问
  • 密钥轮换: 定期轮换 API Key 和 MCP 认证令牌

📊 监控与告警

建立完善的监控体系,及时发现和解决问题:

yaml
# ~/.hermes/config.yaml - 监控配置
monitoring:
  enabled: true
  
  metrics:
    - name: request_latency
      threshold: 30s
      action: alert
    
    - name: error_rate
      threshold: 5%
      action: alert
      
    - name: token_usage
      threshold: 1000000
      period: daily
      action: notify
      
    - name: worker_health
      interval: 30s
      action: auto_restart
      
  alerts:
    channels:
      - type: webhook
        url: https://hooks.slack.com/services/xxx
      - type: email
        to: admin@example.com

🔄 版本管理

bash
# 定期更新
hermes update
openclaw update

# 更新 MCP 服务器
npm update -g @modelcontextprotocol/server-filesystem

# 更新 Skills
openclaw skills update --all

# 备份配置
cp -r ~/.hermes ~/.hermes.backup.$(date +%Y%m%d)
cp -r ~/.openclaw ~/.openclaw.backup.$(date +%Y%m%d)