DEEP RESEARCH · CONTEXT ENGINEERING · NO.CTX-01
AI RESEARCH ENGINEERING

Codex 的上下文账本:标称一兆,为什么只给你 35 万?

从 1,050,000 到 353,400:拆解 GPT‑5.6 Sol 的模型规格、产品窗口、内部提示词、工具开销与自动压缩,并与 Claude Code 1M 模式用同一把尺子比较。

松墨纸版画:一片浩瀚的湖水经铜色漏斗层层收窄,最终只滴入一只小陶杯,隐喻巨大容量最终可用极少
图 1 · 一整片湖的容量,经过层层收窄,落进杯里的只有一小口——这正是从 105 万到 35 万的落差。
GPT-5.6 Sol 在 API 与 Codex 中的四层上下文窗口 从 API 的 105 万总窗口,经过 Codex 产品目录 37.2 万、有效输入 35.34 万,最终到 33.48 万默认自动压缩线。 THE CONTEXT LEDGER 同一模型,四套窗口口径 API MODEL 1,050,000 CODEX CATALOG 372,000 EFFECTIVE 95% 353,400 AUTO COMPACT 334,800 MODEL CAPABILITY ≠ PRODUCT BUDGET ≠ USER CONTENT
图 2 · 四层窗口账本。松绿代表产品与源码事实,铜色代表测量与阈值;虚线外框是 API 模型能力,并不等于 Codex 会话预算。
Will 收集整理· 2026-07-10· 深度调研报告 Vol.CTX-01· 阅读约 18 分钟
TL;DR · 一段话看懂

截至 2026 年 7 月 10 日,GPT‑5.6 Sol 的公开 API 规格是 1,050,000 tokens;但在 Codex CLI 0.144.1 的隔离探针中,Codex 模型目录把产品会话原始窗口封顶在 372,000,客户端再按 95% 报告 353,400 的有效输入窗口,并在活动上下文累计涨到 334,800(原始窗口的 90%)时自动触发压缩——是“用量往上顶到这条线”就压,不是“低于它才压”。一个最小新会话在用户几乎什么都没说时已经消耗 12,446 tokens,因此从这里到第一次压缩、还能继续塞进去的空间约为 32.2 万(334,800 − 12,446 ≈ 322,354)。这不是“模型缩水”,而是模型能力、产品预算、内部开销与压缩策略四套口径叠加后的结果。

这是带版本号与日期的产品快照,不代表所有账号、套餐、地区或未来 Codex 版本永久固定为同一数值。

01
入门 · FOUR NUMBERS

先把“一兆”说清楚:同一句上下文,至少四种口径

模型能吃下一兆,不等于 Codex 产品会把这一兆全部交给一个会话。

“上下文窗口”是模型生成下一步时能够参考的工作记忆:系统指令、用户消息、文件、工具定义、工具返回、历史回复和即将生成的输出都可能占位。它不是训练数据量,也不是“用户可以粘贴的纯文本额度”。OpenAI 的模型页把 GPT‑5.6 Sol 定义为 1,050,000 tokens 总上下文,其中最大输入 922,000、最大输出 128,000。[1]

1.05M
模型规格
GPT‑5.6 Sol API 总上下文
372K
产品目录
Codex 0.144.1 原始窗口
353.4K
有效窗口
session telemetry 报告值
334.8K
压缩阈值
默认自动 compact 线
MODEL CAPABILITY

模型能力上限

API 模型页描述的是一次请求的理论总池。直接调用 API 时,应用开发者负责组织消息、工具和压缩策略。

PRODUCT BUDGET

产品会话预算

Codex 作为 Agent 产品,可以为同一底层模型设定更小的目录窗口、预留余量和自动压缩线。

核心判断

准确表达不是“GPT‑5.6 Sol 只有 35 万上下文”,而是:GPT‑5.6 Sol API 有 105 万模型窗口;在本次 Codex 0.144.1 产品快照中,会话按 37.2 万目录窗口、35.34 万有效输入窗口运行。

