Skip to content

13.7 省 Token 与提质量的统一决策框架

省钱和提质量在大多数动作上是同一件事。本篇给出那张按收益排序的动作表,以及三处它们会打架的地方。

读完你能做什么:按收益/成本排序执行一份 22 条的优化清单,识别省钱与质量冲突的三种情形,并落地一套可直接抄的默认配置。


一、为什么两个目标基本重合

text
上下文变长 ──┬─→ 每轮计费的 token 变多      → 更贵
             └─→ 注意力被摊薄(context rot) → 更差

同一个自变量,两个因变量同向。所以「找到能达成目标的最小高信号 token 集合」这一条原则同时优化了两件事。

这也意味着一条判据:如果一个优化只省钱不提质量,或者只提质量不省钱,那它大概率是在做权衡而不是改进,需要单独论证。


二、三处冲突点

冲突省了什么亏了什么怎么处理
压缩后续每轮的输入量摘要必然丢信息;压缩本身是一次完整请求在任务边界做,带保留指令;关键状态先落盘再压
延迟加载常驻上下文多一次往返,首次使用变慢高频少量工具用 alwaysLoad,其余延迟
换便宜模型直接成本复杂推理的质量按任务分层:主会话用强模型决策,扫描/格式化交给 Haiku

第三条还有个隐藏项:弱模型走错路会产生额外轮次,可能比省下的单价更贵。判断标准是任务的「验证成本」——能被测试或脚本立刻验证的任务,用弱模型风险小;需要判断力的任务不要省这个钱。


三、按收益排序的动作清单

收益量级按「一个 50 轮的中型会话」估算。

🔴 第一梯队:数量级收益

#动作收益实施成本风险
1切换到无关任务时用 /clear直接砍掉平方项丢失连续性
2大量读取 / 探索交给子代理主会话侧压缩 20~50×摘要可能漏细节
3CLAUDE.md 压到 200 行以内每轮省数千 token中(要做取舍)
4工具输出加 Hook 过滤单次省数千到上万中(写脚本)过滤掉了需要的信息
5默认模型从 Opus 降到 Sonnet约省 60%复杂任务质量
6会话开头定死模型与 effort避免每次切换全量重算
7确定性操作写成脚本而非文档代码零上下文 + 结果确定

🟡 第二梯队:显著但非数量级

#动作收益实施成本风险
8MCP 保持 tool search 默认开启省数万常驻 token零(默认)多一次往返
9关掉不用的 MCP server(/mcp每个省数千
10能用 CLI 就不用 MCP常驻归零中(配权限规则)
11走错路用 /rewind 而不是 /compact省一次完整请求
12有副作用的 Skill 加 disable-model-invocation常驻归零 + 避免误触发
13扫描类子代理指定 model: haiku该部分省约 80%
14CLAUDE.md 里要求简洁输出输出的复利成本减半
15长文档改索引 + 按需精读单轮成本大幅下降索引质量
16只在改某类文件时相关的规范做成 paths: rule常驻归零压缩后会丢失
17简单任务降 effort 档或关思考输出 token 显著减少复杂任务质量

🟢 第三梯队:值得做但量级有限

#动作收益
18一次说清需求,减少澄清轮次直接减少 N
19让多个独立操作并行执行减少轮数
20复杂任务先进计划模式避免走错方向的重做成本
21脚本化调用用 --bare跳过 hooks / skills / plugins / MCP / auto memory 的加载
22给出验证目标(测试用例、期望输出)让它自查,减少来回

第 22 条常被当作质量建议,但它同时是最有效的省钱手段之一:一次能自我验证的执行,胜过三轮「不对,再改改」。


四、四象限:拿到一个任务先判断

text
                  上下文需求大

   拆成多个短会话       │      派子代理 / fork
   + 外部状态文件       │      + 只回摘要

  ─────────────────────┼─────────────────────  推理难度

   直接做,用 Haiku     │      直接做,主会话
   或 --bare            │      用强模型 + 计划模式

                  上下文需求小
象限典型任务配置
小上下文 / 低难度格式转换、重命名、生成样板Haiku,或 claude --bare -p
小上下文 / 高难度算法设计、架构取舍、疑难 bug 定位主会话,强模型,计划模式,高 effort
大上下文 / 低难度全库扫描、批量替换、依赖盘点Haiku 子代理,只回清单
大上下文 / 高难度跨模块重构、遗留系统迁移拆成阶段,每阶段独立会话 + PROGRESS.md

右下角那格是唯一应该毫不犹豫花钱的地方。左上角那格是最容易浪费钱的地方。


五、一份可以直接抄的默认配置

~/.claude/settings.json

json
{
  "model": "sonnet",
  "fallbackModel": "haiku",
  "effortLevel": "medium",
  "autoMemoryEnabled": true,
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh"
  },
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          { "type": "command", "command": "~/.claude/hooks/filter-test-output.sh" }
        ]
      }
    ]
  }
}

项目级 .claude/settings.json

json
{
  "claudeMdExcludes": [
    "**/vendor/**",
    "**/monorepo/other-team/**"
  ]
}

项目 CLAUDE.md 的骨架(目标:150 行以内):

markdown
# 项目名 · 一句话定位

## 绝对规则
(3~7 条,违反即错的硬约束)

## 构建与测试
(可直接粘贴执行的命令)

## 目录约定
(表格,一行一个目录)

## 输出偏好
- 回复保持简洁,不要复述已完成的步骤
- 改代码前先说改哪些文件、为什么,不要长篇解释

# Compact instructions
压缩时优先保留:未解决的失败用例、已定的架构决策、正在改的文件路径。
可丢弃:已通过的测试输出、成功的构建日志。

会话级习惯:

text
开始新任务   → /clear
复杂任务     → Shift+Tab 进计划模式
走错方向     → Esc 打断,/rewind
任务告一段落 → /compact 带保留指令
定期核对     → /context 看常驻构成,/usage 看用量归因

六、反模式清单

反模式为什么错改成
一个会话从早开到晚每条消息都按全天历史计费按任务切分,/clear
「把整个 src 读一遍再说」一次性灌入几十万 token,且大部分用不上先 Grep 定位,或派子代理
把所有流程细节堆进 CLAUDE.md无关任务也要付这笔常驻拆成 Skill
/compact 续命而不是 /clear每次压缩都是一次完整请求,且累积失真无需连续性时直接 /clear
中途反复切模型试效果每切一次全量重算会话开头定好,要比较就开两个会话
装满 MCP server 备着每个连着的 server 都有常驻成本与连断风险/mcp 定期清理,优先 CLI
让 Claude 现场写一次性校验代码代码进上下文,且每次结果可能不同固化成 scripts/ 里的脚本
把长参考资料贴进提示词一次性巨额输入,且注意力被稀释落盘 + 索引 + 按需精读
用「改进一下这个代码库」这类模糊指令触发全库扫描指名文件与目标
代理团队开一堆成员每个成员一套独立上下文,计划模式下约 7 倍消耗保持小队伍,用完及时关闭

七、把框架变成一句话

每一次要往上下文里加东西之前,先问:这一步真的需要它吗?如果不是这一步需要,能不能只留一个指针?

其余全是这句话的推论。


延伸阅读

基于 VitePress 构建 · 内容采用原作者授权