Token 使用与成本
OpenClaw 跟踪的是 token,而不是字符。Token 因模型而异,但大多数 OpenAI 风格的模型对英文文本平均约 4 个字符对应 1 个 token。
系统提示词是如何构建的¶
OpenClaw 在每次运行时都会组装自己的系统提示词。它包含:
- 工具列表 + 简短描述
- 技能列表(仅元数据;指令通过
read按需加载)。在受管捆绑应用服务器上,Native Codex 回合会在父级本地模型请求指令中获取紧凑技能块。没有该中继的连接使用线程开发者指令;其他运行环境则在正常提示词表面获取。由skills.limits.maxSkillsPromptChars限制,并可在agents.entries.*.skillsLimits.maxSkillsPromptChars处按代理进行可选覆盖。 - 自更新指令
- 工作区 + 引导文件(
AGENTS.md、SOUL.md、IDENTITY.md、USER.md、新建时的BOOTSTRAP.md,以及存在时的MEMORY.md)。大型注入文件会被agents.defaults.bootstrapMaxChars(默认:20000)截断;引导注入的总量由agents.defaults.bootstrapTotalMaxChars(默认:60000)限制。 - 当该工作区有可用的记忆工具时,Native Codex 回合不会粘贴原始
MEMORY.md;取而代之的是,它们在父级本地请求指令中获得一个小的记忆指针,并按需使用记忆工具。如果工具被禁用、记忆搜索不可用,或当前工作区与代理记忆工作区不同,MEMORY.md会回退到正常的受限轮次上下文路径。 - 小写根目录
memory.md永远不会被注入。它是openclaw doctor --fix的遗留修复输入,该命令会将其迁移到MEMORY.md。 memory/*.md每日文件不属于正常引导提示词的一部分;它们在普通回合中通过记忆工具保持按需加载。重置/启动模型运行可以在第一个回合前添加一次性启动上下文块,其中包含最近的每日记忆,由agents.defaults.startupContext控制。裸聊天/new和/reset会被确认而不调用模型。- 压缩后的
AGENTS.md摘录需要显式启用agents.defaults.compaction.postCompactionSections;插件可以通过before_prompt_build添加其他上下文。 - 时间(UTC + 用户时区)
- 回复标签 + 心跳行为
- 运行时元数据(主机/操作系统/模型/思考)
完整分解请参阅 系统提示词。
在记录凭据或认证代码片段时,请使用 秘密占位符约定,以避免仅文档更改中出现秘密扫描器误报。
什么计入上下文窗口¶
模型接收的一切都计入上下文限制:
- 系统提示词(上述所有部分)
- 对话历史(用户 + 助手消息)
- 工具调用和工具结果
- 附件/转写(图像、音频、文件)
- 压缩摘要和裁剪产物
- 提供商包装器或安全标头(不可见,但仍会计数)
运行时负载较高的面在 agents.defaults.contextLimits 下有各自的显式上限(按代理覆盖见 agents.entries.*.contextLimits):
| Key | Purpose |
|---|---|
memoryGetMaxChars |
memory_get 在截断前返回的最大字符数。 |
postCompactionMaxChars |
压缩后刷新期间从 AGENTS.md 保留的最大字符数。 |
这些是受限的运行时摘录和运行时拥有的注入块,与引导限制、启动上下文限制和技能提示词限制是分开的。
OpenClaw 根据有效的模型上下文窗口推导实时工具结果上限:低于 100K token 时为 16000 字符,100K+ token 时为 32000 字符,200K+ token 时为 64000 字符。运行时上下文共享保护还会将单个工具结果限制为上下文窗口的 30%。
大型提供商窗口不会在实质改变成本或延迟时自动启用。例如,直接 OpenAI GPT-5.5 和 GPT-5.6 模型发布 1050000 token 的总窗口,但 OpenClaw 默认将其活跃运行时预算设为 272000 token。可选择加入的 922000 输入预算会保留完整的 128000 输出额度,而一旦输入超过 272000 token,OpenAI 会对整个请求应用更高的长上下文定价。请参阅 OpenAI 上下文窗口默认值。
对于图像,OpenClaw 会在提供商调用前缩小转写/工具图像负载。可使用 agents.defaults.imageMaxDimensionPx(默认:1200)进行调整:
- 较低的值会减少视觉 token 的使用和负载大小。
- 较高的值会为 OCR/UI 密集型截图保留更多视觉细节。
如需实际分解(每个注入文件、工具、技能和系统提示词大小),请使用 /context list 或 /context detail。请参阅 上下文。
如何查看当前 Token 用量¶
在聊天中:
/status-> 显示富含 emoji 的状态卡片,包含会话模型、上下文使用情况、上一次响应的输入/输出 token,以及来自记录账单或活动模型本地定价的成本。/usage off|tokens|full-> 为每次回复附加一个按响应计的使用信息页脚。该设置按会话持久化(存储为responseUsage)。/usage reset(别名:inherit、clear、default)清除会话覆盖,使其重新继承已配置的默认值。/usage tokens显示回合 token/缓存详细信息。/usage full显示紧凑的模型/上下文/成本详细信息。成本来自已记录金额或带有活动模型本地定价的使用元数据。自定义messages.usageTemplate布局可以包含 token/缓存字段。/usage cost-> 来自 OpenClaw 会话日志的本地成本摘要。
其他界面:
- Control UI: 工作指示器和已运行回合摘要显示该次运行的累计输出 token,包括其在工具使用和重试中的模型调用。计数仅在运行时报告完成响应的用量时更新,而不是在每个流式文本片段上更新。重新加载活动运行会恢复其最新计数。此计数器不包括输入 token,并且与编辑器上下文窗口计量器和持久化账单摘要分开。
- TUI/Web TUI: 支持
/status和/usage。 - CLI:
openclaw status --usage和openclaw channels list显示规范化的提供商配额窗口(X% 剩余,而非每次响应成本)。截至 2026.9.3 检查的使用窗口提供商:Claude (Anthropic)、ClawRouter、Copilot (GitHub)、DeepSeek、MiniMax、OpenAI、OpenRouter、Venice、xAI、Xiaomi、Xiaomi Token Plan 和 z.ai。提供商插件提供这些快照,因此安装的插件可以添加一个。
用量展示层会在显示前规范化常见的提供商原生字段别名。对于 OpenAI 系列 Responses 流量,这包括 input_tokens/output_tokens 和 prompt_tokens/completion_tokens,因此传输层特有的字段名不会改变 /status、/usage 或会话摘要。Gemini CLI 用量也会被规范化:默认的 stream-json 解析器读取 assistant message 事件,stats.cached 映射到 cacheRead;当 CLI 未提供显式 stats.input 字段时,使用 stats.input_tokens - stats.cached。旧版 JSON 覆盖仍从 response 读取回复文本。
对于原生 OpenAI 系列 Responses 流量,WebSocket/SSE 用量别名也以相同方式规范化;当 total_tokens 缺失或为 0 时,总计会回退为规范化后的 input + output。
当当前会话快照数据稀疏时,/status 和 session_status 可以从最近的转录用量日志中恢复 token/缓存计数器和当前运行时模型标签。现有的非零实时值仍优先于转录回退值;当存储的总计缺失或较小时,更大的提示词相关转录总计可以胜出。
提供商配额时间窗口的用量认证首先来自提供商专用钩子;如果某个提供商没有钩子(或钩子无法解析出 token),OpenClaw 会回退到从认证配置文件、环境变量或配置中匹配 OAuth/API 密钥凭据。
Assistant 转录条目会持久化相同的规范化用量结构,包括当运行时计算出估算值或提供商报告计费金额时的 usage.cost。这为 /usage cost 和基于转录的会话状态提供了稳定来源,即使实时运行时状态已不存在也是如此。
OpenClaw 将提供商用量核算与当前上下文快照分开保存。提供商的 usage.total 可能包含缓存输入、输出以及多次工具循环模型调用,因此它对于成本和遥测很有用,但可能高估实时上下文窗口。上下文显示和诊断使用最新的提示词快照(promptTokens,或当没有提示词快照时使用最后一次模型调用)作为 context.used。
原生 Codex 轮次用量会对每个唯一已完成的模型响应所报告的数量求和,包括重试或取消之前的响应。缺失的响应计数保持未知;它们不会抹去已观察到的用量。缺失最终响应快照会使上下文用量不可用。
成本估算(显示时)¶
成本根据你的模型定价配置估算:
这些是 input、output、cacheRead 和 cacheWrite 的 USD / 1M tokens 价格。如果定价和记录金额都缺失,/usage full 会省略成本;当你需要在每次回复中查看 token/缓存详情时,请使用 /usage tokens 或自定义的 messages.usageTemplate。成本显示不仅限于 API 密钥认证:非 API 密钥提供商(如 aws-sdk)在其配置的模型条目包含本地定价且提供商返回用量元数据时,也可以显示估算成本。
当模型发布 tieredPricing 时,每个请求使用其提示词输入总量(未缓存输入加上缓存读取和缓存写入)来选择一个层级。输出 token 不参与选择层级。所选费率适用于该请求中的每个 token 桶,而不仅仅是超过阈值的 token。区间为半开区间 [start, end);无上限的最终区间使用 [start]。
轮次总计会对每个模型请求计算出的成本求和,并在工具循环和重试之间保留层级和模型边界。如果较旧或外部运行时只提供聚合 token,则仍可使用统一费率估算。没有完整逐请求成本的层级聚合会省略成本,而不是将求和后的 token 视为一个大型请求。提供商计费的总计(包括零)优先于目录估算,并且即使 token 计数不可用也仍然可见。未知的 token 计数不会从计费金额中推断出来。
转录报告会保留有效的已记录逐调用总计和分配,包括 priority/flex 调整;仅对缺失成本或未知价格的零占位符使用当前目录定价。 Anthropic 快速模式估算会同样乘以基础费率和层级费率,保留层级阈值以及混合的 5 分钟/1 小时缓存写入定价。
省略 cost 或将其设为 {} 会继承目录定价方案。显式的统一费率或全零模型价格不会继承目录层级方案。省略的统一费率字段仍可继承目录默认值。显式的 tieredPricing 方案优先于目录方案。
定价更新随模型元数据一起通过托管模型目录发布。其发布者读取公开定价来源,包括当提供商声明原生来源时的 OpenCode 官方目录和 Venice 公开模型 API。基础费率和上下文层级来自同一来源;用量渲染不会发起网络请求。托管更新会在下次 Gateway 重启后生效。在离线或受限网络上,设置 models.catalogRefresh.enabled: false 可禁用托管目录流量;内置定价仍然有效。Agent 本地的 models.json 价格优先于显式的 models.providers.*.models[].cost 条目,而这两者都覆盖目录估算,包括显式的统一费率和零费率。
当 Gateway 写入更新后的 agent 本地 models.json 价格时,后续本地估算会使用这些费率,无需重启。已记录的逐调用成本保持其原始金额。
当精确快捷方式没有价格时,OpenRouter 的 :nitro 和 :floor 路由快捷方式使用基础模型的目录估算。已记录成本和显式价格保持其优先级。私有端点和其它模型变体不使用此回退。Priority 和 flex 计费可能与基础估算不同。
缓存 TTL 与剪枝影响¶
提供商提示词缓存仅在缓存 TTL 窗口内生效。OpenClaw 可以选择运行缓存 TTL 剪枝(cache-ttl pruning):一旦缓存 TTL 过期,它会修剪会话,然后重置缓存窗口,使后续请求复用新缓存的上下文,而不是重新缓存完整历史记录。这可以在会话空闲超过 TTL 时降低缓存写入成本。
在 Gateway 配置 中配置它,并在 会话修剪 中查看行为详情。
心跳可以在空闲间隔期间让缓存保持温热。如果你的模型缓存 TTL 为 1h,将心跳间隔设置为略低于该值(例如 55m),可以避免重新缓存完整 Prompt,从而降低缓存写入成本。
在多智能体设置中,你可以保留一个共享的模型配置,并通过 agents.entries.*.params.cacheRetention 按智能体调整缓存行为。
如需完整的逐项配置指南,请参阅 Prompt 缓存。
就 Anthropic API 定价而言,缓存读取比输入 Token 便宜得多,而缓存写入按更高的乘数计费。请参阅 Anthropic 的 Prompt 缓存定价,了解最新的费率和 TTL 乘数: https://platform.claude.com/docs/en/build-with-claude/prompt-caching
示例:通过心跳保持 1 小时缓存温热¶
agents:
defaults:
model:
primary: "anthropic/claude-opus-4-6"
models:
"anthropic/claude-opus-4-6":
params:
cacheRetention: "long"
heartbeat:
every: "55m"
示例:混合流量与按智能体缓存策略¶
agents:
defaults:
model:
primary: "anthropic/claude-opus-4-6"
models:
"anthropic/claude-opus-4-6":
params:
cacheRetention: "long" # default baseline for most agents
list:
- id: "research"
default: true
heartbeat:
every: "55m" # keep long cache warm for deep sessions
- id: "alerts"
params:
cacheRetention: "none" # avoid cache writes for bursty notifications
agents.entries.*.params 会在所选模型的 params 之上合并,因此你可以只覆盖 cacheRetention,而其他模型默认值保持不变。
Anthropic 1M 上下文¶
OpenClaw 会将具备 GA 能力的 Claude 4.x 模型(如 Opus 4.8、Opus 4.7、Opus 4.6 和 Sonnet 4.6)配置为使用 Anthropic 的 1M 上下文窗口。对于这些模型,你无需设置 params.context1m: true。
旧配置可以保留 context1m: true,但 OpenClaw 不再为此设置发送 Anthropic 已退役的 context-1m-2025-08-07 beta 请求头,也不会将不受支持的旧版 Claude 模型扩展到 1M。
要求:凭据必须具备长上下文使用资格。否则,Anthropic 会针对该请求返回服务商侧的速率限制错误。
如果你使用 OAuth/订阅 Token(sk-ant-oat-*)向 Anthropic 进行身份验证,OpenClaw 会保留 OAuth 所需的 Anthropic beta 请求头,同时移除旧配置中可能残留的已退役 context-1m-* beta 请求头。
降低 Token 压力的技巧¶
- 使用
/compact总结长会话。 - 在工作流中缩减大型工具输出。
- 在截图密集的会话中,降低
agents.defaults.imageMaxDimensionPx。 - 保持技能描述简短(技能列表会注入到 Prompt 中)。
- 对于冗长、探索性的工作,优先使用较小的模型。
请参阅 技能 了解技能列表开销的确切公式。
相关¶
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw