AI 编程的 token 到底花在哪,怎么省下来
先读懂账单,再改三个习惯——多数人的浪费不在配置,在你没看见的那部分上下文里
📅 更新于 2026-09-13
0030 秒速览:三句话,和一张"按你的处境查"的索引
读完这一篇,你能做到三件事:打开一个会话就能看懂它的账单、说清自己的钱到底花在哪一类请求上、并且能用三四个改动把每月的 token 花掉一大块——不需要换工具,也不需要写代码。
① 你付的不是"答案"的钱,而是AI 每走一步都要把它记得的所有东西再读一遍的钱——所以最贵的从来不是你那句话,而是它背后拖着的历史;② 省钱的动作分三层,先改习惯(会话卫生、输入瘦身、提示词精确),再看缓存命中率,最后才调模型档位,反过来做通常白费;③ 缓存是你唯一能拿到的"数量级折扣"——命中时读取价只有原价的十分之一,而破坏它的方法出奇地多(换了模型、改了项目记忆、离开超过保鲜期)。
按你的处境,直接看这一节
| 你现在的处境 | 直接跳到这里 | 为什么是这一节 |
|---|---|---|
| 刚接触,连 token 是什么都说不清 | 01 token 到底是什么 | 先把"计费单位"这个词变成能算的东西,后面每一节都靠它 |
| 账单涨得莫名,但不知道钱花在哪 | 04 最小例子 + 05 先记账 | 先读懂一次会话的账单,再谈优化——不记账的"省"会省到不该省的地方 |
| 包月订阅,觉得"省 token 与我无关" | 06 你是哪种付费用户 | 包月省的是额度不是钱包:额度撞墙照样让你干不完活 |
| 会话开着不关,一天干好几件不相关的事 | 07 杠杆一 · 会话卫生 | 这是多数人最大的一笔浪费,改一个习惯就见效 |
| 经常让它读整个文件、贴整段日志 | 08 杠杆二 · 输入瘦身 | 新喂进去的每一段都是全价输入,而且会一直躺在上下文里被重发 |
| 一件事反复返工,来回改好几轮 | 09 杠杆三 · 提示词一次到位 | 每一次返工都是一整串带全上下文的新请求 |
| 用量面板里"缓存命中率"很低 | 10 杠杆四 · 吃透缓存 | 命中率低不是运气问题,是前缀被你自己改坏了 |
| 想省钱,但怕省出质量事故 | 16 什么时候别省 | 先划出不该省的那几条线,剩下的随便省 |
| 只想拿一张能贴在桌上的清单 | 14 一页纸速查清单 | 把全文压成"开工前 / 进行中 / 收尾 / 每周"四组动作 |
一条能立刻执行的三步路径
在会话里敲 /usage 看本次会话,把 /context 当"谁在占地方"的 X 光片看一次(05)。目标不是精确到分,而是建立一个量级感:这个会话是五毛钱还是五块钱?
用自己的话讲清"为什么一句小指令也贵";在 /usage 的输出里指出哪一行是历史重读、哪一行是缓存省下来的钱;说出至少三种会让缓存失效的操作;并且知道哪几种情形下"为了省 token 而省"反而是亏的。本文讲的是省钱这类做法,不是某个工具的完整使用手册。
01token 到底是什么,钱又按什么算
先把三个词钉死:token(令牌)、上下文窗口(context window)、计费单位。这三个词你在别处都见过,但九成的人第一次的理解是错的——而账单就是按它们算的。
token 不是"字",是模型切出来的小块
大语言模型不按"字"读文本。它在读之前,先把你给的内容切成一个个小块,每块给一个编号,然后按块处理——这一小块就叫一个 token(令牌)。它可能是一个完整单词、半个单词、一个标点、一个汉字,也可能只是几个字母。模型和计费都只认这些块,不认你眼里的"字"。
所以"这段文字值多少钱"这个问题,准确的说法是"这段文字会被切成多少个 token"。而切法由模型自己的一套规则决定(这套规则叫分词器,tokenizer),不同模型切法不同,同一句话切出来的块数就不一样。
这一点现在比过去更要紧:官方在定价页和 token 计数页都写明了,Claude 4.7 及之后的模型换用了更新的分词器,同样一段文字会比旧模型多产出大约 30% 的 token——所以你不能拿旧模型上量出来的数字去估新模型的账单。
为什么"1 个汉字 ≈ 几个 token"这个问题没有统一答案
"token 等于多少字"这类系数只在同一家厂商的同一代模型内部近似成立。三家的官方口径互相都不一样:
| 来源(官方口径) | 换算比例 | 别当什么用 |
|---|---|---|
| DeepSeek 官方 "Token & Token Usage" 页 | 1 个英文字符 ≈ 0.3 token;1 个汉字 ≈ 0.6 token | 别拿它去估别家的账单——它标的是"约",而且官方明确说以 API 返回的用量为准 |
| Anthropic 定价页脚注 | Claude 4.7 及之后模型的同一段文字,token 数比旧模型多约 30% | 别在换模型后沿用旧模型的估算,要重新数一遍 |
| Anthropic token 计数页 | 建议直接在目标模型上数,而不是把旧模型的计数换算过去 | 别把"字数 × 系数"当预算依据,那只够建立量级感 |
| 旧教程常见的经验值("汉字 1~2 token") | 来源不明、随分词器变化 | 它曾经大致对过,现在既不是官方口径也不跨模型成立,别再用它做决策 |
算预算时你只需要量级:一段 3000 行的代码文件是"几万 token",一份 10 万行日志是"几十万 token",两者差一个数量级,这个判断永远不会错。要精确数,就用各平台自带的计数命令或计数接口,别硬算。
上下文窗口:一次能"记得"多少,也决定上限
上下文窗口(context window)是单次请求里能装下的 token 总量上限——它装的是"这次要一起送进去的全部内容",包括系统提示、项目说明文件、历史对话、工具说明和你这句新指令。它不是"记忆容量",更不是"该塞满的地方":装得越满,每一轮都越贵。
当前官方口径(来自上下文窗口文档):
| 模型 | 上下文窗口 | 这对你的账单意味着什么 |
|---|---|---|
| Claude Opus 5 / Opus 4.8 / Opus 4.7 / Opus 4.6、Sonnet 5、Sonnet 4.6、Fable 5(及 5.1)、Mythos 5(及 5.1) | 1M token(100 万),且是默认值、按标准价计费,不需要额外申请 | 一次能装下整个仓库——也意味着一次能把整个仓库的钱花掉。窗口是天花板,不是目标 |
| 其余模型,例如 Claude Sonnet 4.5、Haiku 4.5 | 200k token(20 万) | 更容易触发压缩;而压缩本身是一笔大请求 |
另外记住单次输出的上限:1M 窗口那批模型单次最多生成 128k token。它会约束你"让它一口气写完整本书"这类要求的可行性,也提醒你输出按 5 倍价计费。
一次请求的账单公式:三种价,不是一个价
当你按量付费(走 API 或云厂商)时,一笔请求的费用不是一个单价乘一个数量,而是四笔账相加:
费用 ≈ 新读入的 token × 输入单价
+ 从缓存读到的 token × 缓存读取单价(通常是输入单价的 0.1 倍)
+ 写进缓存的 token × 缓存写入单价(约输入单价的 1.25 或 2 倍,一次性)
+ 本轮新生成的 token × 输出单价(通常是输入单价的 5 倍)
这四行的相对倍数(0.1 倍、1.25 倍、5 倍)不是某一家厂商的独家规则:Anthropic 与 OpenAI 两家官方的定价页给的都是同一组倍数,差的是各家模型的绝对单价。这个事实直接决定了你的优化顺序——"少写"比"少读"值钱,而"让重复的部分命中缓存"比两者都值钱。
02为什么"就改一个标点"也能贵
先给一个公允的结论:不是工具在偷你的钱,是"AI 编程"这种任务形态天生就耗 token。普通聊天和编程助手的花钱方式不是程度差别,是形状差别——下面这张流程对比就是全部的根源。
原因一:每一轮都要重发整段上下文(占大头)
官方成本文档的原话是:Claude Code(一款在终端里跑的 AI 编程助手,本文以它为例给具体命令)"每次请求都会发送你的完整对话"(sends your full conversation with every request),并且每次它调用工具,都会再发一笔请求、把那批工具结果一起带上。放到第 50 步,这一条请求里就装着前 49 步的所有文件内容与命令输出——哪怕你这次只问了一个标点。
这里最容易产生的误解是"我没写多少字,怎么会贵"。因为你写的字根本不是主菜:你这次的指令往往是一笔请求里最小的一块。
原因二:工具结果是最肥的一块
让 AI 读一个 3000 行的文件、跑一次全量测试、贴一段 10 万行的日志——这些工具结果会原样进入上下文,一次就是几万到几十万 token,而且更糟的是它会一直躺在那里,在此后每一轮被重新发送一遍。这就是"读一次大文件"的代价远大于"读一次"的原因。
原因三:输出比输入贵约 5 倍
各档模型的输出单价约为输入单价的 5 倍(11 有当前单价表)。所以让 AI"多写"——大段解释、把整份文件重贴一遍、长篇试错——比让它"多读"更烧钱。这也解释了一个反直觉现象:让它"用大白话把这段代码再讲一遍"是很贵的要求,因为那整段都是输出。
原因四:思考也在花钱
新一代模型默认"先思考再动手",而官方明确:思考产生的 token 按输出价计费(因为性质上就是模型生成的内容),默认的思考预算可能达到每次请求数万 token。这不是玄学,是可以调的档位(11)。
官方还给了一组让人清醒的企业数据:平均成本约为每位开发者每个活跃日 13 美元、每月 150–250 美元,而 90% 的用户每个活跃日低于 30 美元。这个数字的意义不是"你也该花这么多",而是给你一个量级参照:如果你一天花掉的是这个数的十倍,那不是"AI 太贵",是某几个习惯出了问题。
"烧得快"不等于"有 bug 或乱收费"。先用 05 的命令把账看明白,再决定怎么省。多数人记账之后才发现:最大的开销是"开着不关的超长会话"和"反复让 AI 读大文件",而不是单次请求本身。
03一次请求的钱花在哪:输入、输出、缓存三种价
把"一笔请求"拆开看。你以为你给 AI 的输入只有最后那句话,实际发送过去的是下面五块拼起来的一大坨——理解这个拼法,后面所有省钱技巧才有落点。
为什么这个顺序很重要
因为这五块是按顺序拼成一条前缀的,而缓存判断的正是"前缀是不是和上次逐字节相同"。顺序决定了失效范围:改了工具定义,后面的系统提示、项目记忆、历史对话全部重算;只改了历史里的一句话,就只影响那之后的部分(10 有完整表)。
三种价,各自对应哪一块
| 计费项 | 对应上面哪一块 | 什么时候它最要命 |
|---|---|---|
| 输入 token(全价) | 这次新读进去、又没命中缓存的部分 | 基准价。最要命的时候是"新塞进一个大文件"——它不但这轮全价,还会留在上下文里被每轮重发 |
| 输出 token | 模型本轮新写出来的字(含思考 token) | 约为输入价的 5 倍。所以"让它整份重贴文件""让它长篇解释"都在按最贵的档收费 |
| 缓存写入 token | 首次把一段前缀写进缓存的那一次 | 约输入价的 1.25 倍(5 分钟保鲜期)或 2 倍(1 小时保鲜期)。这是一次性投入,只有复用才回本 |
| 缓存读取 token | 命中缓存的那一大段历史 + 系统内容 | 输入价的 0.1 倍,也就是一折。长会话能跑下去,全靠这一行 |
另外两个"隐性消耗":自动压缩与工具往返
自动压缩(auto-compact):会话逼近上下文窗口上限时,工具会把旧历史总结成一段摘要腾地方。这次总结本身就是一笔很大的请求(等于把整个会话读一遍、再写一遍),而且之后的每一轮都会带着这份摘要继续膨胀。它是救命机制,不是省钱机制。
工具往返放大:AI 每"读一次文件 / 跑一次命令 / 查一次网页",就要发一笔携带全上下文的新请求。一个看起来简单的重构,背后可能是 30–80 次工具调用,每次都是全量输入。
为什么"大文件 + 长会话"是烧钱之王?因为文件全文和历史对话每轮都以全价输入被重读(没命中缓存的话)。为什么让它"重新解释一遍代码"很贵?因为那是输出,5 倍价。
04最小例子:读懂一次会话的账单
理论到此为止。这一节只做一件事:把一段真实的用量输出逐行翻译成人话,再手算一遍钱。看懂这一个例子,你就超过大多数只会埋头提问的用户了。
第一步:敲 /usage,看它到底打印了什么
各家的用量命令名字不同(Claude Code 是 /usage,也有工具用 /context 一类命令,插件多在状态栏显示)。下面这段是官方成本文档给出的示例输出,我原样抄下来——它已经把本文所有概念装进去了:
Total cost: $0.55
Total duration (API): 6m 20s
Total duration (wall): 6h 33m 10s
Total code changes: 0 lines added, 0 lines removed
Usage by model:
claude-sonnet-4-6: 1.2k input, 5.3k output, 940.0k cache read, 50.0k cache write ($0.55)
Prompt cache (main): 14 requests · 91% of input tokens from cache · warm (1h TTL, last activity 40s ago)
第二步:逐行翻译
| 这一行 | 翻译成人话 | 你该从它读出什么 |
|---|---|---|
Total duration (wall): 6h 33m | 这个会话从打开到现在挂了 6 个半小时,但真正在调模型的时间只有 6 分 20 秒 | 挂机 ≠ 免费:你要为"它记得的历史"付钱,不是为"你盯着屏幕的时间"付钱 |
1.2k input | 这一整场里真正"新读入"的只有约 1200 token | 你看——新内容小到几乎可以忽略,钱不在这里 |
5.3k output | AI 一共写了约 5300 token | 输出是 5 倍价,这 0.55 美元里偏贵的部分就在这 |
940.0k cache read | 有 94 万 token 是从缓存读的——那就是系统提示 + 项目记忆 + 历史,被重复读了 14 次 | 如果没有缓存,这 94 万要按全价输入算,账单会贵约 10 倍 |
50.0k cache write | 为了建立这份缓存,一次性写了 5 万 token 进去 | 缓存不是免费的:第一次要多付 1.25 倍,复用才回本 |
91% of input tokens from cache | 整场会话的输入里有 91% 是命中缓存的 | 这是比"总 token 数"更该盯的健康指标(10) |
warm (1h TTL, last activity 40s ago) | 缓存现在还"热"着,保鲜期是 1 小时,上次活动在 40 秒前 | 离开超过保鲜期再回来,第一条请求就会全价重建——这是"隔夜回来突然变贵"的原因 |
第三步:手算一遍,一次普通会话大概多少钱
用最简单的方法粗估:一次"改个小功能"的会话,输入总量常在 10 万~40 万 token(其中大部分是重复历史),输出在几千到几万 token。按 Claude Sonnet 5 当前单价(输入 $2/百万、输出 $10/百万、缓存读取 $0.20/百万、5 分钟缓存写入 $2.50/百万)毛估,假设其中 25 万 token 命中缓存:
输入(未命中部分) 5 万 token × $2/百万 ≈ $0.10
输入(命中缓存) 25 万 token × $0.20/百万 ≈ $0.05 ← 缓存把它几乎抹平
输出 2 万 token × $10/百万 ≈ $0.20
缓存写入 5 万 token × $2.50/百万 ≈ $0.13 ← 一次性,只在建缓存那轮交
──────────────────────────────────────────────────────
一次普通会话合计 ≈ $0.48
这个量级意味着两件事:一个重度按量用户每天跑 20 个会话,月账单很容易到三位数美元(这正是"每人每月 150–250 美元"的来源);反过来,把"每个会话更短、更少反复、缓存命中率更高"做到位,省下来的钱是实打实的。你可以把上面四个数字换成你自己的会话量级,再乘一下——这就是你自己的账单模型。
第四步:现在就做,只看三个数字
打开你正在用的助手,运行它的用量命令,只看三件事:① input 里"新读"和"缓存读"的比例;② output 有多大;③ 会话已经多少 token。看懂这三项,你就已经知道该往哪个杠杆上使劲了。
在包月订阅计划里,/usage 里那个美元数字不等于你的账单——订阅是按额度 / 时间窗口计的;官方明确说订阅用户看到的会话费用数字"与计费无关",你该看的是同一屏上的套餐用量条。只有按量付费(API / 云厂商)用户,那个美元数字才等于真实花费。分不清就看 06。
05先记账:在不花钱的地方看钱
省钱的第二步永远是先度量,再优化。凭感觉"省"只会省到不该省的地方(比如为了少几毛钱,让 AI 少读一个必要文件,结果返工三轮)。下面几个动作,任何助手都该有,命令以 Claude Code 为例。
几个地方看用量,各有各的用处
| 命令 / 界面 | 它回答什么问题 | 什么时候看它 |
|---|---|---|
/usage | 本次会话的 token 用量、按模型的拆分、缓存命中率、缓存是冷是热;订阅用户还看到套餐额度条 | 每个大任务收尾时看一次,养成成本手感。注意:/clear 会把它的统计一并归零 |
/context | 当前上下文里"什么在占地方"——哪些文件、哪些工具结果最大 | 觉得会话"很重"却不知道重在哪时,用它找出元凶 |
/status | 当前配置、版本、以及各项设置的生效来源 | 排查"为什么没按我预期跑"时 |
| 状态栏 / 面板 | 把 token 用量或费用常驻显示在界面一角 | 长期开着。成本看得见,你的手会自动收敛;这是性价比最高的一次设置 |
很多旧教程(包括本文的上一版)会让你敲 /cost 看会话累计费用。本文校对时翻了三份官方现行文档(成本页、交互模式页、CLI 参考),都没有收录 /cost;费用数字现在统一出现在 /usage 的 Session 块里(就是上一节那个 Total cost 行)。所以:以 /usage 为准;如果你的工具里 /cost 还能用,当作兼容保留即可。
用"行为指标"找病根,而不是只盯总额
账单里有些信号能直接指向病因。Claude Code 的用量面板还会主动标出占你近期用量 10% 以上的行为,并各给一条建议:
| 你看到的信号 | 它在说什么 | 去改哪一节 |
|---|---|---|
| 缓存命中率低 / 出现未命中(miss) | 你的会话"经常断片重来",或者你频繁改动了会影响前缀的东西(换了模型、改了项目记忆) | 10 吃透缓存 |
| 长上下文占比高 | 会话太长太杂,历史里混了不相关任务的内容 | 07 会话卫生 |
| 输出占比异常高 | 要么它话太多,要么你的提示词逼它整份重写 | 09 提示词、08 输入瘦身 |
| 某个技能 / 子代理 / 插件占了大头 | 不是主线会话在烧钱,是挂在旁边的某个东西 | 12 治理 |
用量算在谁头上:一个容易混淆的点
官方提醒过,这类统计是"本机视角":你在 A 电脑开的会话,在 B 电脑的面板里看不到。另外一些消耗发生在你根本没提问的时候(后台摘要任务、跨会话投递的消息、到点就响的定时任务、以及还没收工的团队助手),官方称这类后台开销通常每个会话低于 0.04 美元,但积少成多。所以看账单别只盯着主线会话那一个数字。
你要的不是会计,是量级感:这个会话大概花了五毛还是五块?今天十个会话里哪个最费?心里有量级感之后再去优化,效果立竿见影——反过来,拿一个不准的数字去追小数点,只会让你把时间花在错误的地方。
06你是哪种付费用户——这决定你该"省什么"
同一个动作(比如"让它重跑一遍测试"),对不同付费方式的人含义完全不同。先把身份对号入座,否则你会用错力气:包月用户在省额度,按量用户才在省真金白银。
三种身份,三种"省"
| 身份 | 怎么计费 | 省 token 对你的意义 |
|---|---|---|
| 包月订阅(Claude Pro / Max / Team 等) | 每月固定费用,套餐内含"用量额度",按会话 / 每周滚动窗口计算 | 不是省钱,是省额度:防止"做到一半提示额度用尽",也防止超出后走加购额度继续扣费 |
| 按量 API(官方控制台 / 各类中转 / 编辑器插件自带 key) | 输入 × 单价 + 输出 × 单价,每个 token 都换算成美元 | 最直接的省钱场景,本文大部分技巧主要为你而写 |
| 云厂商账单(AWS Bedrock / Google Cloud / 微软 Foundry / 阿里云百炼等) | token 计入你的云账户账单,走云平台自己的单价 | 同样按量,但单价与官方可能不同;省钱逻辑完全一致 |
包月用户最容易踩的误区
包月套餐对会话时长和每周窗口内的用量是有上限的。一个从早开到晚不关的超长会话,可能一个下午就吃掉你一整周的额度,接下来几天都在"撞墙"和"等恢复"中度过——你的产出损失远大于那点订阅费。
把套餐额度当成本月预算:同样一堆活,用更少 token 干完,你就能在额度内做更多事,或者留出余量应对突发的大任务。省 token 对包月用户同样是刚需。
额度用尽之后会发生什么
以 Claude 的 Pro / Max 为例:额度用尽会暂时被限流,等窗口重置后恢复;如果开启了"加购用量"(usage credits,也就是额外买一份按量的量),超出部分会按 token 继续计费——这通常是"这个月怎么突然多扣钱了"的原因。官方还允许订阅用户手动设置月度消费上限,避免彻底失控。
常有人问"我包了 Max,是不是就能随便用最贵的 Opus(最强档模型)了"——能,但 Opus 会更快地消耗你的套餐额度(同一任务消耗的 token 更多、且该档的计费权重更高)。所以"包月 + 更贵的档位"≠"免费",只是把预算从钱包换成了额度。11 教你按任务分配档位。
07杠杆一:会话卫生——最被低估的省钱习惯
回到 03 那张拼图表:你的每一笔请求,都背着从开场到现在的全部历史。所以"一个会话聊得越久、越杂",每一轮的固定成本就越高——哪怕你只是问一句"现在几点了"。会话卫生,就是管理这条越滚越大的历史。
几种"清理动作",花费完全不同
| 动作 | 它做了什么 | 花费 / 什么时候用 |
|---|---|---|
/clear | 彻底开新会话,历史全丢 | 零成本(最省)。任务做完、或切换到不相关任务时用。官方原话是"切换到无关任务时从头开始,陈旧上下文会在之后每条消息里浪费 token" |
/compact | 把长历史总结成一段摘要,保留大意、释放空间 | 本身是一笔较大的请求(等于把会话读一遍再写一遍)。任务没做完、会话已经很长、且你还需要连续性时才用 |
| 自动压缩 | 接近上下文上限时工具替你压缩 | 同上,而且不可控、时机由工具定——最被动,往往也最贵 |
/rewind | 把对话和代码回退到之前的检查点 | 发现方向错了立刻回退,比"将错就错再推倒重来"便宜得多 |
/clear 和 /compact 到底怎么选
先写了个登录页,又查了个报错,再聊了会儿部署,最后切去改另一个项目的 bug……历史里混着五个不相关项目的代码,每一轮都全量重发。到第 80 轮时,上下文可能有十几万 token,其中九成跟当前任务无关。
要回头找旧任务?用 /rename 给会话起个名字再清,之后 /resume 一键续上。结果:每个会话的上下文都又小又聚焦,每轮都便宜,还不会互相污染。
一条判断口诀:下一句要问的事,需要它记得上一个任务吗?不需要,就 /clear。这个两秒的判断,是本文性价比最高的一个动作。
压缩前告诉它"该保什么"
/compact 可以带一句话指令,直接决定摘要里留下什么。别默认让它自己挑:
/compact 请保留:复现步骤、已排除的假设、涉及的文件清单、最近的测试命令与改动
更好的做法是把这条偏好固化到项目里,让整个项目每次压缩都生效。官方给的写法是在项目根目录的记忆文件里加一段:
# Compact instructions
When you are using compact, please focus on test output and code changes
会话卫生的三条进阶配方
- 阶段性完成就果断清:宁可每半小时
/clear开一个小而新的会话,也别开一个马拉松会话硬扛到晚上。 - 别反复续同一个巨会话:官方对长会话提供"从摘要续聊"的选项,就是为了让你别再把整段巨历史背回来。能用摘要续,就别全量续。
- 清之前先起名:
/rename是免费的,它让"清掉"不再意味着"丢掉"——这是让会话卫生这个习惯能坚持下去的关键一步。
08杠杆二:输入瘦身——少让 AI 读大文件
一段长上下文里,被缓存覆盖的部分是"相对便宜"的,而新塞进去的每一块内容都是全价输入,还会一直躺在那里被重发。输入瘦身管的正是"每次新喂进去的东西",这是日常使用中最直接、最频繁能见效的动作。
原则:先定位,再读取,一次只给够用的
# 直接把整个大文件丢给 AI
请读一下 src/App.tsx(共 1800 行)帮我改
# 把整段报错日志原样贴进去(几百 KB)
这是完整日志,帮我找问题
1800 行文件全文 + 数百 KB 日志进入上下文 = 动辄几万 token,而且大半是无关噪音,之后每轮都要重发。
# 先让 AI 自己用搜索定位(token 成本极低)
先 grep 找出 App.tsx 里处理提交的地方,
再只看那一小段并分析
# 只贴日志的关键片段
报错信息如下(截取自报错附近),帮我定位根因:
搜索命令的返回比文件全文小几个数量级,AI 看到的是"与任务相关"的一小块。
这里的 grep 是一个在文本里按关键词搜索的命令行工具——你不需要学它,只要知道"让 AI 先搜再读"这句话就够了。
用工具的"外科手术式"能力,别用蛮力
现在的主流助手都内置了精准读取的手段,刻意用它们能省下大量 token:
| 你想要的信息 | 省 token 的姿势 | 费 token 的姿势(以及为什么它贵) |
|---|---|---|
| 某个函数定义在哪 | 跳转定义 / 符号搜索(官方建议装对应语言的代码智能插件:一次"跳到定义"能替代"搜索一遍 + 读好几个候选文件") | 读整个文件甚至扫全目录 |
| 某个文件讲了什么 | 只读前若干行或关键片段 | 整份丢进去让它总结——摘要很便宜,但原文会永久留在历史里 |
| 日志里有没有 ERROR | 先挂一个 Hook(在命令执行前后自动改写命令的挂载点)过滤,只喂命中的行 | 10 万行日志全文入库 |
| 测试过没过 | 只看失败项(下面的过滤器 Hook 就是干这个的) | 全量测试输出全部进入上下文 |
| 一个陌生项目的结构 | 让一个子代理去翻,只回收结论(12) | 让主会话把几十个文件逐个读进上下文 |
对付日志和测试输出的"过滤器 Hook"
如果你用 Claude Code,官方给了一个现成的例子:装一个极小的前置 Hook(Hook 就是"在某个动作发生前后自动执行你指定命令"的挂载点),每当 AI 要跑测试,就自动把命令改写成"只输出失败行"。核心思路一句话:别让 AI 看它不需要看的原始输出。官方称这能把上下文从几万 token 压到几百 token。
第一步,把下面这个文件存成 ~/.claude/hooks/filter-test-output.sh:
#!/bin/bash
input=$(cat)
cmd=$(echo "$input" | jq -r '.tool_input.command')
# 只让测试类命令保留失败行
if [[ "$cmd" =~ ^(npm test|pytest|go test) ]]; then
filtered="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100"
echo "$input" | jq --arg f "$filtered" \
'{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow",updatedInput:(.tool_input + {command:$f})}}'
else
echo "{}"
fi
第二步,在设置文件里把它挂到"每次执行命令之前"(PreToolUse 就是这个时机的名字,jq 是处理 JSON(一种通用的数据交换格式)的命令行工具,脚本里用它读改写命令):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "~/.claude/hooks/filter-test-output.sh" }
]
}
]
}
}
第三步,准备目录并给它执行权限:
mkdir -p ~/.claude/hooks
chmod +x ~/.claude/hooks/filter-test-output.sh
# 排查用:Hook 改写命令后,日志里会出现 modified tool input
claude --debug-file ./claude-debug.txt
同类逻辑通用于一切"大块输入":无论是大文件、长日志、网页正文、接口返回的数据还是项目说明书(README),规则都一条——进上下文之前先瘦身。宁可多花一次廉价的搜索命令,也别多塞一次昂贵的全量内容。
顺便让输出也"小口"一点
输入瘦身管的是"喂进去的",但输出是 5 倍价,所以顺手也要约束"吐出来的":明确要求它只给 diff(只显示改了哪几行,而不是重贴整份文件)或摘要、关键行。让 AI"少写废话"和"少读废话"同样重要。
瘦身 ≠ 什么都不给。信息太少,AI 只能靠猜;猜错再纠错,往返成本反而更高。原则是:给"够完成任务的最小子集",而不是"最少量的字"。
09杠杆三:提示词省钱法——让任务一次到位
省 token 不只靠"压缩输入",还靠减少往返轮数。AI 每次猜错方向、每次做完又返工,都会触发一整串带全上下文的新请求。把需求讲到位,是最被低估的"免费省钱"。官方成本文档把这条直接点了名:模糊的请求(比如"改进这个代码库")会触发大范围扫描;具体的请求能让它以最少的文件读取完成工作。
从"模糊差事"到"精确任务"
帮我优化一下这个项目
AI 无从下手,只能扫全仓库:读目录结构、读大量文件、猜哪里要优化,然后给你一版可能完全不是你要的改动。一轮下来 token 花掉不少,方向还未必对。
在 auth.ts 的 login 函数里加输入校验:
用户名 3-20 位、密码至少 8 位且含数字。
输入为空时返回 400。加完跑一下相关单测,只把失败项给我。
AI 知道改哪个文件、改什么、怎么验证,通常几次工具调用就完成,几乎不空转。
四条"一次到位"的纪律
带上测试用例、预期输出、边界条件。当 AI 能自我验证时,它会先自查再交付,而不是交一版等你去挑错再返工。
让它先只读关键文件、输出一份改动方案给你确认(Claude Code 里按 Shift+Tab 切到计划模式)。方向错了在"看方案"这一步就被拦下,避免在错误实现上烧十几轮。
让它"每改一个文件就跑一次相关测试",而不是一口气改十个文件再一次性跑全量。问题早暴露 = 少走回头路 = 少烧 token。
发现方向不对,立即按 Escape 打断、或用回退回到上一个检查点,然后重讲需求。放任它把错的方向做完再推倒重来,是最贵的一种浪费。
什么时候该"计划先行",什么时候不用
| 情形 | 要不要先出计划 | 为什么 |
|---|---|---|
| 会改很多文件、影响面大、或面对陌生代码库 | 要。值得花一轮先换一份方案 | 方案错了只损失"读文件 + 写方案"这一轮的 token;不先计划则要损失一整轮错误的实现 |
| 一目了然的小改动(改个文案、加个判断) | 不要 | "计划"本身也是一次往返;对两行改动来说,多一轮纯属浪费 |
| 你自己都说不清要什么 | 要,但先让它提问 | 让它反过来追着你问清楚,比它猜一版你再改便宜得多 |
花 2 分钟把提示词写清楚,通常比让 AI 多跑 20 分钟还便宜。写提示词的时间不花 token,AI 空转的每一轮都花。
10杠杆四:吃透缓存——把重复内容打到一折
前面反复提到缓存,现在一次性讲透。它是你唯一能拿到的"数量级折扣",也是账单里最容易出现十几倍差异的一行。
缓存是什么:逐字节相同的前缀,打一折
大模型接口对逐字节完全相同的前缀提供"缓存命中"优惠:只要这次请求的前缀(按 03 那个顺序:工具定义 → 系统提示 → 项目记忆 → 历史对话)和之前某一次一模一样,这一大段就按输入价的 0.1 倍结算,而不是全价重算。
把话说准:0.1 倍是一折(省 90%),不是"九折"。0.1 倍和九折差了 80 个百分点,旧教程经常写错这一句。同一组倍数在 OpenAI 的定价与缓存文档里也是"读取 0.1 倍 / 写入 1.25 倍",所以这不是某一家厂商的独家规则。
写入缓存则要加价——这是一次性投入。几个关键数字:
| 这一笔 | 倍数(相对输入价) | 你该知道的 |
|---|---|---|
| 5 分钟保鲜期的缓存写入 | 1.25 倍 | 默认档。写一次、只读一次就已经比"完全不用缓存"便宜(见下面的算式) |
| 1 小时保鲜期的缓存写入 | 2 倍 | 适合"每 5 分钟以上才用一次"的稳定前缀,例如系统提示;用它的代价是写入更贵 |
| 缓存读取(命中) | 0.1 倍 | 长会话能跑下去全靠这一行。极少数新档模型(Fable 5.1 / Mythos 5.1)的命中价低到 0.025 倍 |
| 最短可缓存长度 | 512 / 1024 / 2048 / 4096 token | 视模型而定:太短的前缀根本不进缓存。这是"我明明没改东西,为什么没命中"的最常见答案之一 |
| 最多几个断点 | 4 个 | 自动缓存会占用其中一个名额;想给"增长很长的会话"多留一层,就得显式打点(API 用户,见下) |
为什么它值得算一遍:两个现成的算式
缓存不是"有折扣就赚"——写入本身要加价,所以要看复用次数。OpenAI 的缓存文档直接把平衡点算给你了:
写一次 + 完整复用一次:1.25(写) + 0.1(读) = 1.35 倍
不用缓存、处理两次: = 2.00 倍
复用到十次:1.25(写) + 9 × 0.1(读) = 2.15 倍
不用缓存、处理十次: = 10.0 倍
结论很清楚:一个前缀只要会被复用两次以上,缓存就是纯赚;复用越多越赚。这也顺带解释了为什么"稳定但冗长的系统提示与项目记忆"值得进缓存,而"每轮都在变的时间戳"永远不该放进可缓存前缀。
三段层级:改哪儿,失效到哪儿
缓存按层级组织:工具定义 → 系统提示 → 消息(历史)。改动某一层,会连带让这一层之后的所有层级失效:
| 你改了什么 | 工具定义缓存 | 系统提示缓存 | 历史缓存 | 实际后果 |
|---|---|---|---|---|
| 增删一个外接工具 / 改了工具说明 | 失效 | 失效 | 失效 | 整段前缀重建,下一批请求全部全价写一遍 |
| 改了系统提示 / 项目记忆文件 / 加载的技能 | 保留 | 失效 | 失效 | 工具那层还能省,但记忆与历史全价重来 |
| 继续追加一轮对话(没动前面任何内容) | 保留 | 保留 | 前面部分保留 | 最理想情况:只有新加的那一小段是新的 |
| 会话中途换了模型或思考强度 | 按"模型 + 思考配置"分别保存,等于从零重建 | 切换后第一批请求全是全价。要换就在会话开头一次定好 | ||
四件事会"弄丢"缓存,让你按全价重付
- 放太久过期了。缓存有保鲜期(英文缩写 TTL,就是"存多久算数"):订阅套餐下通常是 1 小时,而一旦你开始动用加购额度,就降回 5 分钟;用 API key 或云厂商时默认就是 5 分钟。你离开键盘去喝了杯咖啡回来继续——如果超过保鲜期,第一条请求就会全价重新预填充整段上下文。
- 前缀内容变了。改了项目记忆文件、系统提示、换了加载的技能文件——前缀一变,后面全部失效。项目记忆"又肥又天天改"是最坏组合。
- 换了模型或思考档位。缓存按模型和思考配置分别保存,会话进行到一半切档,下一批请求全是全价。
- 前缀里掺了"每轮都变"的东西。比如在可缓存前缀里放了当前时间戳、随机 ID 这类每轮都不同的内容——前缀永远对不上,缓存永不命中,等于没开。日期应截到"天",或者放到最后一个缓存断点之后。
长会话的上下文可能已经有几十万 token。一次失效 = 这几十万 token 全价重新计算。所以"缓存命中率"是比"总 token 数"更该盯的指标——前者是比率,后者只是规模。
API 用户:断点怎么打
如果你直接调接口,缓存有两种开法:自动缓存(在请求顶层放一个标记,系统自动缓存到最后一个可缓存块)和显式断点(你亲手标在哪里切)。断点要打在稳定内容的末尾,打在每轮都变的那一块上等于每轮都重新写、永远不命中。官方给的自动缓存写法:
{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"cache_control": { "type": "ephemeral" },
"system": "你是一个长期稳定的项目助手……(前面这段越长越稳定,越值得缓存)",
"messages": [{ "role": "user", "content": "这次的问题……" }]
}
// 想把保鲜期从默认 5 分钟拉到 1 小时(写入价变 2 倍):
"cache_control": { "type": "ephemeral", "ttl": "1h" }
还有一个容易被忽略的机制:系统会从断点往回找最多 20 个块的范围内、之前请求已经写过的缓存条目。所以如果会话长到把断点推得离上一次写入太远,就会找不到——这也是官方建议给"增长很长的会话"多留一个断点的原因。
把缓存用成省钱的四招
- 连续作战,别频繁中断。缓存命中会续期,趁热打铁,同一会话内连续做完,比断断续续强得多。
- 系统级内容保持稳定且精简。项目记忆、加载的技能文件是每次请求都在缓存前缀里的最重内容——让它短、让它少改(12 给方法)。
- 会话中途别换模型、别改思考强度。要换就在会话开头定好,一档到底。
- 别在可缓存前缀里放"每轮都变"的内容。时间戳、随机 ID、当前目录这些都放断点之后。
别把缓存理解成一个"优化开关"。对 AI 编程而言,缓存就是把"反复重读历史"的成本从十成降到一成,是长会话唯一经济可行的方案。理解它,你的会话设计和项目配置会自然跟着变好。
11按任务分级:选模型档位与思考强度
同一个任务,用贵的档位和用便宜的档位,单价能差几十倍;同一档位里"思考深度"不同,token 花费也能差出几倍。这一节教你做任务分级——把最贵的算力留给真正需要它的那一步。
当前各档单价(Anthropic 首方价,2026-09-13 校对)
| 档位 | 输入 / 输出(每百万 token) | 缓存:5m 写入 / 1h 写入 / 命中读取 | 适合什么 |
|---|---|---|---|
| Claude Opus 5(最强) | $5 / $25 | $6.25 / $10 / $0.50 | 复杂架构决策、跨多文件的高难度推理、疑难 bug 定位 |
| Claude Sonnet 5(平衡) | $2 / $10 | $2.50 / $4 / $0.20 | 绝大多数编码任务:日常增删改、写测试、重构 |
| Claude Haiku 4.5(轻量) | $1 / $5 | $1.25 / $2 / $0.10 | 简单子任务:批量小改动、格式化、派给子代理跑单一操作 |
| Claude Fable 5 / Mythos 5(更高一档,部分限量供应) | $10 / $50 | $12.50 / $20 / $1 | 最难的那一步。注意 Fable 5.1 / Mythos 5.1 的缓存命中价是 0.025 倍,比别的档更低 |
官方给的三条铁律很直接:① 大多数编码任务用 Sonnet,成本低于 Opus;② Opus 只留给复杂架构决策或多步推理;③ 简单的子代理任务用 Haiku。别让"最强档位"成为默认档位。
另外记住一条会改掉你估算的事实:官方定价页注明 Sonnet 5 发布时的 $2/$10 促销价现已转为标准价,原定调涨到 $3/$15 的安排不会发生。价格类数字以官方定价页为准,本文只保证校对日期当天的口径。
怎么切:会话内、默认档,以及给子代理单独指定
Claude Code 里 /model 可随时切换,/config 设置默认档位。而"跑腿的"可以单独配便宜档位——给子代理写一份配置文件,指定它用 Haiku:
# .claude/agents/log-scout.md
---
name: log-scout
description: 翻日志、跑测试、抓文档,只把结论带回来
model: haiku
---
你只做一件事:找到我描述的信号,然后返回不超过 200 字的结论 + 涉及文件清单。
不要把原始输出贴回来。
结合 10 要记住:换档位会让该模型的缓存失效。所以"先 Opus 调研、再切 Sonnet 施工"要付出一次全价重建——是否值得,取决于切换前后任务的差异是否足够大。
思考强度是把双刃剑
新一代模型默认会"先思考再动手",而思考产生的 token 按输出价计费(输出是输入 5 倍)。对复杂任务这钱花得值;但对简单机械活,思考深度可以降下来:
| 动作 | 效果 | 建议 |
|---|---|---|
降档推理强度(/effort,或在 /model 里选) | 思考 token 明显变少,简单任务仍能高质量完成 | 简单 / 机械性任务时用低档;默认档通常已够用 |
| 拉高推理强度 | 思考更深、结果更稳,但 token 显著变多 | 只在真正的硬骨头(复杂重构、疑难 bug)上临时拉高 |
给"思考额度"设上限:MAX_THINKING_TOKENS=8000 | 给采用固定思考预算的模型设顶 | 需要精确实控时用;采用自适应推理的模型会忽略非零预算,那类模型请改用 effort 档位 |
在 /config 里关闭思考 | 不再产生思考 token | 只对简单任务划算。注意 Fable 系列无法关闭思考(官方说明:它们始终使用扩展思考) |
① 别为了省而全局关思考——那会明显掉质量,返工更贵;② 换思考档位同样会失效缓存(和换模型同理),进会话就先定好;③ 纯机械子任务(给几百行做同一种改写)确实是"Haiku + 低档思考"的典型场景。
12治理:别让主线之外的"帮手"偷烧 token
除了主线会话,还有几类"隐形的烧钱口子":外接工具服务器、子代理、团队助手、定时任务。它们单个看着不大,积少成多、又难以察觉。
外接工具服务器(MCP):能少则少
MCP 是一套让 AI 外接工具的协议——挂上一个服务器,AI 就多出一批可以调用的能力(查数据库、读工单、发消息)。代价是这些工具的说明可能进入你的上下文。
- 能用命令行就别挂服务器。官方明确建议:像
gh、aws、gcloud、sentry-cli这类有命令行的工具,直接让 AI 跑命令比挂服务器更省上下文,因为它们不产生"每个工具一段说明"的常驻开销。 - 好消息:现在默认是延迟加载。官方说明工具定义默认延迟加载——只有工具名和服务器说明会先进上下文,直到 AI 真的用到某个工具才加载它的详情。(这一点是旧教程的常见错误来源:过去确实会把每个工具的完整说明一起塞进去,现在不是了。)
- 关掉没在用的。用
/mcp看当前挂了哪些,把用不上的停掉;用/context看它们实际占了多少。
子代理:让"大嗓门"在隔音间里干活
子代理(subagent)是一个被派出去独立干活的小 AI:它有自己独立的上下文,干完只把一段摘要交回主会话。跑测试、抓文档、翻日志这类"输出又长又吵"的活,正好交给它——海量输出留在它自己的上下文里,主会话只收到一行结论。
让主会话跑一次全量测试 + 读完整日志,几万行输出直接灌进主上下文,之后每一轮都要背着它们重发。
主会话派一个子代理执行"跑测试并总结失败项",回来只有一句"3 个失败,都在 auth_test"——干净又便宜。记得给它配 Haiku 档位(11 有配置文件写法)。
团队助手:人多,烧得也多
如果你的工具支持"多个 AI 同时协作",官方给的成本事实要记住:
- 每个成员都有自己的独立上下文窗口,总 token 与成员数量大致成正比;
- 官方数据:成员处于计划模式时,团队总消耗可达普通会话的约 7 倍;
- 该功能默认是关闭的——需要在配置或环境变量里设置
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1才会启用。所以如果你从未开过它,那它不是你账单的原因;如果开过,记得检查有没有忘关的成员。 - 省钱纪律:队伍保持小、成员用 Sonnet 档、交给成员的指令保持聚焦、干完活立刻关掉——一个"忘了关的成员"会持续烧到会话结束。
后台与"挂机"也会走 token
有些消耗发生在你根本没提问的时候,官方成本文档列了几种:到点就响的定时 / 循环任务(每次触发都带着你的完整上下文跑一轮);跨会话消息(另一个会话发来的消息会在本会话空闲时作为新一轮触发,同样带上全量上下文,可以把入站消息设为挂起而不是直接送达);目标的空闲检查(后台任务等待期间,工具会主动去问一下进度,官方限制每个目标在你两次提问之间最多 3 次,也可设为 0 关闭);以及为支持"下次续聊"而做的后台摘要(官方称通常单会话低于 0.04 美元)。
系统级默认负载:把长流程从项目记忆里挪走
每次请求里,系统提示 + 项目记忆都在可缓存前缀里、也最常被自动重发。如果项目把一堆 README、历史备注、工作流全塞进记忆文件,等于给每一次请求都穿上一件沉重的棉袄。官方的建议很直接:项目记忆保持在 200 行以内,只放核心规则;把专项长指令移到按需加载的技能文件里(技能只有被用到时才进上下文)。
# CLAUDE.md(越长越肥,经常追加)
- 项目说明(整段 README 复制)
- 数据库迁移注意事项 v2(已过期)
- 上个月临时加的构建 workaround
- 最近 20 条会议备注
- ……每次改动,缓存前缀就变一次
肥大 → 每轮都背着重壳;频繁改 → 缓存天天失效、天天全价重建。
# CLAUDE.md(200 行内,只放核心)
- 常用命令:dev / test / lint
- 关键约束:不用 XXX 库、目录规范
- 测试入口与常见失败排查
(详细流程指令移进按需加载的技能文件,
用到才进上下文,不用不占)
精简 → 每轮负担小;稳定 → 缓存前缀长期命中,一折价反复享受。
三种内容的去处,可以这样分:① 全局铁律(常用命令、硬约束)→ 留在记忆文件;② 某个任务的长流程(代码评审检查、数据库迁移指南)→ 挪进按需加载的技能文件;③ 临时备注 / 过期信息 → 直接删。一句话原则:记忆文件是"每次都在场"的,技能是"按需入场"的——把后者塞进前者,就是无谓的常驻开销。
每周一次的治理检查
| 检查项 | 动作 | 为什么它值这次检查 |
|---|---|---|
| 项目记忆 / 技能文件 | 压到 200 行内,删临时备注,长流程挪进技能 | 它越精简稳定,可缓存前缀就越健康(10) |
| 外接工具服务器清单 | 关掉没在用的;能用命令行的优先命令行 | 每个挂载都在悄悄占上下文 |
| 后台循环 / 定时任务 | 不用的停掉 | 它到点就带着你的全量上下文跑一轮 |
| 团队助手 / 子代理 | 确认都收工了,没有漏网的 | 每个活着的成员都在持续计费 |
| 默认模型档 | 确认默认不是最贵的那一档 | 默认档决定你九成请求的单价 |
| 预算上限 | 确认设了消费上限 / 加购上限 | 宁可被工具拦一下,也别让一次失误烧掉一整周预算 |
13场景实战:三个剧本
把前面所有杠杆拧在一起,看三个最常见的实战场景分别该怎么打。命令以 Claude Code 为例,逻辑通用于其它助手。
剧本 A:一天里的"很多个小改动"
典型画像:早上调了个样式,下午加了个接口,晚上修了个小 bug。三个活毫无关联。
别共用一个马拉松会话。三个小任务 = 三个小而聚焦的会话,每个上下文都只有几万 token。用 /rename 给每个会话起名,方便之后 /resume。
"改 components/Navbar.tsx 里的 logo 样式,深浅色都要看清,改完自己核一遍"——一次到位,AI 少空转。
这类活不需要 Opus。干完看一眼 /usage,形成手感。
预期收益:相比"一个会话开一天",每日 token 常能省下一大半,因为再也没有"背着几十万历史问一句小问题"的场面。
剧本 B:接手一个陌生大仓库
典型画像:第一次打开别人的项目,要做一处功能改动,根本不知道代码在哪。
让 AI 用搜索 / 跳转去定位,找到目标函数与相关文件后,只让改动相关的文件进入工作区。
"读懂 orders 模块的支付流程,给我一份两百字的要点和涉及文件清单"——子代理去翻一堆文件,只把结论带回来,主会话保持轻量。
计划模式先给"改哪几个文件、怎么改、风险点"。方案对,再放行;方案错,到此为止,不浪费施工轮次。
把它用在最难的那一步,其余交给 Sonnet。
预期收益:把"广撒网探索"的成本压到最低,主会话上下文始终小巧。这一步常常决定"接手大仓库的首次会话"是几美元还是几十美分。
剧本 C:一场持久战式调试
典型画像:一个诡异 bug 查了两小时,会话已经很长,眼看就要触发自动压缩。
若还在连续作战,缓存多半是热的(看 /usage 的命中率那一行)。保持连续,别中途离开太久让缓存过期。
/compact 保留:复现步骤、已排除的假设、相关文件与最近改动——让它把"结论"留着,把"碎碎念"丢掉。
与其让摘要继续在巨型会话里滚,不如直接开新会话并续上摘要,重打一把更干净、更便宜。
预期收益:长调试不断片、不失控;每次"续命"花的都是压缩 / 摘要的钱,而不是背全量历史的钱。
如果你是按量付费、又常做长任务,记得设预算上限。Claude Code 的 CLI 支持 --max-budget-usd,但要留意官方的限定:它只在打印 / 非交互模式(-p)下生效,子代理的花费也计入这个上限,到达上限后再派子代理会直接失败(该行为需要 v2.1.217 及以后版本)。云控制台与订阅侧也各有消费上限可设。
claude -p --max-budget-usd 5.00 "把这批测试失败项归类,只输出结论"
14省 token 一页纸:能贴在桌上的动作清单
把全文浓缩成四组动作。免费的习惯类永远优先于设置类——多数人的问题在习惯,不在配置。
每天开工前
- 把状态栏 / 用量面板打开,让成本可见(这是唯一一次"设置",收益最大)。
- 给当前会话起个名字(
/rename),方便日后/resume,而不是硬续一个巨会话。
每个任务进行中
- 每轮都问一句:这个会话还该不该继续背这些历史?不相关 →
/clear。 - 需求写精确:范围、文件、验收标准一次给够(09)。
- 让它先搜索 / 跳转定位,再只读相关片段(08)。
- 输出要 diff / 摘要,不让它整份重贴文件(输出是 5 倍价)。
- 小步走:改一点、测一点、及时纠偏。
- 会话中途不换模型、不改思考强度(保住缓存,10)。
每个任务收尾
- 看一眼
/usage:命中率低于预期?去找缓存失效的原因;输出占比异常高?反思提示词是不是让它写太多了。 - 干完就
/clear或结束,别让"半热"的会话挂一整天。
每周一次
- 记忆文件瘦身、外接工具清单清理、定时任务检查、团队助手确认收工、默认档位与预算上限复核——完整表在 12。
如果时间只够做三件事
| 优先级 | 动作 | 为什么是它 |
|---|---|---|
| ① | 不相关的任务开新会话 | 零成本、立刻见效,砍掉的是"每轮重发无关历史"这笔最大开销 |
| ② | 别让它读大文件;给足验收标准 | 同时压住"全价输入"和"返工往返"两个口子 |
| ③ | 会话中途不换模型 / 不改思考档 | 一次切换就能让整段缓存在下一批请求里全价重建 |
这三条已经覆盖了大多数人八成的浪费,剩下两成再回到本文对应的节里逐项处理。
15常见坑:那些"悄悄烧钱"的行为
下面这些行为单独看都"只是小事",叠加起来就是账单上最肥的水分。挨个排查,命中几个就改几个。
八个悄悄烧钱的行为
| 行为 | 它在悄悄花你什么钱 | 怎么改 |
|---|---|---|
| 开着不关的马拉松会话 | 每条新请求都背着全部历史;隔太久回来,第一条还缓存失效、全价重算。头号烧钱主 | 07:不相关就 /clear,用 /rename 保住"以后还能找回来" |
| 把大文件 / 长日志整份丢给它 | 一次读入就几万 token,而且会一直躺在上下文里被反复重发 | 08:先定位、只喂片段、用过滤器 Hook |
| 项目记忆越塞越肥 | 它是每次请求都在缓存前缀里的最重内容;肥大 + 频繁改 = 天天全价重建 | 12:压到 200 行内,长流程挪进技能文件 |
| 会话中途反复换模型 / 换档位 | 切一次 = 缓存按新模型重建一次 = 下一批请求全价 | 10:想用最贵的档位,就在会话开头定好 |
| 模糊需求放任它"自由探索" | 只能广撒网重读一堆文件再猜,返工概率极高 | 09:给文件、范围、验收标准 |
| 让主会话干"又吵又长"的活 | 全量测试、抓文档、翻日志在主会话里跑,输出把上下文灌爆 | 12:派子代理去跑,只回收摘要 |
| 反复贴"巨长原文"让它重读 | 同一段长内容每轮都整段重发,输入量直接多一个数量级 | 自己先截取关键几行再给;需要长期复用的部分做成技能文件,而不是每轮粘贴 |
| 装一堆"号称省 90%"的第三方神器 | 多数未经官方审计;有的要你把对话流量(含代码与可能的密钥)转发给第三方 | 16:先把免费习惯做到位,真有刚需再用可信、可审计的开源方案 |
最容易翻车的三个瞬间
- 深夜挂着会话回消息,隔天第一条缓存过期、全价重算。长会话的上下文可能已有几十万 token,一次失效就是这一整块全价重来。
- 一口气让它读十个文件再"统一改"。方案错了就是"重来一轮 × 十个文件 × 两轮"——这正是剧本 B 要先出方案的原因。
- 把生产日志明文丢给第三方中间件图省事。先想清楚你的代码和密钥在谁手里,再谈省那点 token。
红黑榜速记
| 🚫 少做(费 token) | ✅ 多做(省 token) | 差在哪 |
|---|---|---|
| 一个会话干所有事 | 无关任务 /clear 重开 | 差在"每轮要不要重发那批无关历史" |
| 整文件、整日志入上下文 | 搜索 / 片段 / Hook 过滤 | 差在输入是"全价新读"还是"几行命中" |
| 让它输出整份文件 | 只要 diff / 摘要 | 差在 5 倍价的输出量 |
| 中途切模型、切档位 | 开场定好,一档到底 | 差在缓存是"续上"还是"重建" |
| 模糊指令靠它自己猜 | 给文件 + 范围 + 验收 | 差在往返轮数 |
| 最贵档位当默认 | 日常 Sonnet,硬仗才 Opus | 差在单价基数 |
16什么时候不该省:四条边界
省钱这件事有明确的失效边界。越界之后的"省"不是省钱,是把成本转移到更贵的地方(返工、事故、返修时间)。这一节把四条线划出来。
边界一:省到 AI 开始猜,就是亏
最典型的越界是把输入砍太狠:不给上下文、不说清验收标准、不让它读必要的文件。结果是它靠猜、猜错再纠错,往返轮数翻倍——返工的成本通常远高于你省下的那点输入。判断法:你省掉的这块信息,是不是它完成任务所必需的?是,就别省。
边界二:别为了省钱全局关掉思考
思考 token 按输出价计费,看起来很像"直接砍掉最划算的一刀"。但官方明确说扩展思考默认开启,是因为它显著提升复杂规划与推理任务的表现。全局关掉的质量损失会以返工的形式回来,而且更贵。正确做法是分级(11):机械活用低档,硬骨头临时拉高。
边界三:别把缓存优化做成"魔法"
为了把前缀拼得更"可缓存",把项目记忆拆得七零八落、把工具定义改来改去,读者(包括未来的你)会看不懂这套配置在干什么——维护成本会超过省下的钱。缓存优化的目标是"别去破坏它",不是"围绕它重构整个项目"。
边界四:有些钱本来就不该省
涉及安全、合规、正确性核验的环节,以及你无法验证输出的高风险任务,本来就应该多花 token 去交叉检查、多派一个代理复核、把关键结论拿官方源核对一遍。这些地方省下来的钱,赔率极差。
一张对照表:该省 vs 不该省
| 动作 | 该省还是不该省 | 理由 |
|---|---|---|
| 不相关任务开新会话 | 该省 | 丢掉的是与当前任务无关的历史,零质量损失 |
| 用搜索定位代替整文件读取 | 该省 | AI 看到的是更相关的信息,通常质量还更高 |
| 把长流程挪进按需加载的技能文件 | 该省 | 它们仍然在,只是不进每一次请求 |
| 不给上下文(不给文件、不说验收标准) | 不该省 | 会引发返工,往返成本高于省下的输入 |
| 全局关闭思考 | 不该省 | 复杂任务质量下降,返工更贵 |
| 为可缓存而反复重排项目配置 | 不该省(指别过度) | 维护成本超过收益,而且会让配置难以理解 |
| 关键结论的交叉核验、多代理复核 | 不该省 | 这是买保险,出事的成本远高于 token |
17术语对照表
下面这些词在文中都出现过并且都解释过。这张表是给"读第二遍时回头查"用的,第三列写的是它为什么重要、什么时候用、以及别把它当成什么。
| 术语 | 定义(人话版) | 为什么重要 / 何时用 · 别当什么用 |
|---|---|---|
| token(令牌) | 模型读文本前先切出来的小块;一个 token 可能是一个词、半个词、一个标点或一个汉字 | 一切成本的计量单位,算账先换算成它。别把它当"字数":不同模型切法不同,同一段文字切出来的块数不一样 |
| 分词器 / tokenizer | 决定"怎么切 token"的那套规则 | 换模型换代际,同一段文字的 token 数会变(官方称 4.7 之后多约 30%)。做估算前先确认是哪一代的分词器 |
| 上下文窗口 / context window | 单次请求能一起送进去的 token 总量上限(系统提示 + 项目记忆 + 历史 + 工具说明 + 你的新指令) | 决定一次能"记得"多少,装满了会触发压缩。别把它当"该塞满的地方"——塞得越满,每轮越贵 |
| 输入 token / 输出 token | 模型这次"读入"的内容 / 这次"新写出来"的内容(含思考 token) | 输出单价约为输入的 5 倍,所以"让它少写废话"和"让它少读废话"同等重要。量化时两者分开看 |
| 提示缓存 / prompt caching | 对逐字节完全相同的前缀按输入价的 0.1 倍结算的机制 | 长会话"不破产"的救星,命中率该当核心健康指标盯。别把它当"开不开的开关",它是"别去破坏的前缀" |
| 缓存命中 / 缓存写入 | 命中=这次读到了之前写好的前缀(0.1 倍价);写入=第一次把前缀存进缓存(1.25 或 2 倍价,一次性) | 两笔账要分开算:写入先花、命中后省,复用两次以上才回本 |
| 缓存 TTL(保鲜期) | 缓存的有效期:订阅通常 1 小时、动用加购额度后降到 5 分钟、API key 与云厂商默认 5 分钟 | 决定你离开多久回来要付全价;连续作战更省钱。别当不用管的细节——它解释了很多"隔夜回来突然变贵" |
| 缓存断点 / cache_control | 你显式标在"稳定内容末尾"的缓存标记;一个请求最多 4 个 | 只对直接调接口的人有用。打在每轮都变的内容上等于每轮重写、永不命中 |
| 压缩 / compaction | 把长历史总结成一段摘要以释放上下文空间 | 长任务续命的手段,但它本身是一笔大请求。别当免费的清理:能 /clear 就别只靠压缩 |
/clear / 新会话 | 清空历史、从零开始 | 零成本的会话卫生,切换无关任务时的首选。别怕"浪费已聊的内容"——不相关的内容本就是负担 |
| 思考 token / extended thinking | 模型"先想再答"时产生的内部推理内容,按输出价计费 | 复杂任务上这钱花得值;简单任务可以降档或关闭(Fable 系列无法关闭)。别为省钱全局关掉,质量崩了更贵 |
| 推理强度 / effort | 控制模型思考深度的档位 | 最灵活的"质量-成本"旋钮:简单任务调低、硬仗临时拉高。换它同样会失效缓存,进会话先定好 |
| 子代理 / subagent | 派出去独立干活、只把摘要带回主会话的小 AI,有自己独立的上下文 | 把"吵 / 长"的操作隔离在它的上下文里,保护主会话轻盈;记得给它配便宜档位 |
| MCP 服务器 | 给 AI 外接工具能力的一套协议 / 服务 | 只保留真在用的;能用命令行(gh / aws / gcloud)就优先命令行。别当成"工具越多越强"——每个挂载都在占上下文 |
| Hook(钩子) | 挂在某个动作前后自动执行你指定命令的挂载点(例如"每次跑命令之前") | 在数据进入 AI 的上下文之前先过滤,10 万行日志能压成几行失败摘要。它本身不花 token |
| diff(改动片段) | 只显示"改了哪几行",而不是重贴整份文件 | 要求 AI 只给 diff 是压输出成本最直接的一招(输出是 5 倍价) |
| 额度 / usage credits | 订阅套餐内的用量预算;加购额度是超出后按 token 继续付费的那部分量 | 包月用户真正在"省"的东西。动用加购额度还会把缓存保鲜期从 1 小时降到 5 分钟 |
| 按量付费 vs 包月 | 按每个 token 换美元结算 / 每月固定费用含额度 | 决定你该优化"钱包"还是"额度";也决定 /usage 里那个美元数字等于不等于你的账单 |
18FAQ:七个最常被问的问题
/clear 和 /compact 到底选哪个?/compact;任务告一段落、或接下来要干不相关的事 → /clear。/clear 零成本;/compact 是一笔大请求,只在"确实需要连续性"时才值得花。清之前记得 /rename 起名,之后还能 /resume 回来。/usage 的 Prompt cache 那一行直接可见(官方示例是 91% 的输入来自缓存)。真正要做的不是"开启",而是"别破坏"——不改系统提示与项目记忆、会话中途不换模型、别让可缓存前缀混进每轮都变的内容。另外注意:太短的前缀不会被缓存,最短可缓存长度视模型在 512–4096 token 之间。-p 加 --max-budget-usd 设一道硬上限。99一句话总结
AI 编程的 token 烧得快,根源只有一条:每一轮请求都要把当时的全部上下文重新发一遍,而你新写的那句话往往是其中最小的一块。所以省 token 的顺序是固定的三步——先改习惯(不相关的活就 /clear、先用搜索定位再只喂片段、把文件 / 范围 / 验收标准一次说清),再看缓存(让项目记忆短而稳定、会话中途不换模型、别在可缓存前缀里塞每轮都变的东西,命中时读取只要一折),最后才调档位(日常用 Sonnet、思考强度按任务分级、跑腿的交给配了 Haiku 的子代理)。先用 /usage 建立一个量级感,再动手——多数人改完前三个习惯,成本就能降掉一大半。另外记住四条不该省的边界:别让它靠猜、别全局关思考、别为缓存把项目配置搞成魔法、别在安全与正确性核验上抠钱。
98参考来源与证据边界
本文里所有具体数字都来自下面这些一手来源,校对日期为 2026-09-13。价格、模型名、命令行为都属于会变的东西,所以我把"哪一类事实来自哪一页"写清楚,方便你回源核对。
一手来源
- Anthropic — 模型与定价官方页(
docs.claude.com/en/docs/about-claude/pricing):各档输入 / 输出 / 5 分钟缓存写入 / 1 小时缓存写入 / 缓存命中读取的单价;缓存倍率脚注(5 分钟写入 1.25 倍、1 小时写入 2 倍、命中读取 0.1 倍,Fable 5.1 与 Mythos 5.1 为 0.025 倍);"Claude 4.7 及之后模型的新分词器使同样文本多产出约 30% token";以及 Sonnet 5 的 $2/$10 已转为标准价、原定的涨价安排取消。本文 11 的单价表逐行取自这里。 - Anthropic — Prompt caching 官方文档(
docs.claude.com/en/docs/build-with-claude/prompt-caching):自动缓存与显式断点两种开法、"一个请求最多 4 个断点"、缓存层级(工具 → 系统 → 消息)与失效规则、最短可缓存长度(按模型 512 / 1024 / 2048 / 4096 token)、默认 5 分钟 TTL 与 1 小时 TTL 的 2 倍写入价、20 个块的向后查找窗口,以及"改思考参数会使消息前缀失效"。 - Anthropic — 上下文窗口官方文档(
docs.claude.com/en/docs/build-with-claude/context-windows):哪些模型是 1M 窗口、单次最多 128k 输出、以及"1M 是默认值且按标准价计费"。 - Anthropic — token 计数官方文档(
docs.claude.com/en/docs/build-with-claude/token-counting):新分词器约 +30%,以及"迁移时不要复用旧模型上量到的计数"。 - Claude Code — Manage costs effectively 官方文档(
docs.claude.com/en/docs/claude-code/costs):本文 04 的/usage示例输出、Prompt cache (main)那一行、"每次请求发送完整对话"、企业均值 $13/活跃日与 $150–250/月、90% 用户低于 $30/日、缓存保鲜期(订阅 1 小时、动用加购额度后 5 分钟、API key 与云厂商默认 5 分钟)、后台开销低于 $0.04/会话、外接工具定义默认延迟加载、项目记忆建议 200 行内、扩展思考按输出价计费、团队助手计划模式下约 7 倍,以及 08 那个 PreToolUse 过滤器脚本的全部内容。 - Claude Code — CLI 参考与交互模式文档:
--max-budget-usd仅打印模式生效、且子代理花费计入上限;/rename、/resume、/effort、/status、/config等命令的现行行为。 - OpenAI — Pricing 与 Prompt caching 官方文档(
platform.openai.com/docs/pricing、/docs/guides/prompt-caching):跨厂商验证缓存倍率(读取 0.1 倍、写入 1.25 倍);10 那两个算式(1.35 倍 vs 2 倍、2.15 倍 vs 10 倍)以及"一个请求最多 4 次缓存写入"均取自这里。 - DeepSeek — Models & Pricing、Token & Token Usage、Context Caching 官方文档(
api-docs.deepseek.com):官方给出的 token 与字符换算口径(1 个英文字符 ≈ 0.3 token、1 个汉字 ≈ 0.6 token);缓存命中与未命中的巨大价差(V4 Pro:命中 $0.022/百万 vs 未命中 $0.66/百万,约三十分之一);缓存默认开启、按"前缀单元"整段匹配;以及 1M 上下文 / 最大 384K 输出。
本文自己做的核对
- 旧版逐条对账。上一版的每一个可运行示例(账单输出、费用公式、手算过程、"喂太多 / 喂得刚好"两个提示词、"肥 / 精简"两份项目记忆样例)都在新版里有对应物,并且全部按官方现行文档重核了一遍;重核后发现并改掉的过时陈述列在交付报告里。
- 跨厂商对照。"缓存读取 0.1 倍、写入 1.25 倍"这条不是一个厂商的规则——Anthropic 与 OpenAI 两家官方定价页给的是同一组倍数,DeepSeek 的缓存价差甚至更大(约三十分之一)。这说明它是行业通行做法,而不是某家产品的特性。
证据边界与时效
- 价格与倍率是快变量。本文的单价表是 2026-09-13 的口径;官方明确说过会调整价格(本文就记了一次"原定涨价被取消")。任何涉及预算的决策,请回官方定价页复核当天的数字。这也是本文把
learn:shelf-life标为evolving的原因。 - 命令与界面按 Claude Code 口径。为给出可执行的命令,本文以 Claude Code 为主要示例;其它助手(OpenCode、各类编辑器插件、各家 CLI)的原理相同,但命令名与面板位置可能不同——请查你所用工具的现行文档。
- 没有做的事。我没有在你的机器上实测各类会话的真实账单;没有评测第三方 token 优化工具的效果与安全性(只作风险提示,不作推荐);也没有覆盖企业级的成本归集、把用量汇总到自家监控系统的做法、以及云厂商(Bedrock / Vertex / Foundry)各自不同的单价细节。
- 一处口径提醒。"$/每百万 token"里的"百万"是 MTok(Million Tokens,百万 token);本文所有百分比与倍数都是官方页面上的原值,我没有做二次换算。