首页 教程 分类 Skills下载 关于
ZH EN JA KO
技能插件

OpenClaw Skill调试与性能优化技巧

· 15 分钟

前言

调试和优化是 Skill 开发中不可避免的环节。一个行为异常的 Skill 会导致回复不准确,一个低效的 Skill 则会浪费大量 Token。本教程系统介绍 OpenClaw Skill 的调试工具和性能优化策略。

调试模式

开启全局调试

OpenClaw 提供多个日志输出级别:

# 默认日志级别(info)
openclaw logs

# Debug 级别(显示 Skill 匹配和执行详情)
openclaw logs --level debug

# Verbose 级别(包含 MCP 通信数据)
openclaw logs --level verbose

在配置中设置日志级别

也可以在 ~/.config/openclaw/openclaw.json5 中持久化设置:

{
  logging: {
    level: "debug",        // info, debug, verbose
    // 日志输出位置
    file: "~/.openclaw/logs/openclaw.log",
    // 日志文件最大大小
    maxSize: "10MB",
    // 保留日志文件数
    maxFiles: 5,
    // 是否输出到控制台
    console: true
  }
}

解读调试日志

开启 debug 级别后,你会看到以下关键日志条目:

[DEBUG] === Message Processing Start ===
[DEBUG] Input: "北京天气怎么样"
[DEBUG] Channel: telegram, User: user_12345

[DEBUG] --- Skill Matching Phase ---
[DEBUG] Checking skill: weather (triggers: 天气,weather,气温)
[DEBUG]   ✓ Trigger matched: "天气" found in message
[DEBUG] Checking skill: reminder (triggers: 提醒,remind,闹钟)
[DEBUG]   ✗ No trigger match
[DEBUG] Checking skill: translator (triggers: 翻译,translate)
[DEBUG]   ✗ No trigger match

[DEBUG] --- Skill Execution Phase ---
[DEBUG] Active skill: weather
[DEBUG] MCP tools available: [http_fetch]
[DEBUG] Sending to model with skill context...

[DEBUG] --- MCP Tool Calls ---
[DEBUG] Tool call: http_fetch.http_get({url: "https://api.openweathermap.org/..."})
[DEBUG] Tool result: 200 OK, 1.2KB response
[DEBUG] Total tool calls: 1

[DEBUG] --- Response Generation ---
[DEBUG] Model response tokens: 245
[DEBUG] Total latency: 2340ms
[DEBUG] === Message Processing End ===

隔离测试Skill

通过Gateway API测试

直接通过 Gateway API 发送测试消息,绕过聊天频道:

# 测试指定 Skill
curl -X POST http://localhost:18789/api/chat \
  -H "Content-Type: application/json" \
  -d '{
    "message": "北京天气怎么样",
    "options": {
      "skill": "weather",
      "debug": true
    }
  }'

开启 debug: true 后,响应会包含调试信息:

{
  "response": "🌤️ 北京天气...",
  "debug": {
    "skillMatched": "weather",
    "triggerWord": "天气",
    "mcpCalls": [
      {
        "server": "http-fetch",
        "tool": "http_get",
        "latency": 890,
        "status": "success"
      }
    ],
    "modelTokens": {
      "input": 1250,
      "output": 245
    },
    "totalLatency": 2340
  }
}

禁用其他Skill进行隔离测试

测试某个 Skill 时,可以临时禁用其他 Skill 以排除干扰:

{
  skills: {
    // 只启用你正在测试的 Skill
    enabled: ["weather"],
    // 或者禁用所有其他 Skill
    // disabled: ["reminder", "translator", "rss-reader"]
  }
}

修改后重启:

openclaw restart

测试完成后记得恢复配置。

用测试消息批量验证

创建一个测试脚本来批量验证 Skill 行为:

#!/bin/bash
# test-weather-skill.sh

GATEWAY="http://localhost:18789/api/chat"

test_cases=(
  "北京天气怎么样"
  "上海明天会下雨吗"
  "weather in Tokyo"
  "深圳这周气温多少"
  "要不要带伞"
)

for msg in "${test_cases[@]}"; do
  echo "=== Testing: $msg ==="
  curl -s -X POST "$GATEWAY" \
    -H "Content-Type: application/json" \
    -d "{\"message\": \"$msg\", \"options\": {\"debug\": true}}" \
    | python3 -m json.tool
  echo ""
done

常见调试场景

场景一:Skill没有被触发

症状:包含触发词的消息没有激活 Skill。

排查步骤:

# 1. 确认 Skill 已加载
openclaw skill list

# 2. 查看匹配日志
openclaw logs --level debug

常见原因:

原因 解决方案
文件名不正确 必须以 .SKILL.md 结尾
SKILL.md 语法错误 检查 YAML 前置数据格式
触发词不匹配 添加更多触发词变体
Skill 被禁用 检查配置中的 disabled 列表
其他 Skill 优先匹配 调整 Skill 优先级

场景二:MCP工具调用失败

症状:Skill 被触发,但 MCP 工具返回错误。

# 查看详细的 MCP 通信日志
openclaw logs --level verbose

常见错误及解决方法:

[ERROR] MCP tool error: ECONNREFUSED
→ MCP Server 未运行或端口配置错误

