第 40 章

性能调优:Token 成本控制、Context 预算管理与并发 Lane 配置

第40章:性能调优:Token 成本控制、Context 预算管理与并发 Lane 配置

概述

OpenClaw 的运行成本与性能表现,在相当大程度上取决于三个可调变量:Token 消耗量(直接对应 API 费用)、Context 窗口管理(影响会话质量和 Compaction 频率)以及 Lane 并发配置(影响多任务吞吐能力)。本章从成本分析开始,系统讲解每一个可优化的环节,帮助你在成本、速度和质量之间找到最优均衡点。


40.1 Token 成本的来源分析

每一次 LLM API 调用产生的 Token 消耗,由以下几个部分构成:

输入 Token 的四个来源

完整输入 Token = System Prompt + Skills 注入 + 对话历史 + 工具结果

示例比例(典型长会话):
  System Prompt:    ~3,000 tokens  (18%)
  Skills 注入:      ~8,000 tokens  (48%)  ← 最大的可优化项
  对话历史:         ~4,000 tokens  (24%)
  工具结果:         ~1,600 tokens  (10%)
  总计:             ~16,600 tokens/次调用

System Prompt:OpenClaw 在每次调用时注入的核心指令,包括 Agent 角色定义、行为规范、安全约束等。这部分相对固定,约 1,500-4,000 tokens,优化空间有限。

Skills 注入:每个激活的 Skill 都会将其工具定义(Function Schema)注入到 System Prompt 中。如果启用了20个 Skill,每个 Skill 的 Schema 平均 400 tokens,则 Skills 注入高达 8,000 tokens——即使当前任务根本不需要其中的 18 个 Skill。

对话历史:完整的历史消息记录(含 Agent 回复、工具调用、工具结果),随会话进行线性增长,是 Compaction 机制重点处理的部分。

工具结果:上一轮工具调用返回的内容。大型工具结果(如长文件读取、网页抓取)可以快速消耗大量 Token。

输出 Token

输出 Token 通常占总成本的 10-30%,但在某些模型(如 o3-mini)上与输入 Token 价格相当,需要通过 maxTokens 参数适当限制。


40.2 Skills 懒加载:减少每次 Token 消耗

饿汉式加载(默认行为,不推荐)

{
  "skills": {
    "lazy": false,
    "enabled": ["web-search", "code-exec", "email", "calendar", "github", ...]
  }
}

在饿汉式模式下,所有启用的 Skills 的完整 Function Schema 在每次 API 调用时全部注入,即使当前对话完全不需要它们。20个 Skills × 400 tokens = 8,000 tokens 的固定开销。

懒加载模式(推荐)

{
  "skills": {
    "lazy": true,
    "alwaysInject": ["web-search"],  // 核心 Skill 始终注入
    "enabled": ["web-search", "code-exec", "email", "calendar", "github", ...]
  }
}

在懒加载模式下:

  1. 初始注入:仅注入所有 Skills 的元数据(名称+简短描述),每个约 50 tokens
  2. Agent 判断:Agent 根据用户请求判断需要哪些 Skills
  3. 按需加载:Agent 发出 skill_load 请求,Gateway 将目标 Skill 的完整 Schema 动态注入
  4. 缓存复用:一旦 Skill 被加载,在当前会话内持续可用

懒加载的 Token 节省效果

场景:用户询问"今天天气怎么样"
  饿汉式:注入全部 20 个 Skill,消耗 8,000 tokens(Skills部分)
  懒加载:注入 20 个 Skill 元数据(1,000t) + 按需加载 web-search(400t) = 1,400 tokens
  节省:6,600 tokens/次调用(约 83%)

场景:用户请求复杂的多 Skill 任务(使用8个Skill)
  饿汉式:8,000 tokens
  懒加载:1,000 + 8×400 = 4,200 tokens
  节省:3,800 tokens/次调用(约 48%)

40.3 command-dispatch:零推理成本调用

原理

command-dispatch 是一种特殊的快速路径(fast path),用于处理高度结构化、可预测的命令型请求,绕过 LLM 推理过程,直接路由到对应的 Skill 或内置处理器。

标准流程:
  用户输入 → LLM 推理(消耗 Token)→ Tool Call → 执行 → 返回

command-dispatch 流程:
  用户输入(符合命令格式)→ 规则匹配 → 直接执行 → 返回
  (无 LLM 推理,零 Token 消耗)

配置 command-dispatch 规则

{
  "commandDispatch": {
    "enabled": true,
    "rules": [
      {
        "pattern": "^/status$",
        "action": "gateway.status",
        "description": "显示Gateway状态"
      },
      {
        "pattern": "^/nodes$",
        "action": "nodes.list",
        "description": "列出所有 Node"
      },
      {
        "pattern": "^/run (.+)$",
        "action": "system.run",
        "captureGroup": 1,
        "node": "default-headless"
      },
      {
        "pattern": "^/snap$",
        "action": "camera.snap",
        "node": "default-ios"
      }
    ]
  }
}

