Codex 上下文压缩问题与解决教程
1434 字
7 分钟
Codex 上下文压缩问题与解决教程
Codex 上下文压缩问题与解决教程
1. 问题现象
Codex 长时间执行任务后,会自动压缩较早的对话内容。
压缩后可能出现以下问题:
- 把已经废弃的旧要求重新拿出来执行;
- 混淆新需求和旧需求;
- 把助手提出的建议当成用户已经确认的决定;
- 忘记哪些步骤已经完成,导致重复修改;
- 丢失文件路径、接口地址、版本号和参数;
- 把尚未验证的推测写成确定结论。
例如:
最初要求使用方案 A,后来明确改成方案 B。压缩后可能被错误总结成:
项目可以使用方案 A 或方案 B。正确状态应该是:
方案 A 已废弃,当前只使用方案 B。2. 解决方法
可以给 Codex 设置自定义上下文压缩 Prompt,让它在压缩时重点保留:
- 当前有效需求;
- 已废弃的旧方案;
- 已完成和未完成的工作;
- 尚未确认的建议;
- 文件路径、命令、版本和参数;
- 已验证事实和未验证推测;
- 下一步需要执行的操作。
Codex 可使用以下配置项:
experimental_compact_prompt_file = "压缩Prompt文件的绝对路径"也可以直接写入:
compact_prompt = """自定义压缩 Prompt"""建议使用独立文件,后续修改和备份更方便。
3. 创建压缩 Prompt 文件
Windows
创建文件:
D:\Codex\prompts\context-compaction.mdLinux 或 macOS
创建目录和文件:
mkdir -p ~/.codex/promptsnano ~/.codex/prompts/context-compaction.md将下面的内容保存到文件中:
Create a high-fidelity handoff summary for the model that will continue thisconversation after earlier context is removed.
Accuracy and task continuity are more important than brevity.
Include:
1. Current objective - Record the user's current objective and current task. - When instructions conflict, follow the latest explicit user correction.
2. Active requirements - Preserve all current requirements, constraints, exclusions, and acceptance criteria. - Clearly mark requirements that were rejected or superseded.
3. Decisions and status - Separate accepted decisions, rejected options, superseded plans, unconfirmed proposals, unresolved questions, failed attempts, work in progress, and completed work. - Never treat a suggestion or unanswered question as an accepted decision.
4. Exact technical details - Preserve exact file paths, URLs, API routes, function names, versions, commands, values, counts, identifiers, and important state changes. - Do not replace precise identifiers with general descriptions.
5. Evidence - Distinguish user-provided facts, assistant suggestions, tool results, inferences, and verified conclusions. - Keep uncertain information marked as uncertain.
6. Work history - Record what has been completed, partially completed, failed, or not started. - Record which completed steps must not be repeated. - Preserve useful files, logs, patches, outputs, and references.
7. Next steps - List the next concrete actions in dependency order.
Remove repeated discussion, routine narration, and unnecessary raw logs.Use enough detail to preserve the correct task state.4. 修改 Codex 配置文件
Codex 用户配置文件通常位于:
~/.codex/config.tomlWindows 示例
experimental_compact_prompt_file = "D:/Codex/prompts/context-compaction.md"Windows 路径建议使用 /,避免反斜杠转义问题。
也可以使用单引号:
experimental_compact_prompt_file = 'D:\Codex\prompts\context-compaction.md'Linux 或 macOS 示例
experimental_compact_prompt_file = "/home/用户名/.codex/prompts/context-compaction.md"不要直接照抄 用户名,需要替换成自己的实际用户目录。
也可以先执行:
echo $HOME然后将输出路径写入配置。
5. 重新启动 Codex
配置保存后:
- 关闭当前 Codex CLI 或 IDE 会话;
- 重新启动 Codex;
- 建议新建一个会话测试;
- 不要只询问 Codex“配置是否生效”,应通过实际压缩结果判断。
6. 测试是否生效
可以在测试对话中依次输入:
当前先使用方案 A。然后输入:
废弃方案 A,最终改用方案 B,后续不要再执行方案 A。再输入:
步骤 1 已完成。步骤 2 执行失败。步骤 3 尚未开始。文件 config.json 不要再次修改。方案 C 只是建议,我还没有确认。当上下文发生压缩后,让 Codex输出:
请列出:1. 当前有效方案;2. 已废弃方案;3. 已完成、失败和未开始的步骤;4. 尚未确认的建议;5. 禁止再次修改的文件。不要执行任何修改。正确结果应该包含:
- 当前方案是 B;
- 方案 A 已废弃;
- 步骤 1 已完成;
- 步骤 2 失败;
- 步骤 3 未开始;
- 方案 C 尚未确认;
config.json不得再次修改。
7. 常见问题
配置没有生效
检查以下内容:
- 是否修改了正确的
config.toml; - Prompt 文件是否真实存在;
- 是否使用绝对路径;
- 路径是否写错;
- TOML 引号是否正确;
- 修改后是否重启 Codex;
- 当前 Codex 版本是否支持该配置项。
Windows 路径报错
不要优先使用:
experimental_compact_prompt_file = "D:\Codex\prompts\context-compaction.md"双引号中的反斜杠可能被当成转义字符。
改为:
experimental_compact_prompt_file = "D:/Codex/prompts/context-compaction.md"或者:
experimental_compact_prompt_file = 'D:\Codex\prompts\context-compaction.md'压缩后仍然重复旧任务
可以在 Prompt 中补充:
Do not restore superseded requirements unless the user explicitly reactivates them.Mark completed work that must not be repeated.正常对话中也应尽量明确表达:
方案 A 已废弃,后续禁止再次执行。不要使用过于模糊的说法:
方案 A 暂时不用。Prompt 太长
压缩 Prompt 不需要写得非常长。
重点保留:
- 当前任务;
- 有效需求;
- 已废弃需求;
- 已完成和未完成状态;
- 精确路径和参数;
- 未确认建议;
- 下一步操作。
重复说明和大量示例可以删除。
8. 长任务的额外建议
对于持续时间较长的项目,可以在项目中增加:
PROJECT_STATE.md示例:
# 当前任务状态
## 当前目标
完成用户登录接口。
## 当前方案
使用 JWT。
## 已废弃方案
Session 登录方案已废弃。
## 已完成
- 数据库表已创建;- 登录接口已完成;- 单元测试已通过。
## 未完成
- 刷新 Token;- 退出登录接口。
## 禁止重复修改
- `src/config/database.ts`
## 下一步
实现刷新 Token 接口。这样即使聊天上下文压缩不完整,Codex 也可以从项目文件重新读取当前状态。
9. 参考地址
原帖:
https://linux.do/t/topic/2686152Codex 配置参考:
https://developers.openai.com/codex/config-reference文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Codex 上下文压缩问题与解决教程
https://firefly-mu-weld.vercel.app/posts/codex-context-compaction-guide/