⚡ 中级进阶教程
深入掌握 Hermes 主脑调度策略、多 Worker 编排、MCP 深度实战、Skills 精细配置,构建真正的多 Agent 协作系统
课程概述
本教程将带你从单 Agent 使用升级到多 Agent 协作。你将学会如何让 Hermes 作为中央大脑,调度多个专业化 OpenClaw Worker,通过 MCP 协议通信,配合 Skills 扩展,构建高效的 AI Agent 团队。
调度策略深度
adaptive / round-robin / least-loaded 三种策略的原理、配置和适用场景
多 Worker 编排
专业化分工、模型分配、Docker 容器化、健康检查、自动恢复
MCP 深度实战
多服务器配置、传输方式选择、环境变量管理、调试排错
Skills 精细配置
技能安装、绑定、冲突解决、自定义参数、性能调优
Hermes 主脑调度深度
Hermes 作为主脑,核心能力在于理解意图、拆解任务、智能分发、结果聚合。深入理解调度策略,是构建高效协作系统的关键。
调度流程详解
当用户发送一个请求时,Hermes 的处理流程如下:
完整调度配置
# ~/.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.6load_weight: 0.3history_weight: 0.1 |
大多数场景(推荐) | ✅ 效果最好 ❌ 调度开销略大 |
round-robin |
按顺序轮流分配任务给各 Worker,确保负载均匀 | sticky_session: falseskip_unhealthy: true |
同质化 Worker、负载均衡 | ✅ 简单公平 ❌ 不考虑能力差异 |
least-loaded |
实时监控 Worker 负载,分配给当前最空闲的 Worker | load_metric: queue_depthcooldown: 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: 3consensus_threshold: 0.6 |
cascade |
前一个 Worker 的输出作为后一个的输入,链式处理 | 代码→测试→部署流水线 | stop_on_error: true |
多 Worker 编排实战
部署多个 OpenClaw Worker,每个 Worker 专业化分工,形成高效的执行团队。本节将详细讲解如何设计、配置和管理多 Worker 系统。
Worker 专业化设计原则
完整 Worker 配置
// ~/.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
# 方式一:逐个启动(适合调试)
# 启动代码工程师 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 健康检查与自动恢复
# ~/.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
模型回退机制详解
当主模型不可用时,自动切换到备用模型,确保服务不中断:
"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 间通信与协作
# ~/.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 完整配置
# 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:
环境变量管理
# .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.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_file、search_web、execute_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 服务器完整配置
# ~/.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 配置
// ~/.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 等敏感信息,使用环境变量引用而非硬编码:
# ~/.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 服务器调试
# 列出所有已配置的 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/")
/ 或 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 ...")
🌐 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 生命周期管理
# 搜索可用技能
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
// ~/.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 提供相似功能时,需要配置优先级和冲突策略:
// ~/.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 管理
# 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
协作工作流实战
让我们通过两个完整的实战案例,深入体验 Hermes 主脑 + 多 OpenClaw 打手的协作流程。
实战一:全栈项目开发
用户请求:「帮我开发一个用户管理系统的后端 API」
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
Worker 执行子任务1:数据库设计
📊 数据库设计方案
-- 用户表
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
Worker 执行子任务2:API 代码开发
💻 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 个文件
并行执行:测试 + 审查
🧪 测试用例编写
/workspace/tests/
├── auth.test.ts # 8 个测试用例
├── users.test.ts # 12 个测试用例
├── roles.test.ts # 6 个测试用例
└── integration.test.ts # 4 个集成测试
运行结果: 28/30 通过 (2个需修复)
- ✅ 注册新用户
- ✅ 登录获取Token
- ✅ 获取用户列表(需管理员权限)
- ❌ 并发注册同一邮箱(竞态条件)
- ❌ Token过期后刷新(时间依赖)
🔍 代码审查报告
严重程度分布:
🔴 严重: 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 - 权限缓存未设置过期时间
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个问题后即可部署到测试环境
实战二:数据分析报告
用户请求:「分析我们电商平台的用户行为数据,生成月度报告」
Hermes 拆解任务
📋 意图分析: 数据分析 + 报告生成
🔍 任务拆解:
├── 子任务1: 连接数据库,提取用户行为数据
│ → Worker: analyst (数据分析师) + PostgreSQL MCP
│
├── 子任务2: 数据清洗和统计分析
│ → Worker: analyst (数据分析师) + Python 执行
│
├── 子任务3: 生成可视化图表
│ → Worker: analyst (数据分析师) + Python matplotlib
│
└── 子任务4: 生成 Markdown 报告文档
→ Worker: operator (运维工程师) + 文件写入
Worker 执行全流程
📊 数据分析报告 - 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 协作系统中,调试和监控至关重要。本节讲解如何追踪任务执行、诊断问题、监控性能。
日志系统
# 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
任务追踪
# 查看当前任务状态
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 状态监控
# 查看所有 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
性能监控
# 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
⚠️ 任务执行超时
# 调整超时配置
# ~/.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 4 | GPT-5.1 | 编程能力最强,性价比高 |
| 数据分析师 | GPT-5.1 | Claude Sonnet 4 | 数据分析能力强 |
| 运维工程师 | Gemini Flash | Claude Sonnet 4 | 简单任务,速度优先 |
| 审查专家 | Claude Opus 4 | Claude Sonnet 4 | 需要深度推理 |
🔒 安全最佳实践
- API Key 隔离: 不同 Worker 使用不同的 API Key,便于追踪和限制
- 权限最小化: 每个 Worker 只授予完成任务所需的最小权限
- 审计日志: 开启所有 Worker 的操作日志,定期审计
- 网络隔离: 使用 Docker 网络隔离 Worker,限制外部访问
- 密钥轮换: 定期轮换 API Key 和 MCP 认证令牌
📊 监控与告警
建立完善的监控体系,及时发现和解决问题:
# ~/.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
🔄 版本管理
# 定期更新
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)