read_when:

- 想降低 OpenClaw 的 token 消耗

- 群聊太费钱

- 长会话上下文越来越大

summary: 用简单语言解释哪些 OpenClaw 设置最影响 token 成本,以及该怎么配

省 Token 配置指南

这篇文档只讲一件事:

怎样让 OpenClaw 在不明显影响体验的前提下,少花 token。

如果你觉得机器人“越聊越贵”、“群里太容易触发”、“一条图文消息就很烧钱”,这篇文档就是给你的。

先讲结论

OpenClaw 的 token 开销,主要来自 3 件事:

1. 调用次数太多

2. 每次调用带进去的上下文太长

3. 额外的预处理太多

比如自动看链接、自动看图、自动看视频、长历史回放、compaction 前的 memory flush 等

所以省 token 的思路也很简单:

1. 少调用

2. 少带历史

3. 少开自动理解功能

如果你不想先看细节,最值得优先调的就是这几项:

一、最有效的设置:让旧上下文早点失效

1. `session.reset`

最直接、最稳的省 token 方式,就是不要让一个 session 无限长下去。


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

这段配置的意思是:

为什么这个设置这么有用

因为很多 token 消耗,不是来自“这一次用户只发了 10 个字”,而是来自:

把 session 定期切断,成本会立刻降下来。

推荐值

如果你主要是普通聊天:

可以进一步按聊天类型分开配:


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

什么时候不要配太短

如果你的场景是:

那就不要把 idleMinutes 设得太小。

一个很实用的原则是:

二、群聊最费钱:先控触发,再控历史

群聊通常是最烧 token 的场景,因为它同时会带来:

2. `messages.groupChat.historyLimit`


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

它的意思是:

为什么这项很重要

群里最容易出现这种情况:

这样很快就会贵。

推荐值

如果你只是做答疑 bot,而不是要深度参与群讨论,6 往往够用。

3. 群里尽量用 `mention`,不要 `always`

OpenClaw 的群激活模式有两种常见思路:

如果你想省 token,优先用 mention

运行时也可以用命令切:


/activation mention

如果你开 always,成本通常会明显上升,因为:

三、减少“连续发多条”带来的重复调用

很多用户不是一次发一长段,而是这样发:

1. “帮我看看这个”

2. “还有这个”

3. “顺便这个也算一下”

如果每一条都单独调用模型,token 会浪费很多。

4. `messages.queue`


{
  messages: {
    queue: {
      mode: "collect",
      debounceMs: 1500,
      cap: 8,
      drop: "summarize",
    },
  },
}

这几个字段分别是什么意思:

把短时间内连续来的消息收集起来,再一起处理

等 1.5 秒,看看用户会不会继续发

最多保留 8 条排队消息

如果太多了,不是直接全丢,而是尽量压缩成摘要

推荐理解方式

你可以把 queue 想成一句话:

“别急着每条都回,先等等,看看用户是不是还没发完。”

推荐值

对聊天机器人很实用的一组:


{
  messages: {
    queue: {
      mode: "collect",
      debounceMs: 1500,
      cap: 8,
      drop: "summarize",
    },
  },
}

如果你的用户特别爱连发,甚至可以试:

什么时候不适合调太大

如果你特别追求“每句话都秒回”,那 debounceMs 太大会让机器人显得慢一点。

所以这里是典型的取舍:

四、避免线程 / 子会话继承太多历史

5. `session.parentForkMaxTokens`


{
  session: {
    parentForkMaxTokens: 20000,
  },
}

这个设置的作用是:

为什么它有用

没有这个限制时,经常会出现一种浪费:

这样 thread 一上来就很贵。

推荐值

如果你已经有 session.reset,再配一个 parentForkMaxTokens,通常会更稳。

五、长会话要靠 compaction,但 compaction 也有成本

OpenClaw 会在上下文快撑满时做 compaction

你可以把它理解成:

这是长会话里非常重要的省 token 机制。

6. `agents.defaults.compaction`

一个偏省钱但不算激进的示例:


{
  agents: {
    defaults: {
      compaction: {
        mode: "default",
        maxHistoryShare: 0.25,
        recentTurnsPreserve: 1,
        keepRecentTokens: 6000,
        postCompactionSections: [],
      },
    },
  },
}

这些字段怎么理解

`maxHistoryShare`

历史最多能占整个上下文预算的多少。

比如:

如果你想省 token,通常可以设小一点。

`recentTurnsPreserve`

最近几轮对话保留原文,不做摘要。

如果你不是在做很复杂的连续任务,12 往往够用。

`keepRecentTokens`

无论如何都尽量保住最近这部分 token。

`postCompactionSections`

这个设置经常被忽略。

compaction 完之后,OpenClaw 可以把 AGENTS.md 某些章节重新塞回上下文里,帮助模型“重新读一遍关键规则”。

这很有用,但也会额外增加 token。

如果你的目标是明显降成本,可以直接:


postCompactionSections: []

它的意思是:

compaction 后不要再自动回注这些章节。

这是个很实用的省 token 点。

7. `compaction.model`


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

这表示:

这不是减少“上下文 token”,而是减少“做 compaction 本身的成本”。

如果你的主模型比较贵,这个设置很值。

8. `compaction.memoryFlush`

