Codex 源码导读:第四部分——上下文压缩与继续执行

第四部分:上下文压缩与继续执行

一句话

工具执行会让会话历史不断变长。Codex 在模型请求前检查上下文容量;达到阈值时,先用一次压缩流程生成摘要,替换当前工作历史,再继续同一个 Turn。

主流程

text 复制代码
准备下一次模型请求
  ↓
检查 token / context window
  ├─ 未达到上限 → 直接编译 prompt
  └─ 达到上限 → 运行 compact
                    ↓
              生成摘要、保留必要用户消息
                    ↓
              替换 Session 的工作历史
                    ↓
              重新计算 token 用量
                    ↓
              编译新的 prompt,继续模型调用

压缩是主循环中的分支,不是 Turn 的终止状态。压缩成功后,原任务继续执行;只有上层 Loop 判断不再需要后续步骤时,Turn 才结束。

触发点

  • session/turn.rs:1033:开始正常采样前执行 run_pre_sampling_compact。
  • session/turn.rs:461 附近:本轮还需要继续时,发现上下文窗口不足,进入 mid-turn compact。
  • session/turn.rs:1199:run_auto_compact 根据配置和 Provider 能力选择本地或远端压缩路径。

压缩产生什么

压缩请求从当前历史提取摘要,随后构建新的历史:

text 复制代码
新历史 = 预算内保留的用户消息 + CompactionSummary

必要时还会把环境、工作区等初始上下文插回摘要前的指定位置。最后通过 Session::replace_compacted_history 替换工作历史,并重新计算 token 使用量。

对应代码:

  • compact.rs:352-398:收集用户消息、生成摘要、构建替代历史并写回 Session。
  • compact.rs:657-734:按 token 预算保留用户消息并追加 CompactionSummary。
  • compact_remote.rs:281-295:远端压缩完成后同样替换 Session 历史。

压缩后怎样进入下一次模型请求

压缩并不会直接修改某个已经发出的请求,而是修改 Session 的当前工作历史。下一次采样时,run_sampling_request 重新读取它:

text 复制代码
Session.clone_history()
  → history.for_prompt(...)
  → build_prompt(...)
  → client_session.stream(...)

对应 session/turn.rs:1394-1411 和 :2239-2254。因此模型看到的是压缩后的历史,而不是原来完整、超长的历史。

需要注意的边界

  1. 压缩请求本身也是一次模型或后端请求,但它的产物是摘要,不是面向用户的最终回答。
  2. 实际历史对象仍由 Session 持有;压缩只是替换"供后续请求使用的工作历史"。
  3. 压缩和工具执行是两个阶段:工具结果先写入历史,容量检查发现不够时,才触发压缩。
  4. "继续还是结束"仍由 Agent Loop 决定,压缩层只负责降低上下文体积并返回可继续使用的历史。

源码基线:OpenAI Codex d58d0e5841e0de08e251673db2d5af8cf3a1ad51。文中的流程图用于标出本篇所处的运行阶段。

相关推荐
Jlzn88888 小时前
华东电芯分选通道数怎么配才不堵线
java·人工智能·架构·自动化·制造
CCblandy8 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
阡陌数智8 小时前
Gemini 4 Argon 百万 Token 输出能力解析:原生长输出模型的工程落地与并发成本治理
人工智能·架构
海宇数据11 小时前
零信任架构实战:基于海宇入职背调报告构建自动化即时配送与网约车众包运力准入鉴权网关
运维·人工智能·架构·自动化
天远API12 小时前
零信任架构实战:基于天远公安二要素政务版构建自动化不动产交易与契税核算实名核实网关
人工智能·架构·自动化·php
预知同行13 小时前
深入解析 MoE 混合专家模型:从 Router 到 All-to-All 的架构全景与生产实践
后端·架构
Linye13 小时前
换个会话就忘了方案?我把项目约定写成了一个文件
架构
KylinLab13 小时前
四条主张五条禁令:人不在环内的组织级契约
架构
奔跑的架构师13 小时前
[A-51]ARMv9/v8-SCMI系统架构
linux·arm开发·架构·系统架构·arm
糖果豆豆13 小时前
让 AI 自查三遍,它只会把错的说得更像对的——检查的人和被检查的,是同一个
算法·架构