02
机制 · THE LEDGER

窗口账本:372K、353.4K、334.8K 为什么同时成立

这三个数字不是互相矛盾,而是同一套产品策略的不同刻度。

产品原始窗口 372,000 有效输入预算 372,000 × 95% = 353,400 5% 统一 headroom 18,600 默认压缩阈值 372,000 × 90% = 334,800 最小样本启动负载 12,446 压缩前增长空间 334,800 − 12,446 ≈ 322,354
Codex 目录原始窗口372,000 · 100%
telemetry 有效输入窗口353,400 · 95%
默认自动压缩线334,800 · 90%
最小新会话启动负载12,446 · 3.35% of raw

Codex 协议把 effective_context_window_percent 的默认值设为 95%,源码注释明确说这是为系统提示、工具开销和模型输出留出余量。[3] 另一个函数把自动压缩上限默认设为原始窗口的 90%,即便用户显式配置更高,也会取更小值。[4]

不要重复扣除

5% headroom 是产品层统一预留;12,446 是已经进入有效输入预算的实际启动 payload。它们是两层不同概念,不能把“5%”误读成“系统提示词恰好占 5%”,也不能把二者混成一笔账。

压缩是「涨到线」,不是「跌破线」

这条线的方向最容易被读反:自动压缩不是“用量低于 334,800 就压缩”,而是活动上下文从下往上增长,一旦累计占用顶到约 334,800(原始窗口的 90%)就触发——90% 是 Codex 服务端的硬顶,本地把 auto_compact_token_limit 配得再高也会被压回 90%。[4]触发后 Codex 把较早的历史压成摘要、活动占用回落,再带着摘要继续往下做。它落在 95% 有效输入线之前,正是为“压缩这一步本身 + 后续输出”预留余量。所以从最小新会话(启动已占 12,446)到第一次压缩,你还能再写入约 334,800 − 12,446 ≈ 322,354(≈32.2 万) token;这才是“首次压缩前可继续增长的空间”那句话的完整算法。

03
解剖 · WHAT FILLS THE WINDOW

上下文解剖:到底什么在占空间

一个 Agent 会话从来不是“用户问题 + 模型回答”这么简单。它更像一张持续滚动的项目账本。

松墨纸版画:一只玻璃罐剖面,罐内自下而上是多层不同颜色的沉积,顶部仅余一线空隙,隐喻上下文被固定开销层层占满
图 3 · 会话窗口像一只被逐层填满的罐子:系统指令、工具定义、历史与工具返回自下而上堆叠,真正留给新内容的只剩顶部一线。
固定 / 半固定层
  • 模型基础指令:Codex 的工作方式、沟通方式与行为边界。
  • 工具 schemas:命令、补丁、搜索、浏览器、MCP 等工具的名字、描述和参数。
  • 系统与开发者规则:权限、沙箱、插件、App 与 Agent 调度规则。
环境相关层
  • Skills / 插件 / MCP:目录说明与按需加载的能力定义。
  • 项目规则:如 AGENTS.md、工作区说明和约束。
  • 运行环境:cwd、日期、时区、操作系统、网络与文件权限。
随任务增长层
  • 用户与助手历史——每一轮需求、澄清、决策和回答。
  • 文件与检索结果——源码片段、文档、网页、图片与附件。
  • 工具调用与返回值——终端日志、测试失败、构建输出、搜索结果,常常是增长最快的一项。
  • 压缩摘要与推理工件——为了延续任务而保留的结构化状态。

一个最小隔离样本:用户只说“回复 OK”,为什么已经有 12,446 tokens?

研究使用空临时目录、忽略用户配置与规则、只读沙箱和低推理强度发出最小请求。用户提示只占十余个 tokens,但服务端报告首轮输入为 12,446。再使用 OpenAI 官方 Token Counting API 对模型基础指令单独计数,可得到以下账本:

