[保留会话令牌总数避免提供商元数据缺失时回退到未知/0%] - Agents/status: preserve carried-forward session token totals for providers that omit usage metadata, so `/status` and `openclaw sessions` keep showing the last known context usage instead of dropping back to unknown/0%.
OpenClaw v2026.4.19-beta.2 版本中引入的修复的故障排除指南。
症状
如果您使用的提供商在其 API 响应中不包含使用量元数据(如 MiniMax 通过其与 Anthropic 兼容的端点),您可能会注意到以下症状:
- 运行
/status显示Context: 0/264k (0%),即使在进行了包含数千条消息的长时间对话后仍然如此。 openclaw sessions命令显示上下文使用量为unknown或0%,尽管最近有活动。- 会话压缩后,上下文使用量计数器重置为零,而不是反映压缩后的值。
这些症状不会产生任何明确的错误消息,使得该问题很容易被忽略,直到您注意到使用量显示不正确。
根因分析
根本原因在于会话存储处理 API 响应中令牌使用量数据的方式。当提供商在响应中不包含使用量元数据(input_tokens、output_tokens)时,persistSessionAfterRun(src/agents/command/session-store.ts)中的 hasNonzeroUsage() 检查会返回 false。这导致整个 totalTokens 更新块被跳过。
结果,会话条目保留 totalTokens: undefined,而 /status 命令将此 undefined 值解释为 0% 上下文使用量。会话永远不会跨多个运行累积令牌总数,即使之前的运行或压缩操作可能已经计算了此信息。
逐步修复
要解决此问题,请升级到 v2026.4.19-beta.2 或更高版本。修复会在当前运行缺少使用量数据时保留现有的 totalTokens 值,防止计数器重置为零。
如果您无法立即升级,可以通过直接检查会话文件来手动验证会话状态:
cat ~/.openclaw/sessions/<session-id>.json | grep totalTokens
如果值为 null 或缺失,上下文使用量显示将显示 0%,直到您升级或提供商开始发送使用量元数据。
验证
升级到 v2026.4.19-beta.2 后,通过以下步骤验证修复是否有效:
- 启动新会话或继续现有会话。
- 运行
/status确认上下文使用量显示您上次的已知值而不是0%。 - 运行
openclaw sessions list并检查上下文使用量列是否显示有意义的百分比而不是unknown或0%。
如果值被保留但未主动更新,您可能会看到陈旧指示器(如调试输出中的 totalTokensFresh: false)。这是预期行为——系统现在显示上次的已知使用量,而不是用零掩盖它。
常见陷阱
- 提供商兼容性:此修复专门适用于省略使用量元数据的提供商。如果您的提供商在每个响应中都包含使用量数据,则不会出现此问题,修复也不会影响您的工作流程。
- 会话压缩:保留的值反映上次压缩前的状态。压缩后,会话可能会以新的
totalTokens基线重新开始,这是正常行为。 - 调试:如果您需要检查原始会话数据,请使用
openclaw sessions debug <session-id>查看内部会话对象,包括totalTokensFresh标志。
相关错误
此修复解决了以下问题:
- 受影响版本:v2026.4.19-beta.2 之前的版本
- 已修复版本:v2026.4.19-beta.2 及更高版本
- 相关命令:
/status - 相关命令:
openclaw sessions - 关联问题:修复 #67667
如果升级后仍遇到问题,请确保您的提供商配置正确且 API 响应包含所需的元数据字段。如果问题持续存在,请联系支持团队。