codex通过agents.md规则扫描、文件权重队列、轻量ast解析定位关键代码;压缩分自动/手动/预防三类触发,按固定/热/温/冷四层迁移记忆,保路径行号等精准坐标。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当你在 Codex 中输入“帮我重构 service 层的错误处理逻辑”,它能准确识别出你指的是当前 Rust 项目中 src/service/error.rs 和对应的 tests/ 目录下三处调用点,而不是把整个 20 万行代码库全塞进上下文里硬读——这背后不是靠暴力加载,而是靠一套分层筛选与动态压缩机制实时协同工作。
Codex 如何定位关键代码文件
第一步:Codex 启动时自动扫描项目根目录下的 AGENTS.md,从中提取 focus_dirs、exclude_patterns 和 entry_points 三项规则。若未找到 AGENTS.md,则向上递归查找,直到遇到 .git 目录为止。
第二步:根据规则生成文件优先级队列。入口文件(如 main.rs、lib.rs)权重为 10;被 focus_dirs 明确包含的目录下所有 .rs 文件权重为 7;其余同名测试文件(如 *_test.rs)权重为 5;日志、锁文件、target/ 下内容直接排除。
第三步:对高权重文件执行轻量解析——仅提取 AST 中的模块声明、结构体定义、impl 块签名和 pub 函数头,不展开函数体。这一步避免加载冗余实现细节,但保留了接口契约信息。
上下文压缩触发时机与判断依据
方法一:自动触发(默认启用)
当当前会话累计 token 使用量 ≥ auto_compact_token_limit(默认值由 models.json 中 ModelFamily 配置决定,GPT-5.2-Codex 为 196608)时,系统在下一轮任务开始前强制启动压缩。
方法二:手动触发
在 CLI 中输入 /compact 命令,立即执行一次温数据层压缩。该操作不可逆,【原始 rollout 日志将从当前 session 的 live history 中移除】,仅保留结构化摘要。
方法三:预防性触发
每轮对话结束后,Codex 估算本次新增 token 占比。若预估下轮将超限,则提前压缩最旧的两轮对话+对应工具输出,而非等满再压——这避免了悬崖式崩溃。
压缩过程如何保重点、去噪音
压缩不是删文字,而是做记忆分层迁移:
① 固定层内容(如 AGENTS.md 全文、用户权限规则)始终保留在 prompt 构造阶段重新注入,不占用对话窗口。
② 热数据层(最近 3 轮对话 + 刚编辑的 2 个文件)保持原文不动,确保上下文连贯性。
③ 温数据层(4–12 轮前的历史)被模型自主识别出核心决策链,例如:“用户要求统一用 anyhow::Result → 已修改 error.rs 的 trait bound → 测试通过但 integration_test.rs 报错”——这一串被压缩为一句结构化交接单,替换掉原始 17 条消息和 487 行日志。
④ 冷数据层(完整 test output、cargo build --verbose 输出、PDF 文档全文)彻底不进窗口,仅存检索锚点。需要时通过 MCP 协议按需拉取。
这一步的关键在于:模型不会把“src/service/error.rs 第 42 行改成了 anyhow::Result”压缩成“改了错误类型”,而是保留具体路径、行号、类型名——因为这些是后续精准跳转和修改的必要坐标。











