Codex 的压缩机制是「加密摘要」——跨会话上下文传递才是真正的核心
深入剖析 Claude Code 的 compact() 机制、Codex 的 AES 加密摘要方案,以及通过 JSONL 日志检索和 resume-prompt.md 实现跨会话无缝切换的工程实践。
快速摘要
深入剖析 Claude Code 的 compact() 机制、Codex 的 AES 加密摘要方案,以及通过 JSONL 日志检索和 resume-prompt.md 实现跨会话无缝切换的工程实践。
用 Claude Code 时间久了,你一定见过「Compacting conversation…」这条提示。之后,答案开始跑偏,等待时间也明显变长。200K token 的上下文窗口,填满的速度比你预想的快得多。
坊间一直有传言说 OpenAI 的 Codex 在这方面处理得更聪明,于是我把能找到的公开分析全都研究了一遍。
摘要,本质上也是遗忘
对话变长之后,AI 遗忘早期内容是结构性限制,无法回避。上下文窗口硬卡在 200K token,一个稍大的编程会话就能轻松突破。就算做了摘要,原始对话已经消失——准确度的下滑是必然结果。
我自己就踩过几十次这个坑:压缩之后再问「我们之前讨论的那个函数」,得到的答案完全是错的。
- Claude Code 默认的 200K token 窗口,一次大型重构就能耗尽
- 摘要替换原文 → 细节上下文丢失 → 回答质量下降
- 工具调用结果在摘要中被压平,破坏性尤为严重
Codex 的压缩是「加密摘要」
Krafton 的 CAIO Kangwook Lee 通过两次 prompt 注入对 Codex 内部流水线做了逆向分析,结论相当有意思。
当 Codex 模型的 compact() API 被调用时,服务端会起一个独立的 LLM 对对话进行摘要,并将结果以 AES 加密后返回。下一轮对话开始时,这段密文被解密,加上「以下是上一段对话的摘要」之类的交接 prompt,再一并送入模型。
- 内容与开源 Codex CLI 对非 codex 模型所用的压缩 prompt 高度相似
- 为何要加密目前尚不明朗——可能包含工具调用的恢复数据
- 整个流程用 35 行 Python 即可复现(Kangwook Lee 已公开脚本)
- OpenAI 官方 API 支持通过
compact_threshold参数在服务端自动触发压缩
真正的差异在于会话如何交接
比压缩机制本身更值得关注的,是跨会话的上下文传递。有位开发者的自动化方案让我印象深刻——我把它称为「会话交接」模式。
具体做法是:在压缩触发前,写入工具被锁定,仅从 JSONL 会话日志中提取用户消息和 thinking block。相比原始数据,体量压缩了 98%。随后,三个子智能体通过检索原始日志找出摘要中的遗漏,最终汇总成一份 resume-prompt.md 文件。
VS Code 的文件监听器检测到这个文件后,自动开启新会话,无缝继承之前的上下文。
- 压缩前钩子在触发前锁定写入 → 防止在不完整状态下修改代码
- JSONL → MD 转换只保留用户消息 + 系统消息 + thinking block
- 子智能体负责差距分析,从原始日志中检索缺失信息
- 实测构建效率提升约 10 倍
真正的核心是会话日志检索与 KV cache
会话数据以 JSONL 文件持续积累,决定成败的关键在于能否从中精准检索到所需上下文。答案不是把摘要做得更好,而是跨历史会话的检索式搜索。
再考虑 KV cache 命中率,复用相同的 prompt 前缀可以同时降低成本、压缩响应延迟。在设计自己的会话目录结构时,基于 session-id 的归档对检索速度的提升最为显著。结合昨天介绍的 QMD 做预索引,看起来也是一个值得探索的方向。
- 保留原始 JSONL 使得需要时可以精确检索
resume-prompt.md包含:上一会话摘要 + 差距分析结果 + 已修改文件列表- 固定系统 prompt 和交接 prompt 前缀,可最大化 KV cache 命中
- 会话归档自动化,支撑数十个连续会话之间的上下文流转
AI 编程的真正瓶颈是上下文管理
AI 编程工具的真正瓶颈不是模型能力,而是上下文管理。比起把摘要做到极致,设计一套能够检索「已遗忘内容」的系统才更关键。
压缩必然带来信息损失。真正重要的是同时构建两套体系:一套能从历史中检索丢失信息的搜索流水线,以及一套在会话切换时不留断层的交接架构。
本文基于 Kangwook Lee, CAIO 的分析整理。
订阅通讯
获取关于我最新项目、文章以及 AI 和 Web 开发实验的更新。