OpenClaw 默认会在重 compaction 前做一次 memory flush

你可以把它理解成:

这对长期记忆有帮助,但它本质上是一次额外 agent turn,也会花 token。

如果你的目标是“能省就省”,可以关掉:


{
  agents: {
    defaults: {
      compaction: {
        memoryFlush: {
          enabled: false,
        },
      },
    },
  },
}

什么时候不建议关

如果你的 bot 很依赖长期记忆,比如:

那最好别轻易关。

简单说:

六、关闭不必要的自动理解功能

很多人以为 token 只花在“聊天正文”上。

其实不是。

下面这些自动功能,也会悄悄把 token 花掉:

9. `tools.links`


{
  tools: {
    links: {
      enabled: false,
    },
  },
}

如果你的机器人主要做文本问答,不需要“用户一贴链接就自动读网页”,那直接关掉最省。

如果你还想保留这个能力,也建议至少收紧:


{
  tools: {
    links: {
      enabled: true,
      maxLinks: 1,
      scope: "explicit",
    },
  },
}

大白话理解就是:

10. `tools.media.image`

如果你的场景基本是纯文本,可以直接关:


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

如果你必须开图像理解,至少建议把 maxChars 压小:


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

原因很简单:

11. `tools.media.video`

视频通常比图片还贵。

如果不是核心能力,建议直接关:


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

如果必须开,也建议限制输出长度:


{
  tools: {
    media: {
      video: {
        enabled: true,
        maxChars: 1200,
      },
    },
  },
}

七、运行时也能省:不是只有配置文件

除了 openclaw.json,还有几个运行时开关也很实用。

12. `/think`

如果你用的是支持 thinking / reasoning 的模型,/think 会明显影响成本。

建议:

不要默认长期开 high / xhigh,除非你真的需要。

13. `/verbose off`


/verbose off

这会减少工具结果在回复里的展开程度。

好处是:

14. `/usage off`


/usage off

这主要是为了减少每次回复后面附带的 usage footer。

它不是最大的省钱点,但在高频聊天里也有一点帮助,而且能让消息更干净。

八、三套推荐配置

1. 极致省钱版

适合:


{
  session: {
    reset: { mode: "idle", idleMinutes: 60 },
    resetByType: {
      group: { mode: "idle", idleMinutes: 20 },
      thread: { mode: "idle", idleMinutes: 30 },
    },
    parentForkMaxTokens: 15000,
  },
  messages: {
    groupChat: { historyLimit: 6 },
    queue: {
      mode: "collect",
      debounceMs: 1500,
      cap: 8,
      drop: "summarize",
    },
  },
  agents: {
    defaults: {
      compaction: {
        mode: "default",
        maxHistoryShare: 0.25,
        recentTurnsPreserve: 1,
        keepRecentTokens: 6000,
        postCompactionSections: [],
        memoryFlush: { enabled: false },
      },
    },
  },
  tools: {
    links: { enabled: false },
    media: {
      image: { enabled: false },
      video: { enabled: false },
    },
  },
}

2. 平衡版

适合:


{
  session: {
    reset: { mode: "idle", idleMinutes: 90 },
    resetByType: {
      group: { mode: "idle", idleMinutes: 30 },
    },
    parentForkMaxTokens: 25000,
  },
  messages: {
    groupChat: { historyLimit: 8 },
    queue: {
      mode: "collect",
      debounceMs: 1200,
      cap: 10,
      drop: "summarize",
    },
  },
  agents: {
    defaults: {
      compaction: {
        mode: "default",
        maxHistoryShare: 0.35,
        recentTurnsPreserve: 2,
        keepRecentTokens: 8000,
      },
    },
  },
  tools: {
    links: {
      enabled: true,
      maxLinks: 1,
    },
    media: {
      image: {
        enabled: true,
        maxChars: 800,
      },
      video: {
        enabled: false,
      },
    },
  },
}

3. 群聊优先版

适合:


{
  session: {
    reset: { mode: "idle", idleMinutes: 60 },
    resetByType: {
      group: { mode: "idle", idleMinutes: 15 },
    },
  },
  messages: {
    groupChat: { historyLimit: 4 },
    queue: {
      mode: "collect",
      debounceMs: 1800,
      cap: 6,
      drop: "summarize",
    },
  },
}

同时建议在群里把激活模式保持为:


/activation mention

九、怎么判断是不是调对了

不要一上来追求“最省”。

更实用的办法是:

1. 先选一套偏保守配置

2. 观察 2 到 3 天

3. 再看是“太贵”还是“太容易忘”

如果还是太贵

优先按这个顺序继续收紧:

1. 调小 messages.groupChat.historyLimit

2. 调小 group 的 session.reset.idleMinutes

3. 调大 messages.queue.debounceMs

4. 关闭 tools.links

5. 关闭 tools.media.image / video

6. 把 recentTurnsPreserve 再调小

如果开始变笨 / 失忆

优先按这个顺序放宽:

1. 调大 session.reset.idleMinutes

2. 调大 messages.groupChat.historyLimit

3. 调大 keepRecentTokens

4. 把 recentTurnsPreserve1 提到 2

5. 如果关了 memoryFlush,考虑重新打开

十、一个经验法则

如果你只记住一句话,就记这个:

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

具体到 OpenClaw,就是:

相关阅读