read_when:

- 想降低 OpenClaw 的 token 消耗

- 群聊太费钱

- 长会话上下文越来越大

summary: OpenClaw 省 token 实战指南——经过官方文档逐项验证的配置建议

OpenClaw 省 Token 配置指南

Token 开销的三大来源:调用次数多每次带的上下文长自动预处理多(看链接、看图、看视频等)。

省 token 的思路也就三条:少调用、少带历史、少开自动功能。

一、让旧上下文及时过期

这是最有效的单一手段。

`session.reset`

OpenClaw 默认每天凌晨 4 点重置会话。如果你想按空闲时间切:


{
  session: {
    reset: {
      mode: "idle",
      idleMinutes: 60,
    },
  },
}

会话 60 分钟没新消息 → 下一条消息自动开新 session → 不再拖着 2 小时的历史。

可以按聊天类型分开配:


{
  session: {
    reset: {
      mode: "idle",
      idleMinutes: 60,
    },
    resetByType: {
      group: { mode: "idle", idleMinutes: 20 },
      thread: { mode: "idle", idleMinutes: 30 },
    },
  },
}

经验法则:觉得"忘上下文太快"就调大,觉得"越聊越贵"就调小。

> 📖 参考:Session Management · Session Deep Dive

二、群聊:控触发 + 控历史

群聊通常是最烧钱的场景——无关消息多、触发频繁、历史长。

`messages.groupChat.historyLimit`


{
  messages: {
    groupChat: {
      historyLimit: 6,
    },
  },
}

每次处理群消息时,最多回看最近 6 条。各渠道也可以单独覆盖,如 channels.telegram.historyLimitchannels.discord.historyLimit

推荐值:答疑 bot 4~6,深度参与讨论 10~15

群里用 `mention` 而不是 `always`


/activation mention

只有被 @mention 时才认真处理,避免每条群消息都走模型。

> 📖 参考:Messages · Configuration Reference

三、减少连发消息的重复调用

用户习惯连发几条消息,每条单独调用模型很浪费。OpenClaw 有两个独立机制

机制 1:入站去抖 `messages.inbound`

在 agent run 开始之前,把短时间内连续来的消息合并成一条:


{
  messages: {
    inbound: {
      debounceMs: 2000, // 等 2 秒看用户是否继续发
      byChannel: {
        whatsapp: 5000,  // WhatsApp 用户特别爱连发
        discord: 1500,
        slack: 1500,
      },
    },
  },
}

注意:媒体/附件会立即投递(不等去抖),命令也会绕过去抖。

机制 2:运行中排队 `messages.queue`

agent 正在处理时新消息进来怎么办?用 /queue 配置:


/queue collect debounce:2s cap:8 drop:summarize

这两个机制是独立的messages.inbound 管"还没开始跑",messages.queue 管"正在跑的时候来了新消息"。

> 📖 参考:Messages · Queueing

四、限制子会话继承的历史

`session.parentForkMaxTokens`


{
  session: {
    parentForkMaxTokens: 20000,
  },
}

当 thread/topic 想继承父会话上下文时,如果父会话已经超过这个 token 数,就不 fork 过去,从干净上下文开始。

默认值是 100000。如果你想省钱,调到 15000~25000。设 0 关闭保护。

> 📖 参考:Session Deep Dive

五、Compaction 调优

长会话靠 compaction 续命——把历史压缩成摘要。但 compaction 本身也花 token。

核心参数


{
  agents: {
    defaults: {
      compaction: {
        enabled: true,
        reserveTokens: 16384,  // 预留给下一轮回复的空间
        keepRecentTokens: 8000, // 最近这么多 token 保留原文不压缩
      },
    },
  },
}

用便宜模型做 compaction


{
  agents: {
    defaults: {
      compaction: {
        model: "openai/gpt-4.1-mini",
      },
    },
  },
}

正常对话用主模型,compaction 交给便宜模型。主模型越贵,这招越值。

Memory flush 开关

compaction 前默认跑一次 memory flush(把重要内容写到磁盘)。这会多一次 agent turn。


{
  agents: {
    defaults: {
      compaction: {
        memoryFlush: {
          enabled: false, // 关掉更省,但会丢长期记忆
        },
      },
    },
  },
}

