每次在Codex或Claude Code开新会话,我都会被一个数字刺痛:9,877 tokens。那不是你的代码,不是你的需求,而是你自己安装的、密密麻麻的Skill清单——还没开始干活,助手已经默默吞掉了将近一万个token的上下文。按七月份的使用强度往上翻,光这一项,冗余的Skill列表就吃掉了4到5亿token的上下文空间。这还只是我一个人。
Skill清单:10K token的沉默税
一次性的菜单,为什么这么重
多数人对Skill的认知还停留在“装得越多越强大”。但当你往Codex或Claude Code里塞进几百个Skill,实际情境很像你走进一家餐厅,服务员先对照着三百道菜名给你从头念一遍,再问你想吃什么。每次新会话,助手都得把那个全局Skill描述表原封不动塞进上下文窗口,等你看都不看就滑过去了。这近一万个token的“菜单”并不是发挥过一次作用,而是每次对话都要重新吞入,像一笔收得悄无声息的沉默税。
从9.9K到4亿,数字背后是模型推理的真实成本
9,877 tokens只是单次会话的一次性加载。如果一天开二十次会话,一个月下来,这份菜单就要重复传送六百次。再乘上七月的使用强度和任务唤醒次数,4到5亿token并非夸张。更关键的是,这些token不只占坑位,它们还会把真正有价值的历史信息挤到上下文窗口边缘,让模型在长任务中途“失忆”。我见过不止一次,在排查复杂Bug时助手突然忘了刚刚自己给出的修复建议,回头一看上下文,Skill描述正死死压在对话记录上。
让低频技能隐身:从菜单变成搜索栏
触发词,而不是目录
解决问题的核心思路听起来简单得可笑:别把全部Skill挂在门口,让助手按需去仓库里拿。我会给每个Skill设定一组清晰的触发关键词——比如一个专门优化SQL查询的Skill,触发词是“慢查询”“索引建议”“SQL refactor”。平日这些Skill的描述完全不出现在上下文里。只有当用户的消息命中了触发词,对应的Skill描述才会动态注入到系统提示里。这相当于把一张必读菜单换成了一个搜索引擎,你输入需求,工具才亮出来。
这不仅是上下文瘦身,更是一种注意力治理。模型在决策时不再面对三百多个“可能有用”的选项,而只看到两三个和当前意图高度匹配的Skill。决策噪音骤降,执行精度反而上去了。
平衡召回率与噪声:触发词设计比想象中更吃经验
触发词的难处在于校准——写得太宽泛,“Skill又开始抢戏”;写得过于狭窄,助手永远想不起自己还有这个本事。我的经验是:把触发词分成两级,一级是硬触发,即用户消息里必须出现的精确短语;另一级是软触发,用少量语义相近的描述,让模型自己在需要时拉取。比如一个处理Markdown表格的Skill,硬触发是“表格合并”“列对齐Markdown”,软词条是“格式转换”“文档排版”。软触发允许助手在模糊场景下主动询问是否要激活,保留了一点智能弹性,又不会随随便便就把Skill甩进上下文。
跨工具可迁移:从Codex到Claude Code的治理路径
指令语法不一样,治理骨架完全相通
Codex用的是OpenAI的工具调用体系,Claude Code走的是Anthropic的Tool Use和系统提示逻辑,二者的Skill暴露机制、上下文拼接方式都不同,但这套动态加载的骨架几乎不需要大改。在Codex端,我通过functions声明来控制Skill是否展示;在Claude Code端,我会维护一个skill_manifest文件,脚本在每次对话启动前根据触发匹配结果动态拼接进system prompt。只要把Skill的描述、触发词和注入脚本抽象成一套轻量配置,它就能横跨工具运行。
事实上,做完这层治理后,我的Skill管理从“装完就忘”变成了一套活着的策略。每个Skill都有生命周期:高频Skill继续全局暴露,低频Skill改成触发词动态加载,几乎不用的Skill则直接归档。整个清单的token开销被压到了原先的十分之一左右。
为什么MCP和Agent场景更需要这层治理
当开发者开始用MCP协议把外部工具接入Agent,工具膨胀比Skill膨胀更可怕。一个Agent可能同时挂载着数据库查询、文件系统、浏览器、API网关,而每个工具的schema描述都可能成百上千token。如果所有工具描述常驻上下文,Agent很快就会被自己的“能力菜单”淹死。把工具描述也纳入动态加载治理,用同样的触发词逻辑决定哪些工具定义在这一次调用中可见,是一次极低耦合的复用——底层的推送机制不用动,只在上下文组装层多一道筛选。
上下文即资产,别把它当成免费的
算清楚成本,本能才跟得上
大多数人不会去算上下文上的浪费,是因为token这玩意儿看不见。但一旦做过一次粗算——哪怕只是拿出一个月的使用条数,乘上平均skill_list长度——你就会本能地想要优化。4到5亿token在商业API价格下不是零,在模型推理质量上更不是零。上下文是最贵的“空地”,每挤进来一点无关信息,模型回答的连贯性和深度就削掉一层。
把治理前置,而不是成为下一次上下文窗口翻倍的借口
业界很喜欢用“上下文窗口又翻倍了”来回避治理问题。但更大的窗口只是给你更长时间轴上的遗忘,而不是解决信息结构的根本矛盾。Skill的动态加载不是新概念,它更像老派操作系统里“按需加载动态库”的思路,现在必须被认真对待,因为AI Agent的能力已经膨胀到连模型自己都吃不消。下一个让我失眠的数字,恐怕就不是9.9K了。

