乐于分享
好东西不私藏

OpenClaw 性能优化:大模型响应速度提升技巧

OpenClaw 性能优化:大模型响应速度提升技巧

OpenClaw 性能优化:大模型响应速度提升技巧

AI 用久了越来越慢,回复要等十几秒,是模型的问题吗?不是。是你没配置 Compaction,没配 Failover,没开 Streaming。这篇文章告诉你从哪入手让你的 OpenClaw 响应快回来。


痛点:AI 越用越慢的元凶

你有没有这种感觉:新对话很快,用了一周后变慢,一个月后等半天才能开始回复?

这不是模型变差了,这是上下文膨胀在作怪。

每次对话,OpenClaw 会把历史消息都发给模型。对话越长,发送的数据越多,模型处理时间越长,费用也越高。到了上下文上限附近,模型甚至会开始拒绝请求或返回错误。

解决方案有四个:CompactionStreamingFailoverPruning。下面逐一讲。


Compaction:让对话永远有空间

Compaction 是 OpenClaw 的上下文压缩机制。它的原理很直观:

  1. 旧对话被压缩成一段摘要
  2. 摘要保存在会话记录中
  3. 最近的消息保持原样,继续参与对话

开启自动 Compaction:

{
  agents: {
    defaults: {
      compaction: {
        model: "openrouter/anthropic/claude-sonnet-4-6",
        // 用更强模型压缩效果更好
      },
    },
  },
}

你也可以手动触发压缩,并指定关注重点:

/compact Focus on API设计决策

这条命令会让 AI 在压缩时特别保留 API 设计相关的内容,忘记其他细节。

Compaction vs Pruning:别混淆

Compaction Pruning
做什么 总结旧对话为摘要 裁剪旧工具结果
是否保存 是(写入会话记录) 否(仅从内存删除)
范围 整个对话历史 仅工具输出
适用场景 对话太长 工具调用频繁,结果冗余

简单说:Compaction 是总结,Pruning 是修剪。日常使用 Compaction 就够了,工具调用密集的场景可以额外启用 Pruning。


Streaming:分段输出不只是为了炫技

Streaming 有两种模式:

Block Streaming(分块发送)

AI 写完一段就发送,不用等整条消息写完才显示。你在 Claude/ChatGPT 网页上看到的逐字输出就是这种。

{
  agents: {
    defaults: {
      blockStreamingDefault: "on",
      blockStreamingBreak: "text_end", // 写完一段就发
      blockStreamingChunk: {
        minChars: 200,  // 每段最少 200 字符
        maxChars: 500,  // 最多 500 字符
      },
      humanDelay: "natural", // 模拟真人输入节奏,800-2500ms 延迟
    },
  },
}

Preview Streaming(预览流)

实时预览消息,类似 Telegram/Discord 上的「对方正在输入」。消息在写作过程中就开始推送,旧内容会实时更新。

break 模式选择:

模式 行为
text_end 流式发送,每段结束就发(推荐)
message_end 等整条消息写完再发送

对于即时通讯场景,text_end 体验最好。如果你不希望用户看到中间过程,用 message_end


Model Failover:不怕模型宕机

你的 AI 依赖单个模型吗?如果那个模型的服务商挂了,你的助手就完全无响应了。

Failover 配置让你定义一个回退列表,当主模型不可用时自动切换:

{
  agents: {
    defaults: {
      model: {
        primary: "minimax/MiniMax-M2.7",
        fallbacks: [
          "openai/gpt-4o-mini",
          "google/gemini-2.0-flash",
        ],
      },
    },
  },
}

切换顺序是:主模型 → 第一个 fallback → 第二个 fallback

冷却机制:别频繁切换

当一个模型报错,OpenClaw 会按指数退避把它放进冷却:

  • 首次失败:1 分钟冷却
  • 第二次:5 分钟
  • 第三次:25 分钟
  • 上限:1 小时

如果是账单失败(余额不足),冷却时间更长,从 5 小时起步,最长 24 小时。

认证配置轮换

如果同一个模型服务商配了多个 API Key,可以配置认证轮换:

{
  auth: {
    profiles: [
      { name: "key1", provider: "openai", apiKey: "sk-xxx" },
      { name: "key2", provider: "openai", apiKey: "sk-yyy" },
    ],
    rotation: "sequential", // 或 "random"
  },
}

会话黏性:选中的认证配置会绑定在会话上,不会每个请求都换 Key,保证请求的一致性。


Session Pruning:轻量修剪工具输出

Pruning 比 Compaction 更轻量——它只裁剪工具调用的输出,不改变对话文本。

适用场景:你的工作流大量使用工具(搜索、代码执行、文件读写),工具返回的内容占用了大部分上下文,但这些结果本身不需要长期保留。

{
  agents: {
    defaults: {
      pruning: {
        enabled: true,
        maxAge: 10, // 保留最近 10 条工具结果
      },
    },
  },
}

性能优化配置清单

根据你的场景,对号入座:

问题 解决方案
对话越来越长变慢 启用 compaction,或手动 /compact
消息等很久才出来 开启 blockStreamingDefault: on
模型服务商挂了无响应 配置 fallbacks 列表 + 认证轮换
工具输出太大撑爆上下文 启用 pruning
想看实时输入效果 humanDelay: "natural"
流式消息太碎 调大 minChars,或改用 message_end

实战:完整性能加速配置

把下面这段配置加入你的 openclaw.jsonagents.defaults 里:

{
  agents: {
    defaults: {
      // Compaction 配置
      compaction: {
        model: "openrouter/anthropic/claude-sonnet-4-6",
      },
      // Streaming 配置
      blockStreamingDefault: "on",
      blockStreamingBreak: "text_end",
      blockStreamingChunk: {
        minChars: 200,
        maxChars: 500,
      },
      humanDelay: "natural",
      // Model Failover 配置
      model: {
        primary: "minimax/MiniMax-M2.7",
        fallbacks: [
          "openai/gpt-4o-mini",
          "google/gemini-2.0-flash",
        ],
      },
    },
  },
}

改完后重启 Gateway:

openclaw gateway restart

验证配置生效:

openclaw config show | grep -A5 compaction

总结

性能问题大多数时候不是模型的问题,而是上下文管理和降级策略没配置。核心三件事:

  1. 开 Compaction:对话再长也不怕撑爆上下文
  2. 开 Streaming:用户立即看到输出,体验提升明显
  3. 配 Failover:主模型挂了自动切换,不至于完全无响应

花 10 分钟配一下,效果立竿见影。