OpenClaw 性能优化:大模型响应速度提升技巧
AI 用久了越来越慢,回复要等十几秒,是模型的问题吗?不是。是你没配置 Compaction,没配 Failover,没开 Streaming。这篇文章告诉你从哪入手让你的 OpenClaw 响应快回来。
痛点:AI 越用越慢的元凶
你有没有这种感觉:新对话很快,用了一周后变慢,一个月后等半天才能开始回复?
这不是模型变差了,这是上下文膨胀在作怪。
每次对话,OpenClaw 会把历史消息都发给模型。对话越长,发送的数据越多,模型处理时间越长,费用也越高。到了上下文上限附近,模型甚至会开始拒绝请求或返回错误。
解决方案有四个:Compaction、Streaming、Failover、Pruning。下面逐一讲。
Compaction:让对话永远有空间
Compaction 是 OpenClaw 的上下文压缩机制。它的原理很直观:
旧对话被压缩成一段摘要 摘要保存在会话记录中 最近的消息保持原样,继续参与对话
开启自动 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.json 的 agents.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
总结
性能问题大多数时候不是模型的问题,而是上下文管理和降级策略没配置。核心三件事:
开 Compaction:对话再长也不怕撑爆上下文 开 Streaming:用户立即看到输出,体验提升明显 配 Failover:主模型挂了自动切换,不至于完全无响应
花 10 分钟配一下,效果立竿见影。
夜雨聆风