April 20, 2026 • 版本: v2026.4.19-beta.2

[保留会话令牌总数避免提供商元数据缺失时回退到未知/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 命令显示上下文使用量为 unknown0%,尽管最近有活动。
  • 会话压缩后,上下文使用量计数器重置为零,而不是反映压缩后的值。

这些症状不会产生任何明确的错误消息,使得该问题很容易被忽略,直到您注意到使用量显示不正确。

根因分析

根本原因在于会话存储处理 API 响应中令牌使用量数据的方式。当提供商在响应中不包含使用量元数据(input_tokensoutput_tokens)时,persistSessionAfterRunsrc/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 后,通过以下步骤验证修复是否有效:

  1. 启动新会话或继续现有会话。
  2. 运行 /status 确认上下文使用量显示您上次的已知值而不是 0%
  3. 运行 openclaw sessions list 并检查上下文使用量列是否显示有意义的百分比而不是 unknown0%

如果值被保留但未主动更新,您可能会看到陈旧指示器(如调试输出中的 totalTokensFresh: false)。这是预期行为——系统现在显示上次的已知使用量,而不是用零掩盖它。

常见陷阱

  • 提供商兼容性:此修复专门适用于省略使用量元数据的提供商。如果您的提供商在每个响应中都包含使用量数据,则不会出现此问题,修复也不会影响您的工作流程。
  • 会话压缩:保留的值反映上次压缩前的状态。压缩后,会话可能会以新的 totalTokens 基线重新开始,这是正常行为。
  • 调试:如果您需要检查原始会话数据,请使用 openclaw sessions debug <session-id> 查看内部会话对象,包括 totalTokensFresh 标志。

相关错误

此修复解决了以下问题:

  • 受影响版本:v2026.4.19-beta.2 之前的版本
  • 已修复版本:v2026.4.19-beta.2 及更高版本
  • 相关命令/status
  • 相关命令openclaw sessions
  • 关联问题:修复 #67667

如果升级后仍遇到问题,请确保您的提供商配置正确且 API 响应包含所需的元数据字段。如果问题持续存在,请联系支持团队。

依据与来源

本故障排除指南由 FixClaw 智能管线从社区讨论中自动合成。