跳转至

Claude Code vs Codex 上下文架构:五层压缩管道 vs 容器文件系统

Ch01.286 Claude Code vs Codex 上下文架构:五层压缩管道 vs 容器文件系统

📊 Level ⭐⭐ | 12.9KB | entities/claude-code-vs-codex-context-architecture-02.md

核心命题

Claude Code 与 Codex 在"如何让模型看到需要的信息"上给出了方向完全相反的答案:

  • Claude Code:精密的五层压缩管道,把有限上下文窗口用到极致
  • Codex:容器文件系统绕开上下文限制,按需读取,理论上无上限

Claude Code:上下文窗口是一切的边界

Claude 4.6 系列上下文窗口 100 万 token,但在实际软件工程任务(反复读取大文件、运行命令、解析输出)里比预想更快填满。

CLAUDE.md 四层结构

上下文注入入口,按优先级从低到高:

层级 范围 Token占用 典型内容
L1 全局 ~/.claude/CLAUDE.md 全部注入 个人代码风格偏好、常用命令别名
L2 用户 ~/.claude/ 里的 @import 全部注入 通过 @import 引入其他文件
L3 项目 ./CLAUDE.md(git 追踪) 全部注入 架构约定、构建命令、测试流程
L4 本地 ./CLAUDE.local.md(gitignore) 全部注入 本地路径、临时调试开关

四层都在 context assembly 时硬注入——无论 token 多少,总是出现在上下文里。

Auto Memory:LLM 驱动的记忆选取

不用向量相似度检索,而是用专门 LLM 调用做记忆选取:

  • MEMORY.md(索引/摘要)先注入上下文
  • 需要时 LLM 扫描 frontmatter 的 description 字段,选出最相关的至多 5 个记忆文件
  • 代价:牺牲向量检索效率
  • 收益:人类可读、可版本控制的记忆系统(普通 Markdown)

Claude Code 五层压缩管道

按代价从低到高依次触发,每层只在更轻的层不足以解决问题时才启用:

第一层:Budget Reduction(预算削减)

  • 触发:任何包含大型工具输出的 turn
  • 机制:每个工具有 maxOutputTokens 预算。bash 默认约 50K token。超限时在写入对话历史前截断,追加 [output truncated: N bytes total, showing last M bytes]
  • 特点:最轻量层,数据进入上下文前就介入,不修改已有历史

第二层:Snip(片段截断)

  • 触发:context 超过阈值(依模型窗口而定)
  • 机制:从最早非系统消息开始,识别并截断大型 tool_result 消息块。只截断工具输出,不截断用户消息和 assistant 文本。插入 [content snipped to save context] 占位符
  • 特点:纯文本操作,不调用模型,延迟极低

第三层:Microcompact(微压缩)

  • 触发:Snip 之后 context 仍接近上限
  • 机制:专门压缩模型调用,把连续工具调用/结果序列压缩成短摘要
  • 例子read file A → content、read file B → content → "读取了 A、B 两个配置文件,关键信息:[摘要]"
  • 特点:需要额外 LLM 调用,有延迟和成本,但保留语义信息而非直接截断

第四层:Context Collapse(上下文折叠)

  • 触发:context 持续接近上限,Microcompact 已多次触发
  • 机制读时投影设计——不修改 REPL 数组(对话历史的内存表示),而是:
  • 在 collapse store 存储一条摘要消息(对之前全量历史的语义压缩)
  • context assembly 时用"摘要 + 最近 N 轮历史"替代完整历史
  • 完整历史仍保存在磁盘(JSONL 文件),不丢失

  • 特点:读时投影设计保证完整审计记录同时控制当前上下文大小

第五层:Auto-compact(自动压实)

  • 触发:context 使用量超过约 95%(接近上下文窗口上限)
  • 机制:一次性全量重压——用压缩 prompt 把整个对话历史重写成结构化工作状态摘要,替换历史,重置对话
  • 效果:从模型视角看像开始新对话,但工作状态(已完成的工作、当前进度、关键发现)通过摘要保留
  • 特点:代价最高层——额外 LLM 调用、明显延迟、信息损耗(压缩总有损)

Codex Cloud Agent:文件系统即上下文

根本不同:不是管理上下文里有什么,而是按需从文件系统取

仓库快照注入

任务启动时把整个 GitHub 仓库克隆进容器。之后模型通过 shell 命令按需访问任何文件——没有"把所有相关文件塞进上下文"步骤。

实际约束

  • Codex 不受"一次性必须塞进上下文"约束,理论上可处理任意大代码库
  • 但模型必须能正确判断需要读哪些文件
  • 依赖搜索(grep、find)和模式识别定位相关代码
  • 风险:代码库组织不规范或问题需要跨很多文件时,可能遗漏关键上下文

没有 CLAUDE.md 等效物

项目上下文通过以下方式传递:

  • 任务描述本身(提交任务时显式说明约束)
  • README 和文档文件(模型主动读取)
  • 代码本身(从已有代码模式里推断风格约定)