取舍:如果 bot 很依赖长期记忆(记偏好、维护项目状态),别关。纯问答 bot 可以关。

> 📖 参考:Compaction · Session Deep Dive

六、关闭自动媒体理解

这些功能会在你不知情的情况下消耗 token:

图片理解 `tools.media.image`


{
  tools: {
    media: {
      image: {
        enabled: false, // 纯文本 bot 直接关
      },
    },
  },
}

如果必须开,限制描述长度:


{
  tools: {
    media: {
      image: {
        enabled: true,
        maxChars: 800,
      },
    },
  },
}

视频理解 `tools.media.video`

通常比图片更贵。非核心能力就关:


{
  tools: {
    media: {
      video: {
        enabled: false,
      },
    },
  },
}

网页抓取 `tools.web.fetch`

用户贴链接自动读网页的功能:


{
  tools: {
    web: {
      fetch: {
        maxChars: 20000, // 默认 50000,调低
      },
    },
  },
}

> 📖 参考:Media Understanding · Configuration Reference

七、运行时开关

`/think off`

支持 thinking 的模型(如 Claude)默认会花很多 token 在推理上。日常聊天关掉:


/think off

只有复杂任务才开 /think high

`/verbose off`

减少工具结果在回复里的展开,让 transcript 膨胀更慢。

`/usage off`

关掉每条回复后面的 usage footer,减少消息噪音。

> 📖 参考:Thinking · Slash Commands

八、三套推荐配置

极致省钱版

纯文本聊天,不需要自动看图/视频/链接:


{
  session: {
    reset: { mode: "idle", idleMinutes: 60 },
    resetByType: {
      group: { mode: "idle", idleMinutes: 20 },
      thread: { mode: "idle", idleMinutes: 30 },
    },
    parentForkMaxTokens: 15000,
  },
  messages: {
    inbound: { debounceMs: 2000 },
    groupChat: { historyLimit: 6 },
  },
  agents: {
    defaults: {
      compaction: {
        keepRecentTokens: 6000,
        model: "openai/gpt-4.1-mini",
        memoryFlush: { enabled: false },
      },
    },
  },
  tools: {
    media: {
      image: { enabled: false },
      video: { enabled: false },
    },
  },
}

平衡版

想省钱,但也不想机器人失忆太快:


{
  session: {
    reset: { mode: "idle", idleMinutes: 90 },
    resetByType: {
      group: { mode: "idle", idleMinutes: 30 },
    },
    parentForkMaxTokens: 25000,
  },
  messages: {
    inbound: { debounceMs: 1500 },
    groupChat: { historyLimit: 8 },
  },
  agents: {
    defaults: {
      compaction: {
        keepRecentTokens: 10000,
      },
    },
  },
  tools: {
    media: {
      image: { enabled: true, maxChars: 800 },
      video: { enabled: false },
    },
  },
}

群聊优先版

QQ / Telegram / Discord 群机器人,重点防止群消息拖爆成本:


{
  session: {
    reset: { mode: "idle", idleMinutes: 60 },
    resetByType: {
      group: { mode: "idle", idleMinutes: 15 },
    },
  },
  messages: {
    inbound: {
      debounceMs: 2000,
      byChannel: { discord: 1500 },
    },
    groupChat: { historyLimit: 4 },
  },
}

配合群里保持 /activation mention

九、调优节奏

别一上来追求"最省"。先选平衡版,观察 2~3 天。

还是太贵?按顺序收紧

1. 调小 groupChat.historyLimit

2. 调小群聊 idleMinutes

3. 调大 inbound.debounceMs

4. 关 tools.media.image / video

5. 调小 keepRecentTokens

开始变笨/失忆?按顺序放宽

1. 调大 idleMinutes

2. 调大 historyLimit

3. 调大 keepRecentTokens

4. 重新开启 memoryFlush

一句话总结

省 token 最有效的方法不是抠单次回答的几个字,而是减少无意义的历史、无意义的触发、无意义的自动理解。

相关文档

Tony 🦾 | 2026-03-17 | 基于 OpenClaw 官方文档逐项验证