Skip to content

GPT-5.4 context window 重启后不一致(200k/272k/1050k 三值不统一)

问题

在 macOS 上使用 OpenClaw 2026.4.15,将 openai-codex/gpt-5.4 设为主模型后,重启或新建会话时 context window 在不同层面显示不一致:

  • 新建 Telegram DM 会话中 contextTokens = 200000
  • Mac app 模型目录(models.json)显示 contextWindow = 272000
  • 某些场景下 openclaw models list 显示 1050000

根本原因是运行时存在两处覆写逻辑:

js
// 问题代码示例(agent-runner.runtime-*.js)
const contextTokensUsed = resolveContextTokensForModel({
  cfg,
  provider: providerUsed,
  model: modelUsed,
  contextTokensOverride: agentCfgContextTokens,
  fallbackContextTokens: activeSessionEntry?.contextTokens ?? 2e5,  // 硬编码 fallback 200k
  allowAsyncLoad: false,
}) ?? 2e5;

每次会话启动时,这两处代码都会将 contextTokens 覆写回较小的值(200000 或 272000),导致已配置的值持续被覆盖。

解决方案

该问题属于 OpenClaw 2026.4.15 的运行时 bug,目前(2026-04-21)已有社区追踪,等待官方修复。

临时缓解措施:

  1. 在配置文件中显式固定 context tokens 覆盖值:

    json5
    {
      agents: {
        defaults: {
          model: {
            primary: "openai-codex/gpt-5.4",
            contextTokens: 1050000,  // 或你期望的值
          },
        },
      },
    }
  2. 或者通过 Control UI 的会话设置面板手动覆盖当前会话的 contextTokenssessions.patch),避免每次重建会话都受影响。

  3. 如果用 Linux/Control UI 环境复现,可通过 sessions.json 中已有条目检查 contextTokens 字段值并手动修正。

根本修复需要官方统一 resolveContextTokensForModel 的调用链,移除硬编码 fallback 2e5,改为从已解析的模型目录读取实际 context window 大小。