偏向"从代码里读取约定"而非"从配置文件里读取约定"。

两种策略关键差异

维度 Claude Code Codex
核心策略 主动注入 + 压缩管理 按需读取 + 自主判断
上下文控制 精确控制(代价:压缩有损) 无上限(代价:可能遗漏关键文件)
完整性 高——只要压缩算法够好,模型看到的是完整有组织的 中——依赖模型判断文件优先级
延迟 压缩有额外延迟 每次 shell 读取都是工具调用,有延迟
适用场景 同步交互(用户可能在任何时候问"你刚才为什么这么做") 异步执行(中间过程不需要对用户可解释)

执行模型差异根源

Claude Code 的同步交互需要每轮对话都有完整上下文(用户可能随时追问),而 Codex 的异步执行只需要完成任务,中间过程不需要对用户可解释。

深度分析

五层管道的协同逻辑

五层压缩管道不是独立运作的,而是按代价梯度排列的防御体系:

层级 触发阶段 干预方式 调用模型 代价
Budget Reduction 数据入口前 截断工具输出 极低
Snip context 超阈值 文本截断+占位符 极低
Microcompact Snip 不够 LLM 摘要连续工具调用 中等
Context Collapse 持续压力 写时投影+读时替换 低(I/O)
Auto-compact 约 95% 上限 全量重压缩 极高

Budget Reduction 和 Snip 是纯机械操作(不调模型),构成了 90%+ 场景的第一道防线。只有当这两层无法解决问题时,才动用 Microcompact 的 LLM 调用能力。

"读时投影"的设计哲学

Context Collapse 的读时投影(read-time projection)是整个管道里最值得细究的设计:

传统方案:把历史改写成摘要 → 保存摘要 → 丢弃原始数据 → 上下文变小 Claude Code:保存原始数据 → 生成摘要 → 读时用"摘要+最近轮次"替代 → 原始数据仍在磁盘

这意味着上下文可见性历史完整性被解耦了。Auto-compact 是这个设计哲学的极端版本——它在触发时确实会丢弃原始历史,但它产生的是结构化工作状态摘要而非简单截断,而且通过压缩 prompt 的精心设计尽量保留"已完成的工作、当前进度、关键发现"这三个维度。

Codex "文件系统即上下文"的隐含成本

Codex 的方案看起来优雅,但有两个隐藏成本:

  1. 每次读取都是工具调用:模型发出 shell 命令读文件 → 等待执行 → 解析输出。这比直接塞进上下文多了网络往返和进程创建的 overhead。在高并发场景下这是实质延迟。

  2. 模型判断失误的风险:当代码库有 100 万行,模型不可能遍历所有文件。它依赖 grep/find 做模式匹配。但当问题的上下文分散在多个看似无关的文件里时(大型重构场景),模型可能遗漏关键文件而不自知。Claude Code 的压缩管道至少保证了模型"看到"的信息是完整且有组织的。

两种架构背后的认知假设

这两套架构代表了两种截然不同的认知假设

  • Claude Code 假设:模型需要尽可能完整的上下文才能做出高质量决策;遗漏任何关键信息都可能导致错误的方向
  • Codex 假设:模型需要的是正确的上下文,而非更多的上下文;按需读取降低了总上下文量,反而可能提升决策质量

这两个假设在不同的任务类型下各有胜负。

实践启示

选型建议

  • 同步协作场景(Code Review、调试、带用户旁观的修改):选 Claude Code 的压缩管道——用户随时可能追问,模型必须有完整上下文
  • 异步批处理场景(大型重构、跨仓库迁移、夜间巡检):Codex 的按需读取更合适——中间过程不需要对用户可解释,上下文上限更有价值

Claude Code 用户:理解 Auto Memory 的取舍

Auto Memory 不用向量检索而用 LLM 驱动选取——这意味着你可以直接编辑 MEMORY.md 来管理记忆。当你发现某个重要项目上下文没有被正确回忆起时,可以手动在 frontmatter 的 description 字段补充关键词,让 LLM 的相似度判断更准确。这是少见的"人类直接介入 agent 记忆系统"的设计,值得利用。

Claude Code 用户:监控压缩层级

当你在长会话里观察到 ⚠️ context rebuilding 或类似信号,说明 Auto-compact 已触发——这是高代价操作。可以通过提前清理 memory/ 目录或主动折叠会话(开启新会话并通过 MEMORY.md 传递上下文)来避免被动触发 Auto-compact。

Codex 用户:维护项目文档

由于没有 CLAUDE.md 等效机制,Codex 高度依赖模型主动读取 README 和代码来推断项目约定。这意味着高质量的 README 和代码注释的密度直接影响了 Codex 的执行质量。在大型代码库中维护一份结构清晰的 ARCHITECTURE.md(说明关键文件位置和模块边界)是提高 Codex 准确率的最有效手段。

相关主题

相关实体