精确剩余差值桶:9,177 基础指令:3,256 用户提示:约 13

MEASURED SAMPLE · Codex CLI 0.144.1 · 2026-07-10。9,177 是总量上的精确差值,但 Codex 没有继续返回每个工具 schema 的逐项账单,因此不能伪装成更细的“工具精确分解”。

扩展环境为什么会更大

一旦启用更多 Skills、插件、MCP、项目规则和多 Agent 调度,启动负载会继续增加。在一个功能较多的匿名化对照样本里,Skills 目录约增加 1,976 tokens,项目规则约增加 395,环境描述约增加 102。它们说明“几千到一万多的初始开销”是合理量级,但不是所有用户都固定相同

真正需要盯住的变量

系统提示通常是稳定底噪;长期会话里更危险的是重复的工具输出、全量日志、整文件读取与不断累积的历史。它们会让有用决策淹没在噪声里,形成 context pollution。

04
实证 · REPRODUCIBLE AUDIT

证据链:一套可复现的窗口审计

最可靠的结论,不来自 UI 上的一条进度条,而来自模型目录、源码、独立请求和服务端 token 计数的交叉验证。

  1. 01 · VERSION固定日期、CLI 版本、模型名与登录方式。
  2. 02 · CATALOG读取 context_windowmax_context_window
  3. 03 · PROBE在空目录发出最小请求,并故意配置 1.05M。
  4. 04 · TELEMETRY读取 task_started 与当轮 token_count
  5. 05 · COUNT用官方 Count input tokens API 做差分归因。
# 1. 固定版本 codex --version # 2. 查看当前远程模型目录 codex debug models | jq ' .models[] | select(.slug == "gpt-5.6-sol") | {context_window, max_context_window, effective_context_window_percent, auto_compact_token_limit, truncation_policy}' # 3. 在空目录做低成本、只读、最小实发探针 codex exec --json \ --ignore-user-config \ --ignore-rules \ --skip-git-repo-check \ --strict-config \ -m gpt-5.6-sol \ -s read-only \ -c model_context_window=1050000 \ -c 'model_reasoning_effort="low"' \ '只回复 OK。不要调用任何工具。'
可复现
  • 固定版本、日期、模型与配置
  • 读当轮 last_token_usage
  • 对同一 payload 做差分计数
  • 把事实、样本与推断分栏
不建议作为主证据
  • 只看 UI 百分比
  • 把累计 token 当当前占用
  • 用字符数除以四冒充精确分词
  • 塞几十万垃圾文本做昂贵压力测试
压力测试在这里反而不是最强证据:Codex 会在接近上限前主动压缩,单纯塞入几十万 tokens 很难区分“模型拒绝”“客户端压缩”和“历史截断”。目录、源码与 telemetry 的交叉验证更直接。
05
生命周期 · GROWTH & COMPACTION

会话如何长大:缓存、累计值与自动压缩

Agent 每调用一次工具,往往就会形成下一次模型请求;同一段历史会被一轮轮重新带上。

松墨纸版画:一只木质压板正把碗中堆积的层状纸张往下压实,压出的部分卷成小卷,隐喻会话增长到阈值后自动压缩
图 4 · 当堆积逼近上限,自动压缩像一记向下的压板,把旧对话压实成更短的摘要,腾出继续往前的空间。
Codex 会话从启动到自动压缩的生命周期 活动输入随对话与工具输出增长,在接近 334800 token 时自动压缩,随后以摘要继续。 活动输入并不会无限线性增长 AUTO COMPACT · 334,800 启动负载 对话 + 文件 工具输出增长 摘要替换旧历史 继续工作
图 5 · 自动压缩让任务继续,但不会无损保留每一个旧细节。重要规则与决策应写入稳定文档,而不是只留在早期对话里。
看哪个数字

last_token_usage.input_tokens 更接近当前这一轮实际送给模型的活动输入。

不要看错

total_token_usage 是多轮请求累计值,完全可以超过百万甚至千万,并不表示单轮窗口越界。

