【Bug已解决】codex: conversation context window exceeded / Token limit reached — CodeX CLI 上下文窗口超限解决方案1. 问题描述CodeX CLI 在长对话中报上下文窗口超限# 上下文超限 $ codex --continue Error: context_length_exceeded This models maximum context length is 128000 tokens. However, your messages resulted in 150000 tokens. # 或对话中途报错 $ codex 继续分析... Error: context window exceeded The conversation has grown too long. # 或工具结果导致超限 $ codex 运行 find / -name *.js # 搜索结果太大 Error: Tool result exceeds context window # 或系统提示对话工具结果总和超限 $ codex --system-prompt $(cat large-prompt.txt) Error: Total tokens exceed model limit System prompt conversation tool results 200000 128000这个问题在以下场景中特别常见长对话历史累积过多大文件或大量搜索结果系统提示过长使用小窗口模型gpt-4o-mini 128K工具结果过大多轮复杂对话2. 原因分析核心原理拆解系统提示 对话历史 工具结果 → 总 Token 计数 ↓ 超过模型最大上下文窗口 ↓ context_length_exceeded原因分类表原因分类具体表现占比长对话累积--continue 历史约 35%工具结果大搜索/命令输出约 25%系统提示长prompt 过大约 20%小窗口模型mini 128K约 10%大文件读取文件过大约 5%多轮复杂深度对话约 5%3. 解决方案方案一开新会话最推荐# 步骤 1不要 --continue开新会话 codex # 不使用 --continue # 步骤 2保存之前的讨论 codex 将之前的讨论总结保存到 docs/summary.md # 步骤 3新会话引用总结 codex 参考 docs/summary.md 继续 # 步骤 4验证 codex --debug 21 | grep -i token方案二使用更大窗口的模型# 步骤 1切换到 o1200K 窗口 codex --model o1 分析代码 # 步骤 2或使用 gpt-4o128K codex --model gpt-4o 分析代码 # 步骤 3避免使用小窗口模型 # gpt-4o-mini: 128K但容易超限 # 步骤 4验证 codex --model o1 --debug 21 | grep -i context\|token方案三减少系统提示# 步骤 1检查系统提示大小 wc -c system-prompt.txt # 如果 10KB精简 # 步骤 2精简系统提示 # 只保留必要指令删除冗余描述 # 步骤 3或移除系统提示 codex task # 不使用 --system-prompt # 步骤 4使用简短指令 codex --system-prompt 代码助手 task方案四限制工具结果# 步骤 1限制搜索结果 # 错误: codex 搜索所有文件 # 正确: codex 搜索 src/ 下 .js 文件中的 TODO只显示前 10 个 # 步骤 2使用管道限制输出 codex 运行 find src/ -name *.js | head -20 # 步骤 3限制命令输出 codex 运行 npm test 21 | tail -30 # 步骤 4使用 grep 过滤 codex 运行 grep ERROR /var/log/app.log | tail -20方案五分块处理大文件# 步骤 1不要一次性读取大文件 # 错误: codex 分析 src/generated.js100000 行 # 正确: codex 分析 src/generated.js 第 1-200 行 # 步骤 2使用 head/tail codex 运行 head -n 200 src/generated.js 并分析 # 步骤 3使用 grep 定位 codex 运行 grep function src/generated.js 并分析函数列表 # 步骤 4分步分析 codex 第一步: 列出 src/generated.js 中的所有函数 codex 第二步: 分析第一个函数 # 新会话方案六使用 --print 模式# 步骤 1--print 模式不累积对话 codex --print 分析代码 --max-turns 5 # 步骤 2每个任务独立 --print codex --print 分析 src/auth.js --max-turns 5 codex --print 修复 bug --max-turns 10 # 步骤 3CI/CD 中使用 codex --print --no-stream task --max-turns 10 # 步骤 4验证 codex --print hello --max-turns 14. 各方案对比总结方案适用场景推荐指数难度方案一新会话长对话⭐⭐⭐⭐⭐低方案二大窗口超大输入⭐⭐⭐⭐低方案三减提示系统提示⭐⭐⭐⭐低方案四限工具工具结果⭐⭐⭐⭐⭐低方案五分块大文件⭐⭐⭐⭐⭐低方案六--printCI/CD⭐⭐⭐⭐⭐低5. 常见问题 FAQ5.1 各模型的上下文窗口模型上下文窗口gpt-4o128Kgpt-4o-mini128Ko1200K5.2 如何查看当前 Token 用量codex --debug 21 | grep -i token5.3 --continue 为什么容易超限--continue 加载之前的对话历史历史越长累积的 Token 越多。5.4 如何估算 Tokenpython3 -c import tiktoken enc tiktoken.encoding_for_model(gpt-4o) text open(file.js).read() print(fTokens: {len(enc.encode(text))}) 5.5 128K tokens 大约多少约 96,000 英文单词约 3,000-5,000 行代码。5.6 工具结果占多少 Token取决于输出大小。find / -name *.js可能返回 100K tokens。5.7 系统提示占多少 Token通常 500-5000 tokens。过长的系统提示会挤占对话空间。5.8 --print 模式会超限吗--print不累积对话历史每次独立。但如果单次输入工具结果超限仍会报错。5.9 如何避免长对话超限每个任务开新会话将总结保存到文件使用--print模式限制工具输出5.10 排查清单速查表□ 1. 开新会话不用 --continue □ 2. 保存总结到文件 □ 3. --model o1 使用 200K 窗口 □ 4. 精简系统提示 □ 5. 工具输出: head -n 20 □ 6. 搜索: grep tail 限制 □ 7. 大文件: head -n 200 分块 □ 8. --print 模式不累积 □ 9. codex --debug 查看 Token □ 10. tiktoken 估算 Token 数6. 总结根本原因上下文超限最常见原因是长对话累积35%和工具结果过大25%最佳实践开新会话不 --continue将讨论总结保存到文件新会话引用模型选择使用o1200K 窗口处理大上下文或gpt-4o128K限制工具使用head -n 20、tail -n 30、grep限制搜索结果和命令输出最佳实践建议使用--print模式处理独立任务每个任务不累积对话将成果写入文件故障排查流程图flowchart TD A[上下文窗口超限] -- B{是 --continue?} B --|是| C[开新会话] B --|否| D{工具结果大?} C -- E[保存总结到文件] E -- F[新会话引用文件] F -- G[codex 验证] D --|是| H[限制输出] D --|否| I{系统提示长?} H -- j[head -n 20 或 tail -n 30] j -- G I --|是| K[精简系统提示] I --|否| L{大文件?} K -- G L --|是| M[分块处理] L --|否| N[使用大窗口模型] M -- O[head -n 200 分块] O -- G N -- P[--model o1 200K] P -- G G -- Q{成功?} Q --|是| R[✅ 问题解决] Q --|否| S[使用 --print 模式] S -- T[codex --print --max-turns 5] T -- R R -- U[每任务独立会话] U -- V[✅ 长期方案]