适用场景

command-dispatch 适用于:

不适用于:


40.4 Compaction 阈值调优

Compaction 的工作原理

当对话历史 Token 数接近上下文窗口上限时,OpenClaw 触发 Compaction(上下文压缩):

Compaction 流程:
  1. 计算当前对话历史的总 Token 数
  2. 若超过 softThreshold(如 85%)→ 触发软压缩
     将旧消息摘要化(LLM 生成摘要,替换详细消息)
  3. 若超过 hardThreshold(如 95%)→ 触发强制压缩
     移除最旧的消息,只保留摘要
  4. reserveFloor 保留的 Token 空间用于 Agent 当前回复

关键参数说明

{
  "context": {
    "reserveFloor": 8000,        // 为 Agent 当前回复保留的最小 Token 空间
    "softThreshold": 0.85,       // 触发软压缩的上下文使用比例 (85%)
    "hardThreshold": 0.95,       // 触发强制压缩的上下文使用比例 (95%)
    "compactionModel": "anthropic/claude-haiku-3-5",  // 用于生成摘要的模型(可更便宜)
    "summaryMaxTokens": 2000     // 每次摘要的最大长度
  }
}

参数调优场景

场景一:长任务,减少 Compaction 中断

如果你的 Agent 经常在执行长任务时触发 Compaction(导致短暂延迟),可以:

{
  "context": {
    "softThreshold": 0.90,   // 提高软压缩阈值,减少压缩频率
    "reserveFloor": 4000,    // 若回复通常较短,减少预留空间
    "compactionModel": "anthropic/claude-haiku-3-5"  // 用便宜快速模型做摘要
  }
}

场景二:高精度对话,避免信息丢失

{
  "context": {
    "softThreshold": 0.75,   // 更早触发压缩,保留更多详细历史
    "summaryMaxTokens": 3000, // 生成更详细的摘要
    "reserveFloor": 12000     // 为可能的长回复预留更多空间
  }
}

场景三:成本敏感,最大化压缩

{
  "context": {
    "softThreshold": 0.70,
    "compactionModel": "openai/gpt-4.1-nano",  // 最便宜的摘要模型
    "summaryMaxTokens": 1000  // 精简摘要,节省 Token
  }
}

Compaction 频率监控

# 查看 Compaction 事件频率
grep "Compaction triggered" /var/log/openclaw/gateway.log | \
  awk '{print $1, $2}' | \
  cut -d: -f1-2 | \
  sort | uniq -c | sort -rn | head -10

# 若每小时 Compaction > 10 次,建议:
# 1. 减小 softThreshold(更早压缩)
# 2. 或切换到更大上下文窗口的模型

40.5 工具结果的 Pruning vs Compaction

这两种策略都用于控制 Context 大小,但适用场景不同:

Pruning(裁剪):针对单个大型工具结果

当单次工具调用返回超大内容时(如读取一个 200KB 的文件),直接 Compaction 效果有限。Pruning 策略直接对工具结果进行截断或摘要:

{
  "toolResultPruning": {
    "enabled": true,
    "maxResultTokens": 8000,    // 单个工具结果最大 Token 数
    "strategy": "truncate",     // "truncate" 或 "summarize"
    "preserveStructure": true   // 保留 JSON 结构,只截断值
  }
}

truncate 策略:直接截断超出部分,添加 [截断: 原始长度 52,847 tokens] 标注。

summarize 策略:调用快速模型对工具结果进行摘要,成本略高但信息保留更好。

对比选择

策略 适用场景 Token 节省 信息损失
Pruning (truncate) 文件读取、日志查看 低(通常只需前部分)
Pruning (summarize) 网页内容、长文档 低(摘要覆盖全文)
Compaction 长对话历史 低(保留关键信息)
二者结合 大型工具结果 + 长对话 最高 最低

40.6 Lane 并发调优

Lane 的概念

Lane 是 OpenClaw 的并发执行单元。每个活跃的工具调用或 Sub-Agent 占用一个 Lane。Lane 数量限制了同时进行的并行操作数。

全局 Lane (global):     主 Agent 可以并行调用多少个工具
Sub-Agent Lane:        每个 Sub-Agent 可以并行调用多少个工具

默认配置

{
  "lanes": {
    "global": 4,      // 主 Agent 最多同时 4 个并行工具调用
    "subAgent": 8     // Sub-Agent 最多同时 8 个并行工具调用
  }
}

为什么 Sub-Agent Lane 比 Global Lane 更大?