缓存不等于腾空

cached_input_tokensinput_tokens 的子集。缓存可以降低重复计算的成本和延迟,但缓存内容依然是模型这轮可参考的上下文,不能从窗口占用里扣掉。[9]

Codex 的模型目录还可以限制单个工具输出写入历史的预算;本次 Sol 快照使用 tokens/10,000 的截断策略。这不是“每个工具固定占一万”,而是避免单次巨型日志把整条会话迅速挤满。真正长期有效的做法仍是让工具只返回相关片段。

06
对比 · CODEX VS CLAUDE CODE

Codex 与 Claude Code:必须用同一把尺子比较

Claude Code 的优势不是“它没有内部提示词”,而是它当前为符合条件的会话开放了更大的产品池。

松墨纸版画:并排一只小茶碗与一只高量杯,中间立着同一把木尺,隐喻用同一标准比较两个产品
图 6 · 想比较 Codex 与 Claude Code,得用同一把尺子量同类口径——而不是拿一方的模型能力去比另一方的产品预算。
CODEX · SAMPLE
372K

产品目录原始池
用量涨到 334.8K(90%)即压缩

VS
CLAUDE CODE · 1M MODE
1M

支持模型的扩展池
约接近 95% 时自动压缩

维度GPT‑5.6 Sol APICodex + GPT‑5.6 SolClaude Code 1M 模式
模型级总窗口1.05M底层模型相同支持模型为 1M
产品会话公开池应用自行管理本次快照 372K符合模型/套餐条件时接近 1M
系统提示占空间
项目规则占空间应用自行注入AGENTS.mdCLAUDE.md、memory 等
工具 / MCP 占空间
自动压缩由应用策略决定默认 90% raw window默认约接近 95%
用户独占整个数字
可用性条件API 权限与价格版本、账号与远程目录模型、套餐、提供商与开关

Anthropic 当前文档明确提供 opus[1m]sonnet[1m] 选择;部分当前模型原生就是 1M,具体是否自动包含取决于模型、套餐与提供商。[10] Claude Code 也会在用户输入前加载系统提示、CLAUDE.md、记忆、工具名和 Skill 描述,并在长会话中自动清理旧工具输出、总结历史。[11]

公平比较的结论

Codex 与 Claude Code 都要从总池里支付内部开销。 差异不在“谁没有系统提示词”,而在产品当前愿意向一个会话暴露多大的总池、何时压缩,以及哪些套餐承担长上下文的成本。

07
实操 · SPEND CONTEXT WISELY

如何把有限窗口花在真正有价值的内容上

上下文工程不是“塞得越多越好”,而是让每一轮都保留最值得模型继续参考的证据。

应该保留
  • 目标、验收标准和不可违反的约束
  • 已确认决策、变更文件和未完成事项
  • 与当前问题直接相关的代码和日志片段
  • 可验证的测试结果与关键来源
应该减少
  • 完整构建日志和重复报错
  • 与任务无关的整个代码库或大文件
  • 没有使用到的 MCP 与工具 schemas
  • 子 Agent 的全部过程性噪声
一个实用的预算公式

任务可增长空间 ≈ 自动压缩线 − 固定启动负载 − 项目规则 − 已保留历史。 对本次最小样本,它约为 334,800 − 12,446 = 322,354;对工具更多、规则更长的环境则会更少。

08
边界 · FACTS VS INFERENCE

能证明限制存在,但不能替厂商证明动机

严谨的报告不仅要给答案,也要标出答案停在哪里。

已经证实
  • GPT‑5.6 Sol API 规格为 1.05M
  • Codex 0.144.1 目录窗口为 372K
  • 运行时有效窗口报告为 353.4K
  • 用户配置会被 max_context_window 钳制
  • 默认自动压缩线为 raw window 的 90%
