Token 用量与成本
OpenClaw 跟踪的是 token,而不是字符。Token 是模型特定的,但大多数 OpenAI 风格模型对英文文本的平均值约为每个 token 4 个字符。系统提示词是如何构建的
OpenClaw 会在每次运行时组装自己的系统提示词。它包括:- 工具列表 + 简短描述
- Skills 列表(仅元数据;说明会按需通过
read加载) - 自我更新说明
- 工作区 + bootstrap 文件(
AGENTS.md、SOUL.md、TOOLS.md、IDENTITY.md、USER.md、HEARTBEAT.md、新建时的BOOTSTRAP.md,以及在存在时的MEMORY.md或作为小写回退的memory.md)。大文件会被agents.defaults.bootstrapMaxChars截断(默认:20000),bootstrap 注入总量受agents.defaults.bootstrapTotalMaxChars限制(默认:150000)。memory/*.md文件通过 memory 工具按需加载,不会自动注入。 - 时间(UTC + 用户时区)
- 回复标签 + heartbeat 行为
- 运行时元数据(主机/OS/模型/thinking)
什么会计入上下文窗口
模型接收到的所有内容都会计入上下文限制:- 系统提示词(上面列出的所有部分)
- 对话历史(用户 + assistant 消息)
- 工具调用和工具结果
- 附件/转录内容(图片、音频、文件)
- 压缩摘要和裁剪产物
- provider 包装器或安全标头(不可见,但仍会计入)
agents.defaults.imageMaxDimensionPx(默认:1200)来调整:
- 较低的值通常会减少视觉 token 用量和负载大小。
- 较高的值会为 OCR/UI 密集型截图保留更多视觉细节。
/context list 或 /context detail。参见 Context。
如何查看当前 token 用量
在聊天中使用这些命令:/status→ 显示富含 emoji 的状态卡片,包含会话模型、上下文用量、上次响应的输入/输出 token,以及估算成本(仅 API 密钥)。/usage off|tokens|full→ 在每条回复后附加按响应统计的用量页脚。- 按会话持久化(存储为
responseUsage)。 - OAuth 身份验证隐藏成本(仅显示 token)。
- 按会话持久化(存储为
/usage cost→ 显示基于 OpenClaw 会话日志的本地成本摘要。
- TUI/Web TUI: 支持
/status+/usage。 - CLI:
openclaw status --usage和openclaw channels list显示 标准化后的 provider 配额窗口(X% left,而不是按响应成本)。 当前支持用量窗口的 provider:Anthropic、GitHub Copilot、Gemini CLI、 OpenAI Codex、MiniMax、Xiaomi 和 z.ai。
input_tokens /
output_tokens 和 prompt_tokens / completion_tokens,因此特定传输的字段名不会改变 /status、/usage 或会话摘要。
Gemini CLI JSON 用量也会被标准化:回复文本来自 response,并且 stats.cached 会映射为 cacheRead,当 CLI 省略显式 stats.input 字段时,会使用 stats.input_tokens - stats.cached。
对于原生 OpenAI 系列 Responses 流量,WebSocket/SSE 用量别名也会以相同方式标准化,当 total_tokens 缺失或为 0 时,总量会回退到标准化后的输入 + 输出。
当当前会话快照信息较少时,/status 和 session_status 还可以从最近的转录用量日志中恢复 token/缓存计数器和活动运行时模型标签。现有的非零实时值仍然优先于转录回退值,而当存储总量缺失或更小时,较大的面向提示词的转录总量可以胜出。
用于 provider 配额窗口的用量身份验证优先来自 provider 特定 hooks;否则 OpenClaw 会回退为使用来自 auth profile、环境变量或配置中匹配的 OAuth/API 密钥凭证。
成本估算(显示时)
成本是根据你的模型定价配置估算的:input、output、cacheRead 和
cacheWrite 的每 100 万 token 的美元价格。如果缺少定价,OpenClaw 只显示 token。OAuth token 永远不会显示美元成本。
缓存 TTL 和裁剪的影响
Provider 提示词缓存只会在缓存 TTL 窗口内生效。OpenClaw 可以选择运行缓存 TTL 裁剪:一旦缓存 TTL 过期,它就会裁剪会话,然后重置缓存窗口,这样后续请求就能重用刚刚重新缓存的上下文,而不是重新缓存完整历史。这可以在会话空闲超过 TTL 时降低缓存写入成本。 请在 Gateway 网关配置 中进行配置,并在 会话裁剪 中查看行为细节。 Heartbeat 可以在空闲间隔期间保持缓存预热。如果你的模型缓存 TTL 是1h,将 heartbeat 间隔设置为略低于该值(例如 55m)可以避免重新缓存完整提示词,从而减少缓存写入成本。
在多智能体设置中,你可以保留一个共享模型配置,并通过 agents.list[].params.cacheRetention 为每个智能体调整缓存行为。
如需完整的逐项参数指南,请参见 Prompt Caching。
对于 Anthropic API 定价,缓存读取比输入 token 便宜得多,而缓存写入则按更高倍数计费。最新费率和 TTL 倍数请参见 Anthropic 的提示词缓存定价:
https://docs.anthropic.com/docs/build-with-claude/prompt-caching
示例:使用 heartbeat 保持 1 小时缓存预热
示例:带有按智能体缓存策略的混合流量
agents.list[].params 会在所选模型的 params 之上合并,因此你可以只覆盖 cacheRetention,而让其他模型默认值保持不变。
示例:启用 Anthropic 1M 上下文 beta 标头
Anthropic 的 1M 上下文窗口当前仍受 beta 限制。启用受支持的 Opus 或 Sonnet 模型上的context1m 后,OpenClaw 可以注入所需的
anthropic-beta 值。
context-1m-2025-08-07 beta 标头。
这仅在该模型条目上设置了 context1m: true 时生效。
要求:该凭证必须具备长上下文使用资格。否则,Anthropic 会对该请求返回 provider 侧速率限制错误。
如果你使用 OAuth/订阅 token(sk-ant-oat-*)对 Anthropic 进行身份验证,OpenClaw 会跳过 context-1m-* beta 标头,因为 Anthropic 当前会以 HTTP 401 拒绝这种组合。
减少 token 压力的技巧
- 使用
/compact总结较长的会话。 - 在你的工作流中裁剪较大的工具输出。
- 对截图密集型会话降低
agents.defaults.imageMaxDimensionPx。 - 保持 skill 描述简短(skill 列表会被注入到提示词中)。
- 对冗长、探索性工作优先使用更小的模型。