Sub-Agent 通常用于并行处理独立的子任务(如同时从多个 Node 采集数据、并行搜索多个关键词),需要更高的并发度。主 Agent 作为协调者,4个并行操作通常已足够。

调优策略

场景一:IO 密集型任务(大量网络请求/Node 调用)

{
  "lanes": {
    "global": 8,       // 提高全局并发(网络等待不占 CPU)
    "subAgent": 16
  }
}

场景二:计算密集型任务(大量 LLM 调用)

{
  "lanes": {
    "global": 2,       // 降低并发,避免 API 限流
    "subAgent": 4
  }
}

场景三:成本敏感场景(控制总并发数)

{
  "lanes": {
    "global": 2,
    "subAgent": 4,
    "maxTotalConcurrent": 6   // 全局总并发上限
  }
}

Lane 饱和的诊断

# 在日志中查找 Lane 等待事件
grep "lane_wait" /var/log/openclaw/gateway.log | wc -l

# 若等待事件频繁,说明 Lane 数不足
# 提高 global/subAgent 数值

# 若 API Rate Limit 错误频繁
grep "rate_limit" /var/log/openclaw/gateway.log | wc -l
# Rate Limit 多说明并发过高,应降低 Lane 数

40.7 Per-Provider 模型成本矩阵

选择合适的模型是最直接的成本控制手段。以下是主流模型的三维评估(速度/成本/质量):

成本对比表格(2026年4月参考价格)

模型 Provider 输入价格 ($/1M tokens) 输出价格 ($/1M tokens) 速度 质量评级 最佳场景
claude-opus-4-6 Anthropic $15.00 $75.00 S 复杂推理/写作
claude-sonnet-4-6 Anthropic $3.00 $15.00 A+ 日常主力(推荐)
claude-haiku-3-5 Anthropic $0.80 $4.00 B+ Compaction/摘要
gpt-5 OpenAI $10.00 $40.00 S 代码/多模态
gpt-4.1-mini OpenAI $0.40 $1.60 B+ 简单任务/分类
gpt-4.1-nano OpenAI $0.10 $0.40 极快 B 路由/分类/摘要
gemini-2.5-pro Google $3.50 $10.50 A+ 长文档(2M ctx)
gemini-2.5-flash Google $0.15 $0.60 极快 B+ 成本敏感任务
deepseek-r1 DeepSeek $0.55 $2.19 A 推理/数学
deepseek-v3 DeepSeek $0.27 $1.10 B+ 通用任务/高性价比
llama3.3-70b Ollama(本地) $0 $0 视硬件 B 隐私敏感/离线
qwen2.5-72b Ollama(本地) $0 $0 视硬件 B 中文任务/离线

成本计算示例

场景:每天 100 次会话,每次平均 20,000 tokens 输入 + 2,000 tokens 输出

使用 claude-opus-4-6:
  输入: 100 × 20,000 / 1M × $15.00 = $30.00/天
  输出: 100 × 2,000  / 1M × $75.00 =  $15.00/天
  日成本: $45.00  月成本: $1,350

使用 claude-sonnet-4-6:
  输入: $6.00/天  输出: $3.00/天
  日成本: $9.00  月成本: $270

使用 gpt-4.1-nano (简单任务):
  输入: $0.20/天  输出: $0.08/天
  日成本: $0.28  月成本: $8.40

结论: 通过合理选择模型,相同任务量成本可相差 160 倍

模型分层策略(推荐)

{
  "model": "anthropic/claude-sonnet-4-6",   // 主模型:复杂任务
  "fallbackModel": "openai/gpt-4.1-mini",   // 备用:限流时降级
  "context": {
    "compactionModel": "anthropic/claude-haiku-3-5"  // 摘要:使用便宜模型
  },
  "routing": {
    "simpleQueries": "openai/gpt-4.1-nano"  // 简单查询:最低成本
  }
}

40.8 API Key Rotation 平衡 Quota

Rotation 的必要性

每个 API Key 有独立的 RPM(Requests Per Minute)和 TPM(Tokens Per Minute)配额限制。单 Key 在高并发时容易触发 Rate Limit,导致请求延迟或失败。

配置多 Key Rotation

{
  "providers": {
    "anthropic": {
      "keys": [
        {
          "key": "${ANTHROPIC_KEY_1}",
          "weight": 2,
          "tier": "claude-sonnet-4-6"
        },
        {
          "key": "${ANTHROPIC_KEY_2}",
          "weight": 1,
          "tier": "claude-sonnet-4-6"
        },
        {
          "key": "${ANTHROPIC_KEY_3}",
          "weight": 1,
          "tier": "claude-haiku-3-5"
        }
      ],
      "rotation": "weighted-round-robin",
      "onRateLimit": "next-key",
      "cooldownMs": 60000
    }
  }
}

Rotation 策略说明