合理推断,非官方解释
  • 控制长上下文的服务成本与延迟
  • 避免工具日志造成上下文污染
  • 用压缩、检索与子 Agent 换取稳定性
  • 保持订阅产品的资源预算可预测

OpenAI 没有公开解释“为什么具体选择 372K”。可以观察到的是,GPT‑5.6 Sol 的 API 请求一旦超过 272K 输入,官方模型页注明整个请求会进入更高的长上下文费率:输入 2 倍、输出 1.5 倍。[1] 这能说明长上下文存在真实成本,却不能单独证明 Codex 产品限制的全部动机。

同样,长窗口也不自动等于更高质量。OpenAI 的 Codex 文档把无关日志造成的可靠性下降描述为 context pollution / context rot,并建议用子 Agent 把过程噪声留在独立窗口。[8] 这是工程上的合理取舍,但仍应与“厂商官方解释”分开书写。

版本与账户边界

远程模型目录可以随版本、账号、套餐、地区与灰度发布变化。复查时应重新运行 codex debug models 和最小探针,而不是把本报告的 372K 当作永久常数。

结语 · CODA

真正该记住的,不是一个数字,而是一串口径

模型规格写的是能力上限,产品会话交付的是上下文预算。 对这次带版本号的 Codex GPT‑5.6 Sol 快照,准确答案是一串数字:1.05M 模型规格、372K 产品原始窗口、353.4K 有效 telemetry、334.8K 默认压缩线,以及约 322K 的最小样本任务增长空间

Claude Code 1M 模式的产品池更大,但它同样要支付系统提示、工具、项目规则、历史与输出成本。上下文工程的成熟标志,不是执着于“能不能塞满”,而是知道什么值得留下,什么应该在进入窗口之前就被过滤

更大的窗口给你余地;更干净的上下文,才真正给模型判断力。

09
考据 · SOURCES & METHOD

来源与方法

研究方法:先以官方模型页确认底层规格,再固定 Codex CLI 0.144.1,通过模型目录、固定版本源码、空目录最小请求、session telemetry 和 OpenAI Token Counting API 进行交叉核验。Claude Code 部分仅采用 Anthropic 官方产品与平台文档。所有实测数字均标明版本与日期;厂商未公开解释的动机单独列为推断。

  1. GPT‑5.6 Sol Model — OpenAI API Docs · 1.05M 上下文、最大输入/输出与长上下文计价说明。
  2. Codex 0.144.1 Model Catalog — OpenAI Codex 源码 · 372K 目录窗口与工具输出截断策略。
  3. Codex ModelInfo 协议 — OpenAI Codex 源码 · 95% 有效窗口的默认值与 headroom 说明。
  4. Codex 自动压缩阈值 — OpenAI Codex 源码 · 默认 raw window 的 90%。
  5. Codex 配置钳制逻辑 — OpenAI Codex 源码 · 配置窗口与 max_context_window 取最小值。
  6. Codex 请求结构 — OpenAI Codex 源码 · input、tools、base_instructions 与 output_schema。
  7. Counting tokens — OpenAI API Docs · 对消息、指令、文件与工具 schemas 进行模型级精确计数。
  8. Why subagent workflows help — OpenAI Codex Docs · context pollution、context rot 与子 Agent 隔离。
  9. Prompt caching — OpenAI API Docs · 缓存输入的计数与使用方式。
  10. Claude Code extended context — Anthropic Claude Code Docs · opus[1m]sonnet[1m] 与可用条件。
  11. Explore the context window — Anthropic Claude Code Docs · CLAUDE.md、记忆、工具、Skills 与压缩后保留规则。
  12. How Claude Code works — Anthropic Claude Code Docs · 旧工具输出清理与自动摘要机制。
  13. Context windows — Anthropic Platform Docs · 1M 总窗口的定义、计入项与支持模型。

视觉系统:松墨纸 · Pinemark。图表为本报告基于公开数据绘制的内联信息图。
本报告由 Will 收集整理,仅供学习研究;易变数字与产品可用性请以一手来源和实测为准。