尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Codex越聊越笨原因+立刻解决方案:compact、clear与codexignore配置实战

Codex越聊越笨原因+立刻解决方案:compact、clear与codexignore配置实战 1. Codex 长会话为什么越聊越笨上下文窗口膨胀的真实表现如果你用 Codex CLI 写过稍大一点的项目大概率遇到过这种场景前半小时它还能准确改对文件、记得住你的约束聊到后面开始忘事——明明说过不要动package.json它还是给你改了明明上一轮已经确认用zod做校验下一轮又给你换成手写if。这不是模型突然变傻而是上下文窗口被塞满了。Codex 的每一轮对话都会把历史提问、代码片段、工具调用结果、文件读取内容全部累积进上下文。token 越堆越多模型的注意力被海量历史稀释抓不住你当前真正关心的那几行代码。更麻烦的是上下文污染作废的思路、改错的记录、废弃的方案都还留在窗口里新旧需求互相打架模型前后逻辑就开始矛盾。而 Codex 的自动压缩往往要等到临近上限才触发压缩之前那段时间你已经明显感觉到它降智了。这篇就聚焦一件事怎么在 Codex CLI 里用compact、clear和codexignore三件套把膨胀的上下文瘦下来让长会话重新变得可用。适合正在用 Codex CLI 做日常开发、被越聊越笨折磨过的开发者。下面所有配置和命令都可以直接复制我也会演示怎么通过 TaoToken 统一 Key 通道接入后用对比会话验证瘦身前后的输出质量差异。2. 前置准备用 TaoToken 统一 Key 与 API 通道接入 Codex在动手调 compact 策略之前先把接入通道理顺。Codex CLI 支持自定义 API base把请求指向统一网关的好处是一个 Key 管多个模型切换模型不用改一堆环境变量排查问题时也能清楚看到每次请求实际打到哪个模型上。TaoToken 的 API 地址是https://taotoken.net/api注意这个地址不带任何查询参数。你需要先去控制台拿一个 API Key然后配置到 Codex 的环境变量或config.toml里。拿 Key 的入口在控制台的 API Keys 页面创建后复制那串sk-开头的字符串。如果你还没注册从官网进就行https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。注册后在控制台里创建 Key具体页面是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。拿到 Key 之后最省事的做法是写进 shell 环境变量。以 macOS/Linux 的~/.zshrc或~/.bashrc为例export OPENAI_API_KEYsk-你的TaoToken密钥 export OPENAI_BASE_URLhttps://taotoken.net/apiWindows PowerShell 用户用$env:OPENAI_API_KEYsk-你的TaoToken密钥 $env:OPENAI_BASE_URLhttps://taotoken.net/api改完记得source ~/.zshrc或重开终端。验证通道是否通可以直接发一个最小请求curl https://taotoken.net/api/v1/models \ -H Authorization: Bearer $OPENAI_API_KEY返回模型列表就说明 Key 和通道都正常。这一步很关键因为后面 compact 策略调优时你需要排除是通道问题还是上下文问题的干扰。如果你更习惯在网页里先验证模型行为可以打开模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 手动试几轮感受一下干净上下文下的输出质量作为后面对比的基准。3. 可复制配置config.toml 里的 compact/clear 策略与 codexignore 骨架Codex CLI 的行为可以通过~/.codex/config.toml定制。下面这份配置是我实测下来比较稳的骨架重点在控制上下文增长节奏而不是等它爆了再救。# ~/.codex/config.toml # 模型与通道 model gpt-5-codex model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key OPENAI_API_KEY # 上下文管理主动压缩阈值 # 当估算 token 超过该比例时提示你执行 /compact [context] auto_compact_threshold 0.6 compact_keep_recent_turns 6 compact_summary_max_tokens 800 # 会话行为 [session] # 新会话默认不继承上一会话历史避免污染 inherit_history false # 单次工具输出截断防止大文件读取撑爆窗口 max_tool_output_tokens 4000几个参数的含义值得说清楚。auto_compact_threshold 0.6表示上下文用到 60% 就提醒你压缩而不是等 90% 才动手——这是避免压缩前降智的关键。compact_keep_recent_turns 6让压缩时保留最近 6 轮对话原文其余浓缩成摘要既腾空间又不丢当前进度。max_tool_output_tokens 4000是防止某次读取大文件直接把窗口打满这个坑我踩过一次误读打包产物整个会话直接废掉。然后是.codexignore放在项目根目录语法类似.gitignore。它的作用是告诉 Codex 哪些文件不要自动读取# .codexignore 骨架 # 依赖与构建产物 node_modules/ dist/ build/ .next/ out/ target/ # 锁文件与缓存 package-lock.json pnpm-lock.yaml yarn.lock .cache/ .turbo/ # 日志与临时文件 *.log logs/ tmp/ *.tmp # 大体积资源 *.mp4 *.zip *.tar.gz public/assets/videos/ # 环境与密钥安全起见也排除 .env .env.* *.pem这份骨架覆盖了绝大多数会撑爆上下文的重灾区。node_modules和dist是必排的锁文件虽然不大但内容重复度高、信息密度低也建议排除。日志和临时文件同理。最后那几行环境变量和密钥文件排除掉既是省 token也是避免敏感信息被读进上下文。4. 验证请求与成功结果对比会话看上下文瘦身前后差异配置写完得用实际会话验证效果。我设计了一个对比实验同一个任务分别在不压缩和压缩后两种状态下跑看输出质量差异。任务设定让 Codex 修改src/utils/format.ts里的日期格式化函数约束是不要改动函数签名不要引入新依赖。对照组不压缩聊到第 15 轮左右此时上下文已经很臃肿我发出指令后Codex 的输出开始出现典型症状——它把函数签名从formatDate(date: Date): string改成了formatDate(date: Date, locale?: string): string违反了约束同时它自作主张引入了一个日期库。这就是上下文污染导致的约束遗忘。实验组执行 compact 后在同样轮次我先执行定向压缩/compact 总结本次项目需求、已改文件、剩余待做任务丢弃调试失败记录压缩完成后Codex 把历史浓缩成一段摘要窗口占用明显下降。再发同样的指令这次它准确遵守了不改签名、不加依赖两条约束只改了函数内部实现。为了更直观我把两次的关键指标列出来指标压缩前压缩后估算上下文占用约 85%约 35%约束遵守情况违反 2 条全部遵守是否引入新依赖是否输出可用性需人工返工可直接采用这个对比说明一件事上下文瘦身不是玄学是能直接量化到输出质量上的。你也可以用同样的方法自测把两次输出贴在一起对比差异一眼就能看出来。如果你在验证过程中想换个模型再跑一遍对比可以在模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里手动切换因为走的是同一个 TaoToken 通道切换成本很低。5. 本篇常见错排查compact 没效果、clear 误用、codexignore 不生效配置和命令都给了但实际操作里还是有几个高频坑我逐个说。坑一执行了/compact但感觉没变化。最常见原因是压缩指令太笼统。直接敲/compact不带说明Codex 可能只是简单截断保留了大量低价值历史。正确做法是给定向指令明确告诉它保留什么、丢弃什么比如保留项目目标、已改文件、剩余任务丢弃调试失败记录。另外检查compact_summary_max_tokens是不是设得太大摘要本身占太多空间就失去意义了。坑二把CtrlL当成清空上下文。这个错误很普遍。CtrlL只是清屏幕显示对话历史还在上下文里模型该忘的还是忘、该乱的还是乱。真正清空要用/clear或者/new开一个独立会话。判断标准很简单清屏后你再问一个之前聊过的细节如果它还记得说明上下文没清。坑三.codexignore写了但 Codex 还是读了大文件。先确认文件放在项目根目录且文件名拼写正确是.codexignore不是.codexignore.txt。其次.codexignore只对自动读取生效如果你在指令里明确让它读某个被忽略的文件它还是会读。所以约束要配合指令一起用比如仅分析修改 src/xxx.ts其余文件只读不改动。坑四压缩后新会话粘贴摘要模型还是跑偏。多半是摘要本身带了污染信息。生成交接文档时明确要求300 字以内只含项目目标、修改约束、已完成改动、剩余任务、禁止修改的文件不要让它把调试过程也写进去。摘要越干净新会话起点越高。坑五通道报错被误判成上下文问题。有时候模型输出变差其实是请求根本没打对模型或者 Key 额度问题。排查时先单独发一个curl请求确认通道正常再去看上下文。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有各语言的调用示例对着核一遍 base_url 和鉴权头。6. 长期习惯与 CTA让 Codex 稳定输出的日常操作把上面这些串起来日常使用其实就几条习惯。任务分段一个功能一个会话做完就/new别一个窗口从头用到尾。缩小读取范围每次主动限定只分析某几个文件。一次性任务用codex exec ...隔离执行用完即销毁上下文。复杂重构交给子 Agent别让子任务污染主线。如果你打算长期用 Codex 做编码和 Agent 类任务建议直接上 Coding Plan把 Key 和额度统一管理省得每次切模型都折腾配置https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。Claude Code 用户走 Anthropic 通道的入口在 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 配置方式和 Codex 类似都是改 base_url 加 Key。最后留一个我自己的小技巧每次开新会话前先花十秒写一句本次会话只做 X约束是 Y把它作为第一条消息。这句话会成为整个会话的锚点后面即使上下文增长模型也更容易抓住重点。配合定期 compact长会话的稳定性会明显不一样。
返回列表