ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

在 Codex 里开新会话,哪些内容会自动进上下文?怎么少花 token?

在 Codex 里开新会话,哪些内容会自动进上下文?怎么少花 token? 1. 新会话一开token 就被谁吃掉了你在 Codex 里敲下第一句话之前其实已经有一批内容悄悄进了上下文窗口。它们不是你的 prompt也不是你贴的代码而是 Codex 在会话启动阶段自动装配的“背景层”项目规则、配置解析结果、Memories、Skills 清单、MCP 工具定义、插件能力、当前工作环境与权限边界。这些东西的特点是——你几乎感知不到它们存在但它们每次都在消耗 token。我见过最典型的场景一个同学装了三四十个 skill、挂了七八个 MCP server结果只是想让 Codex 帮忙改一个 CSS 变量单次会话的输入 token 就已经冲到两三万。他以为是模型变贵了其实是“每次都会自动出现”的那部分太重。Codex 的上下文成本可以粗暴拆成两类一类是持久指导包括 AGENTS.md、Memories、项目配置另一类是可用能力包括 Skills 初始清单、MCP instructions、工具 schema、插件和浏览器授权。想省 token重点不是把 prompt 写短两句而是把这两类默认加载的东西变少、变准、变可控。这篇就按“先搞清谁进了上下文再动手精简最后用工具验证”的顺序走一遍。全程在 TaoToken 统一 Key/API 通道下操作配置一次就能复用。2. TaoToken 前置把 Key 和通道先固定下来在动 Codex 配置之前先把模型通道固定住否则你后面调 token 占用时变量太多不好对比。TaoToken 的作用是给你一个统一的 Key 和 API 入口Codex、Claude Code、各种 Agent 都走同一条通道计费和用量在一个地方看。你需要做两件事拿 Key、确认 API 地址。拿 Key 的入口在控制台登录后进 API Keys 页面创建一个即可。地址是https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewriteAPI 基地址统一用https://taotoken.net/api注意这个地址后面不加任何 UTM 参数直接作为 base_url 填进配置。模型对话想先试一下通道通不通可以用模型对话页面发一条消息验证https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite如果你后面要长期跑编码任务、挂 Agent建议直接看 Coding Plan额度模型更适合高频调用https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite接入文档在这里配置字段有疑问直接对照https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewriteKey 拿到后先写进环境变量别硬编码进仓库export TAOTOKEN_API_KEYsk-你的key export OPENAI_BASE_URLhttps://taotoken.net/api这样 Codex 和后续工具都能读到同一个通道后面做 token 对比时模型侧变量就固定了。3. 可复制配置AGENTS.md 精简骨架 config.toml 片段3.1 AGENTS.md 写成路标不写成长文档Codex 启动时会构建一条 instruction chain先读全局~/.codex/AGENTS.override.md或~/.codex/AGENTS.md再从项目根目录一路读到当前目录每层最多取一个指导文件越靠近当前目录的规则越晚出现、越容易覆盖前面的。默认合并上限是project_doc_max_bytes 32 KiB。所以 AGENTS.md 的正确写法是“索引 硬约束”不是项目百科。下面是我实测下来比较省 token 的骨架你可以直接抄# 项目约定 ## 结构 - 源码: src/ - 测试: tests/ - 文档: docs/ ## 命令 - 安装: pnpm install - 测试: pnpm test - 构建: pnpm build ## 硬约束 - 只用 TypeScript禁止 any - 提交前必须跑 pnpm test - 改接口必须同步更新 docs/api.md ## 按需读取 - 数据库相关: 先读 docs/db.md - 前端组件: 先读 src/components/README.md关键点把“什么任务读哪个文档”写清楚让 Codex 按需去读而不是每次自动塞进上下文。等某类错误反复出现再把规则补进去别一上来就写满。3.2 config.toml 控制自动注入项Codex 会解析多层配置用户级~/.codex/config.toml和可信项目里的.codex/config.toml。原始配置一般不会作为普通文本进上下文但配置解析后带来的工具定义、MCP 指令、功能状态会进。所以控制配置就是控制上下文。先关掉 Memories这是跨会话自动上下文的大头[features] memories false [memories] use_memories false generate_memories false disable_on_external_context trueuse_memories false表示不把已有 memories 注入未来会话generate_memories false表示新线程不再作为生成 memories 的输入disable_on_external_context true避免用过 MCP、web search 的线程进入 memory 生成。再收紧项目指导体积和备用文件名project_doc_max_bytes 16384 project_doc_fallback_filenames [AGENTS.md]把默认 32 KiB 砍到 16 KiB多数项目够用。备用文件名只留 AGENTS.md避免一堆 README 被误当指导文件读进来。最后收 MCP 暴露面。不要一开始就把所有 server 接进来先接一两个能明确减少人工流程的[mcp_servers.context7] enabled false [mcp_servers.filesystem] enabled true enabled_tools [read_file, list_dir] disabled_tools [write_file]enabled_tools只开放少数工具disabled_tools屏蔽重工具。每个 server 的 instructions 和工具 schema 都会增加上下文 token少接一个就少一份固定开销。3.3 Skills 和插件只留真常用的Skills 用的是 progressive disclosure初始只把可用 skill 的名称、描述、路径放进上下文选中后才读完整 SKILL.md。官方限制是初始列表最多占上下文窗口的 2%窗口未知时最多 8000 字符。装很多 skill 即使一个都没触发初始清单也会变长。仓库级 skill 放.agents/skills只放和项目直接相关的个人 skill 在$HOME/.agents/skills把“可能有一天会用”的先移走。插件在 Codex app 的 Plugins 页面管理CLI 里用/plugins浏览、安装、卸载或切换启用状态。4. 验证请求用 /context 和日志看谁真的进了上下文配置改完不能靠感觉要验证。Codex 里最直接的动作是/context它会展示当前会话上下文窗口的占用分布。开一个新会话先什么都不做直接跑/context记下基线占用。然后发一条最简单的请求比如“读一下 src/index.ts 的前 20 行”再跑一次/context对比差值。差值里如果有一大块是工具定义或 skill 清单说明你的自动注入项还是太重。日志侧可以看 Codex 的启动日志确认 AGENTS.md 的加载链和 MCP server 的初始化情况。重点看两处一是 instruction chain 里到底读了哪几个文件二是 MCP server 返回的 instructions 字段有多长。用 TaoToken 通道时用量在控制台能看到每次请求的 token 数。做对比实验的方法同一句 prompt在精简前和精简后各跑一次记录输入 token。我实测下来把 Memories 关掉、MCP 从 7 个收到 2 个、AGENTS.md 从 28 KiB 压到 9 KiB 之后同一个改 CSS 的任务输入 token 从约 24000 降到约 7000降幅七成左右。这个数字因项目而异但方向是确定的。如果你要验证模型本身的行为差异可以在模型对话页面用同样的 prompt 对比https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite5. 本篇常见错排查改了 config.toml 没生效。先确认改的是用户级~/.codex/config.toml还是项目级.codex/config.toml项目级只在可信项目里生效。改完要重开会话配置在会话启动时解析。AGENTS.md 删了但规则还在。检查~/.codex/AGENTS.override.mdoverride 的优先级高于普通全局规则移除 override 后才会恢复普通全局规则。另外用CODEX_HOME指向另一个目录可以得到一套干净的 Codex home排查时很有用。Memories 关了还有旧内容。use_memories false只影响未来会话的注入已经生成的 memory 文件还在~/.codex/memories/。要彻底干净就手动清理该目录或者用CODEX_HOME换一个 home。Skills 清单还是长。检查$HOME/.agents/skills和仓库.agents/skills两处个人 skill 很容易被忽略。skill 描述写短写准因为初始上下文主要加载 name、description、path 三项。MCP 关了 server 但工具还在。确认enabled false写在正确的 server 段落下且没有在别处被重新启用。enabled_tools和disabled_tools同时存在时注意优先级别把想留的工具也屏蔽了。浏览器历史进了上下文。Chrome 浏览器历史不是默认加载Codex 想用时会询问且没有 always-allow 选项。不想让历史进上下文就不要批准。本地网页优先用 in-app browser它不牵涉 Chrome 登录态、cookie 和扩展。长对话越聊越贵。同一个线程越聊越长历史越容易占上下文。修 bug、写文章、改 UI 如果彼此没关系就分开开新线程。长任务依赖 compaction 把历史压缩成保留关键状态的上下文在质量、成本和延迟之间做折中。6. 把通道和配置一起固定下来省 token 这件事配置侧和通道侧要一起做。配置侧把默认加载的东西变少、变准、变可控AGENTS.md 写短、少装工具、skills 只留真常用的、memories 按需开、MCP 别贪多、浏览器权限按任务批准。通道侧用 TaoToken 统一 Key 和 APICodex、Claude Code、Agent 都走一条线用量在一个地方看做对比实验时变量才干净。接入相关的配置和字段对照文档最稳https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite长期跑编码任务、挂 Agent 的话Coding Plan 的额度模型比按次调用更划算https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite最后给你一个可以立刻做的动作开一个新会话跑/context记下基线然后按第 3 节的 config.toml 片段关掉 Memories、收紧 MCP、把 AGENTS.md 压到 16 KiB 以内再开一个新会话跑/context对比。两次数字的差就是你每次会话白省下来的 token。
返回列表