策略 说明 适用场景
round-robin 轮流使用,均匀分配 Keys 配额相近
weighted-round-robin 按权重分配(weight字段) Keys 配额不均等
least-used 优先使用使用量最少的 Key 精确配额平衡
on-error 只在当前 Key 报错时切换 减少切换开销

监控 Key 使用状态

# 查看各 Key 的使用统计
openclaw security audit --keys

# 输出:
# Key                  Requests  Tokens Used  Rate Limits  Status
# anthropic-key-1      1,234     18.4M        2            active
# anthropic-key-2        617      9.2M         0            active
# anthropic-key-3        301      1.8M         0            active (haiku only)

40.9 长会话性能退化的诊断与解决

性能退化的表现

随着会话进行,可能出现:

  1. 响应延迟增加:每次调用的延迟从 2s 增加到 8s+
  2. Compaction 频率升高:每小时 Compaction 次数超过 10 次
  3. 工具调用错误率升高:Agent 混淆不同工具的参数
  4. 上下文混淆:Agent 对早期对话内容理解出错

诊断工具

# 查看当前会话的 Token 使用趋势
openclaw gateway dashboard

# 输出示例:
# Session #4891 (3h 24m)
#   Total calls: 47
#   Avg tokens/call: 18,432 → 31,204 (↑69%)  ← 显著增长,需关注
#   Compactions: 8  (last: 12min ago)
#   Tool errors: 3  (6.4%)                    ← 超过5%警戒线

# 检查 Context 使用率
openclaw agent --session 4891 --context-stats
# Context window: 200,000 tokens
# Current usage: 156,000 (78%)
# Reserve floor: 8,000
# Available for reply: 36,000

解决策略

策略一:主动 Compact 当前会话

# 在 Control UI 聊天框中输入
/compact

# 或通过 CLI
openclaw agent --session 4891 --compact

# 立即触发压缩,将历史摘要化,释放上下文空间

策略二:调整 Compaction 阈值(永久)

{
  "context": {
    "softThreshold": 0.70,   // 更早触发,避免积累太多历史
    "reserveFloor": 6000
  }
}

策略三:切换到大上下文窗口模型

{
  "model": "google/gemini-2.5-pro"  // 2M tokens 上下文,极少需要 Compaction
}

策略四:长任务拆分为多个短会话

对于超过 4 小时的长任务,建议在阶段边界主动开启新会话,并在 memory/ 中记录阶段性成果,供下一会话继承。


40.10 综合优化效果评估

优化前后对比(典型生产场景)

指标 优化前 优化后 改善幅度
每次调用平均 Token 消耗 22,000 8,400 -62%
Skills 注入 Token 8,000 1,400 -83%
月 API 费用(100会话/天) $594 $226 -62%
平均响应延迟 4.2s 2.8s -33%
Compaction 频率(次/小时) 18 4 -78%
工具错误率 4.8% 1.2% -75%

优化检查清单

Token 成本优化:
  ☑ 启用 Skills 懒加载 (lazy: true)
  ☑ 配置 alwaysInject 只包含核心 Skills
  ☑ 启用工具结果 Pruning (maxResultTokens: 8000)
  ☑ Compaction 模型使用便宜快速模型 (haiku/nano)

Context 管理优化:
  ☑ softThreshold 根据任务类型调整 (0.75-0.90)
  ☑ reserveFloor 与实际回复长度匹配
  ☑ 长任务定期执行 /compact

并发优化:
  ☑ IO 密集型:提高 Lane 数 (global: 8)
  ☑ API 限流频繁:降低 Lane 数 (global: 2)
  ☑ 配置 API Key Rotation (2-3 Keys)

模型选型优化:
  ☑ 主力模型:claude-sonnet-4-6 或同级
  ☑ Compaction 摘要:haiku 或 nano 级
  ☑ 简单路由/分类:gpt-4.1-nano 或 gemini-flash

40.11 小结

Token 成本控制、Context 预算管理和并发 Lane 调优,是 OpenClaw 生产运营中三个最重要的性能杠杆。通过 Skills 懒加载,一般可节省 50-80% 的 Skills 注入 Token;合理的 Compaction 阈值可将压缩频率降低 3-5 倍;合适的模型分层策略可将整体 API 成本降低 40-70%。这三者叠加,使得在保持同等输出质量的前提下,将总成本降低 60% 以上成为可能。

至此,《OpenClaw 完全指南》的第36-40章已全部完成。这五章覆盖了从物理设备接入、边缘计算、控制界面、生产部署到性能调优的完整技术路径,为你在生产环境中运营 OpenClaw Agent 提供了系统性的技术参考。


本章完结 | 《OpenClaw 完全指南》第36-40章

本章评分
4.5  / 5  (3 评分)

💬 留言讨论