你的 AI 指令文件,每次请求都在白烧 5000 Token
每次请求都会读的指令文件,删掉一句就省一份钱。
一个最容易被忽略的“固定税”
如果你在用 GitHub Copilot、Cursor、Claude Code 这类 AI 编程助手,项目根目录大概率躺着一个.github/copilot-instructions.md——AI 每次回答你之前,都会先把这份文件完整读一遍。
很多团队这份文件是“越长越专业”:风格规范、Git 流程、PR 模板、命名约定、环境配置、文档链接……一个 300 行、5000+ token 的指令文件并不少见。
问题是——它是“每次请求都要付”的固定税。你问它一个 30 token 的小问题,AI 先要花 5000 token 把这份文件读完再回答。一个 20 人团队一天几千次请求,光这份“开场白”就要烧掉几十美元,而且这部分几乎没有“有效产出”。
本篇用一个真实改造案例:把 323 行(约 5088 token)的指令文件压到 15 行(263 token),保留所有核心规则,单次请求固定输入节省 94.8%。并把这次改造里反复用到的 6 条瘦身规则提炼成可复用的方法。
一、为什么这个文件这么费钱
在 AI 编程工具里,.github/copilot-instructions.md(或 Cursor 的.cursorrules、Claude Code 的CLAUDE.md)是系统提示的一部分——它会被拼接到每一次对话的最前面。这和你临时补一句“记得加 type”不一样,它是“常驻人口”。
它费钱的原因有三个:
- 每轮都发:不管你让 AI 做什么事,哪怕是改一个拼写错误,这份文件都会被完整发送一次。
- 优先占坑:它出现在上下文的最前面,直接决定 Prompt Cache 能不能命中——如果文件臃肿、且夹杂易变内容,缓存命中率会骤降,连最省钱的那部分折扣都拿不到。
- 不直接产生价值:用户的问题和 AI 的回答才是“有效内容”,指令文件属于“运行成本”,但它按有效内容一样的价格计费。
我们来看一下改造前后的数字对比:
用 tiktoken(cl100k_base 词表,对应 GPT-4/Claude 家族)实测:
| 版本 | 行数 | 单次固定 Token | 占比 |
|---|---|---|---|
| 臃肿版(常见写法) | 323 | 5088 | 100% |
| 精简版 | 15 | 263 | 5.2% |
| 节省 | -308 行(-95.4%) | -4825 | -94.8% |
按 Claude Sonnet 4 的定价(输入 $3/MTok,缓存读取 $0.3/MTok)粗算:
- 单次请求:固定开销从 $0.0153 降到 $0.0008
- 1000 次请求/天:日成本从 $15.26 降到 $0.79,每天省 $14.47
- 按月(20 人团队,1000 次/天 ≈ 25,000 次/月):成本从约 $382 降到约 $20,每月省 $362——注意:这还只是“指令文件本身”的成本,不包括你实际的业务上下文。若再算上 Prompt Cache(缓存读取价仅 $0.3/MTok,是标准输入价的 1/10),实际花费只会更低。
二、臃肿的 323 行里,钱都花在哪了
我把一份典型的“超长 copilot-instructions”按内容分类,发现 Token 花在了这些地方:
可以看出几个问题:
- “真正核心规则”只占 1200 tok(约 24%)——也就是说,文件里 76% 的内容,在每次请求里都属于“边际价值很低”的重复。
- “哲学/欢迎段”这种完全没用的内容占了 380 tok——“欢迎来到我们项目”“我们相信代码是伟大沟通的反映”这种话对代码输出没有任何影响,却是每次请求必付的钱。
- “TypeScript 风格说明”有 920 tok——但大部分内容(“用 const 不用 let”“避免 any”)其实是任何一个合格的 AI 编程助手的默认行为,或者可以用一个术语/风格代号让模型自己展开。
- “参考链接”和“文件索引”占了 348 tok——链接堆在指令里等于让 AI 在每次请求时“背一整本目录”,但其实一句
参考 docs/architecture/就够了。 - “Git/PR 流程”占 540 tok——详细的 PR checklist 对“写代码”这个动作没有帮助,只有当 AI 真的在写 commit message / 开 PR 时才需要。
三、六条瘦身规则:把 323 行压到 15 行
这次改造里反复用到的 6 条规则,每条都对应一块明确的 Token 节省:
下面逐条讲。
规则 1:删掉“欢迎辞”和哲学段(-380 tok)
“Welcome to our project! This document is designed to help…” “We believe that great code is a reflection of great communication…” —— 这些话对 AI 的代码输出零影响。AI 不会因为你讲了团队价值观就写出更符合价值观的代码;真正约束它行为的是具体规则。
做法:直接删除。如果需要保留团队文化说明,放到CONTRIBUTING.md给人看,不要塞给 AI。
规则 2:删除重复表述(-1100 tok)
臃肿版里有大量内容反复说同一件事:
- “Use const over let” 在“General Style”里说一次,“Miscellaneous Rules”里又说一次
- “Test files co-located” 在“Testing”说一次,“File Naming”说一次,“Project Structure”又暗示一次
- “Never console.log” 在“Logging”说一次,“Code Review Standards”说一次
- “async/await over .then” 在“Async/Await”说一次,“Miscellaneous Rules”说一次
做法:合并同类项,每条规则只说一次,用最简短的句式。
规则 3:长规则→短句+行业代号(-1450 tok,最大贡献)
这是本次改造里贡献最大的一条。长段 prose 描述的规范,绝大多数都有行业公认的“代号”:
- 一整段“Arrange-Act-Assert、beforeEach 做 setup、mock 外部依赖、不要 over-mock” → 一句
Vitest + AAA,单断言单测,co-locate *.test.ts - 一整段“prefer const, never var, type for unions, interface for objects, PascalCase…” →
const/arrow, interface for objects, type for unions; no any - 一整段“Conventional Commits feat/fix/docs…” →
Conventional Commits (feat/fix/refactor/docs/test/chore) - 一整段“import 分组顺序” →
imports 分组:builtin → external → @/ → relative
原理:AI 训练语料里已经见过无数次这些“代号”——当你说“Vitest + AAA”,它知道的 AAA 模式和你花 100 字解释的是同一件事。你不需要在指令里重新教它什么是 AAA,只需要“点名”就行。
规则 4:参考链接→路径占位(-350 tok)
臃肿版把 8 个 URL 直接贴在指令末尾,包括外部文档、团队 Wiki、内部架构文档、OpenAPI 规范、数据库 schema。
做法:只留本地路径,不贴完整 URL;外部链接一律删掉。AI 真的需要时它自己会去对应的docs/目录找。
- 之前:
- API Specification: https://example.com/docs/api/openapi.yaml(62 tok) - 之后:只在 Project Paths 里提一句
API: src/routes/(Zod→service→response),路径信息通过项目结构自然传递。
规则 5:流程说明→极简清单(-800 tok)
一整段“开 PR 必须……”“本地开发步骤是……”“monorepo 的包结构是……”——这些“工作流描述”在每次写代码时都不需要。AI 写代码时不需要知道“怎么 clone 仓库、怎么 copy .env.example”。
做法:
- “本地开发步骤”整段删除(这是给人看的 onboarding)
- “PR checklist”压缩到一行:
PR: Conventional Commits 标题 + CI 通过 + 1 review - 工作流关键约束(Diff 编辑、问清楚再假设、测试验证)用4~5 个短语写在
## Workflow里 - 流程细节(如 monorepo 包边界)只写“路径映射”,不写解释文字
规则 6:冗余细节→搬出指令文件(-745 tok)
有一些内容是“偶尔有用”的,但“每次请求都带”不划算——典型的如:
- 完整的 React Hooks 说明(useCallback/useMemo 什么时候用)
- 详细的 Pino Logger 使用样例
- 安全 Checklist(CORS、HTTP-only Cookie、Rate Limiting)全量列表
- 性能优化清单(懒加载、虚拟列表、防抖节流)
做法:把这些搬到项目内其他文件(docs/ai/react-patterns.md、docs/ai/security.md),或者用 AI 工具支持的“Skill / 按需加载指令”机制;主指令文件里只保留“AI 每次写代码都该知道”的最小心智模型。
判断规则的黄金标准:问自己——“这条规则在 80% 的请求里都能约束 AI 行为吗?”如果答案是“不,只有做特定任务时才用”,就把它搬走。
四、改完后的 15 行长什么样
这是精简后完整的指令文件(真实可用,不是示意):
# AI Coding Instructions ## Core Rules 1. Write typed TypeScript. `const`/arrow functions; `interface` for objects, `type` for unions; no `any`. 2. Tests: Vitest + AAA. One assertion per test; co-locate `*.test.ts`; mock externals, test real logic. 3. Errors: typed errors with `code`+`message`; never swallow; `Result<T>` for expected failures. 4. Naming: PascalCase components/types, camelCase vars, UPPER_SNAKE constants, kebab-case files. ## Workflow - Ask before assuming. Verify with tests. Use diff edits — never rewrite entire files. - Conventional Commits (`feat/fix/refactor/docs/test/chore`). Group imports: builtin → external → `@/` → relative. Named exports only. - `async/await` always; `Promise.all` for parallel; no floating promises. Zod for validation; pino for logs. ## Project Paths - Source: `src/` (components/ services/ utils/ types/ hooks/ config/) | Tests: `*.test.ts` | API: `src/routes/` (Zod→service→response) | DB: Prisma (select fields, paginate, `$transaction`)15 行,263 token。覆盖了原来 323 行里 95% 的“真的会影响代码输出”的规则;剩下 5% 是“特定场景才用”的细节,搬到docs/ai/按需加载。
关键设计点:
- 三段落结构清晰:Core Rules(必须遵守的硬规则)→ Workflow(工作方式)→ Project Paths(项目地图)
- 每条规则都用“关键词+代号”,不写长句解释
- 用反引号包住代码符号(
const、*.test.ts),既清晰又帮分词器识别为代码 token(更紧凑) - 项目路径用括号内极简短语代替整段架构说明(如
(Zod→service→response)直接告诉 AI API 层的数据流)
五、不同规模团队的账
同样一份指令文件,在不同规模团队里的月度成本差多少?我们按各团队的月度查询量(5,000 / 25,000 / 75,000 / 200,000 次)、Claude Sonnet 4 标准输入价($3/MTok,不计缓存折扣的保守口径)粗算:
可以看到:
- 5 人小团队:臃肿版每月 $76,精简版 $4——省 $72/月,不算大钱但完全是“白捡”的。
- 20 人团队:臃肿版 $382/月,精简版 $20/月——省 $362/月,约 4300 美元/年。
- 50 人团队:每月省 $1085,年省约 1.3 万美元——这个数字已经够付一个工程师一周工资了。
- 100 人团队:每月省 $2894,年省近 3.5 万美元——而你做的,只是把一个文件从 323 行改成 15 行。
而且这只是“指令文件本身”的节省;精简指令还能提高缓存命中率、降低上下文拥堵、减少 AI “看漏”关键规则的概率——这些间接收益比直接省的钱更大。
六、落地的 4 个动作
看完本篇,建议今天就做这四件事:
- 数一下:打开你的
.github/copilot-instructions.md(或.cursorrules、CLAUDE.md),粘到 OpenAI 的 tiktoken 工具(platform.openai.com/tokenizer)看一眼是多少 token。超过 1000 tok 就该瘦身了。 - 按 6 条规则砍一遍:删哲学段 → 去重 → 长规则换代号 → 链接换路径 → 流程砍清单 → 冗余细节搬走。目标是500 tok 以内,理想是300 tok 以下。
- 设“80% 原则”:每条规则问自己“80% 的请求都用得到吗?”不是就搬走。
- 把搬走的内容做成可按需加载的文件:
docs/ai/react-patterns.md、docs/ai/security.md、docs/ai/api-conventions.md——主流 AI 编程工具(Claude Code Skill、Cursor Rules、Cline/Custom Instructions)都支持“AI 自己去读”。
一句话总结:
.github/copilot-instructions.md是 AI 的“开场白”,不是项目百科全书。开场白越短,AI 用来做正事的 Token 就越多。删掉一句,就是每次请求永久省一份钱。
下一篇预告:《README 也费钱:写一份“AI 友好”的项目说明》——你项目根目录那份写得很用心的 README,可能正在让每个读它的 Agent 花掉本来不该花的几百 Token。为什么 1000 Token 处有一个命中率“甜蜜点”、最烧钱的三章恰恰对 AI 最没用,以及怎么写一份“人和 AI 都爱读”的说明文件。