[ERROR] MCP tool error: TIMEOUT
→ 工具调用超时——增加超时配置

[ERROR] MCP tool error: PERMISSION_DENIED
→ 文件系统 MCP 缺少读写权限

[ERROR] MCP tool error: INVALID_PARAMS
→ AI 传递了错误的参数格式

场景三:回复内容不符合预期

症状:Skill 被触发且工具调用成功,但输出格式或内容不对。

排查思路:

  1. 检查 SKILL.md 中的 Output Format 描述是否足够清晰
  2. 查看发送给 AI 模型的完整 prompt(在 verbose 日志中可见)
  3. 尝试在 Output Format 部分添加更多示例
  4. 考虑降低 temperature 以获得更稳定的输出

性能指标监控

关键性能指标

通过 Dashboard 或 API 监控以下指标:

# 打开 Dashboard
openclaw dashboard
指标 说明 健康范围
响应延迟 从收到消息到发出回复的时间 < 5 秒
MCP 调用延迟 单次 MCP 工具调用耗时 < 2 秒
输入 Token 数 每次请求的输入 Token 数 视场景而定
输出 Token 数 每次回复的输出 Token 数 < 500
Skill 匹配耗时 触发词匹配所需时间 < 10ms

通过API获取性能数据

curl http://localhost:18789/api/stats
{
  "uptime": "3d 14h 22m",
  "totalMessages": 1250,
  "avgLatency": 2100,
  "skillStats": {
    "weather": {
      "invocations": 89,
      "avgLatency": 2340,
      "avgInputTokens": 1250,
      "avgOutputTokens": 245,
      "errorRate": 0.02
    },
    "reminder": {
      "invocations": 156,
      "avgLatency": 1100,
      "avgInputTokens": 890,
      "avgOutputTokens": 120,
      "errorRate": 0.0
    }
  }
}

Token用量优化

Token 消耗直接影响 API 成本,以下是实用的优化技巧。

精简SKILL.md

SKILL.md 的内容会作为系统提示发送给模型,文件越大,每次请求的 Token 成本就越高。

优化前:

## Output Format

当用户查询天气时,你需要以一种美观且信息丰富的方式来呈现天气数据。
首先显示城市名称,然后显示当前的天气状况描述,接着显示温度信息
(包括当前温度和体感温度),再显示湿度和风速信息,
最后如果数据中有日出日落时间的话也一并显示出来。
请确保使用适当的emoji来让信息更加生动...

优化后:

## Output Format

🌤️ {城市} | {天气} 🌡️ {温度}°C(体感{体感}°C)| 💧{湿度}% | 💨{风速}m/s

减少不必要的上下文

{
  context: {
    // 缩小上下文窗口
    maxMessages: 20,   // 从默认的 50 减少
    // Skill 激活时是否携带完整上下文
    skillContext: "minimal"  // minimal 只保留最近 3 条消息
  }
}

选择合适的模型

不是所有场景都需要最强大的模型:

{
  channels: {
    telegram: {
      // 简单场景使用更小的模型
      model: {
        provider: "claude",
        name: "claude-haiku-4-20250514"   // 更快更便宜
      }
    }
  }
}

Skill加载顺序

当多个 Skill 的触发词有重叠时,加载顺序决定了优先级。

查看当前加载顺序

openclaw skill list --verbose
Skills (loaded in order):
  1. weather        (priority: 10, triggers: 天气,weather,气温)
  2. reminder       (priority: 10, triggers: 提醒,remind,闹钟)
  3. translator     (priority: 5,  triggers: 翻译,translate)
  4. rss-reader     (priority: 5,  triggers: 订阅,新闻,rss)

设置优先级

在 SKILL.md 的前置数据中设置:

---
name: weather
priority: 20    # 数值越大优先级越高
triggers:
  - 天气
---

或在全局配置中统一管理:

{
  skills: {
    priority: {
      "weather": 20,
      "reminder": 15,
      "translator": 10
    }
  }
}

性能优化检查清单

在 Skill 上线前,过一遍这个优化清单:

  • [ ] SKILL.md 文件大小是否合理(建议 < 3KB)?
  • [ ] 触发词是否精准(避免误触发)?
  • [ ] MCP 工具调用次数是否最小化(避免冗余调用)?
  • [ ] 上下文窗口大小是否合适?
  • [ ] 输出格式是否简洁?
  • [ ] 是否选择了适合场景的模型?
  • [ ] 错误处理是否完善(避免重试风暴)?
  • [ ] 优先级设置是否合理?

常用调试命令速查

# 查看所有 Skill 状态
openclaw skill list

# 查看实时日志
openclaw logs --level debug

# 系统健康检查
openclaw doctor

# 打开监控面板
openclaw dashboard

# 重启(加载新变更)
openclaw restart

# 通过 Gateway API 测试
curl http://localhost:18789/api/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "test", "options": {"debug": true}}'

# 检查 Gateway 状态
curl http://localhost:18789/health

总结

高效的调试和性能优化是打造高质量 Skill 的关键。掌握日志分析、隔离测试、Token 优化和加载顺序管理,你就能快速定位问题、优化成本,开发出一流的 OpenClaw Skill。

OpenClaw 是开源免费的个人AI助手,支持 WhatsApp、Telegram、Discord 等多平台接入