首页 偏方 N° T11

Token 黑名单 6 类 —— 哪些字符串最贵,改完砍 30%-50%

T2 写了怎么开 cache,T7 写了怎么提高命中,T9 写了 cache 失效的 4 个隐藏触发器——3 篇都在讲「怎么用 cache 省 token」。但 cache 是「省着花」,真正能砍 30%-50% 的是「别乱花」。这一篇列 6 类「看到就改」的最贵字符串:代码块、重复 base、闲聊、无结构日志、历史冗余、例子不收敛。每类配实战数据 + 改法 + 替代。

Token 黑名单 6 类 —— 哪些字符串最贵,改完砍 30%-50%

T2 写了怎么开 cache,T7 写了怎么提高命中,T9 写了 cache 失效的 4 个隐藏触发器——3 篇都在讲「怎么用 cache 省 token」。但 cache 是「省着花」,真正能砍 30%-50% 的是「别乱花」。

「别乱花」比「省着花」难 10 倍——因为它要求你看每一个字符串、识别它「值不值这个 token」。

这一篇把 14 个月里我识别出的 6 类「最贵字符串」列出来——每类配实战数据 + 改法 + 替代。黑名单就是改完直接砍 token 的清单。

6 类黑名单(按节省潜力排序)

排名类别单次浪费频次累计影响
1代码块500-3000 token高(每次 brief 都有)30% 账单
2重复 base200-500 token高(每轮都重发)15% 账单
3闲聊 / 致谢 / 道歉50-200 token高(每轮都有)10% 账单
4无结构日志800-5000 token中(出错时才有)12% 账单
5历史消息冗余1000-10000 token中(多轮对话)8% 账单
6例子不收敛200-1000 token低(仅训练)5% 账单
合计~80% 账单

6 类合计节省 80%——但实际可改的只有 50%-60%(前 4 类就够)。下面每类拆给你看。

① 代码块 ——「最贵的字符串」

现象:每次 brief 里塞大段代码 / JSON / YAML / log。单次浪费 500-3000 token

实战数据

  • 5 月改《妖管局》细纲:每章 brief 平均 1500 token,其中代码块 / 例子代码占 1100 token
  • 砍掉后每章 brief 400 token——砍 73%
  • 5 月账单因此 -28%

最常见的 4 种代码块

a. JSON schema(嵌在 brief 里)

# 写一个脚本,输入是这种 JSON:
{
  "name": "林鹿",
  "age": 25,
  "occupation": "妖管局新员工",
  "skills": ["见鬼", "不血统", "加班"],
  "background": "..."
}

问题:JSON schema 信息密度低——每个 { " : , 都是 token。改法:用自然语言描述:

# 写一个脚本:
- 输入:人物卡,包含 名字/年龄/职业/技能/背景 5 个字段
- 林鹿 = 25 岁妖管局新员工,3 个技能,背景是农村来的

节省:JSON 250 token → 自然语言 80 token = -68%

b. YAML config(嵌在 brief 里)

personality:
  introvert: true
  humor: dry
  quirks:
    - 喜欢用"那个"开头
    - 记不住人名
    - 看到猫会愣 2 秒

改法:用列表

# 人物性格:
- 内向
- 冷幽默
- 3 个小怪癖:说话用"那个"开头、记不住人名、看到猫会愣 2 秒

节省:120 token → 60 token = -50%

c. 长 code snippet(“参考”用的)

问题:贴 30 行示例代码希望 agent 模仿——但 agent 90% 的情况只用了前 3 行。改法只贴前 3 行 + 「剩下照这个模式」

节省:300 token → 50 token = -83%

d. log 输出(“看一下哪里错了”)

问题:贴 50 行 log 找 1 行错——agent 把 50 行都读一遍。改法只贴错误前后 5 行 + 关键 info

节省:1500 token → 150 token = -90%

修法总览

类型之前之后节省
JSON schema自然语言-68%
YAML config列表-50%
长 code snippet前 3 行 + “照模式”-83%
log 输出错误前后 5 行-90%

14 个月数据:代码块这一类让我砍了 30% 账单——T11 第一黑名单。

② 重复 base context ——「每轮都重发」

现象:每轮对话都重复 system prompt / few-shot 模板 / 项目背景。每轮浪费 200-500 token

实战数据

  • 5 月我有一个 30 轮对话项目——每轮都重发 system prompt (300 token) + 角色卡 (200 token) + 项目背景 (200 token) = 700 token/轮 × 30 轮 = 21000 token 浪费
  • 改用 Anthropic prompt cache(system prompt 缓存)+ 项目背景移到 user 消息最前 = 砍 90%

最常见的 3 种重复

a. System prompt 每轮都重发

问题:Mavis / Claude API 不会自动缓存 system prompt——每条消息都重发整个 system prompt

修法

  • Anthropic 用户:用 prompt cache 工具(system prompt 标 cacheable)
  • OpenAI 用户:把不变的放 system message,开 o1-mini cache
  • 其它:把”必须每轮都在”的放 system,“偶尔变”的放 user message 最前

b. 角色卡 / 人物设定 每轮都重发

问题:写《妖管局》时每轮重发”林鹿 = 25 岁妖管局新员工”——30 轮重复 30 次

修法

  • 第一次消息里写”以下是角色卡,[全部内容]”
  • 第二轮起每轮开头写”[以上角色卡保持生效]“——agent 理解
  • 极致:用 cache 工具把角色卡标 cacheable

c. 项目背景 / 历史决策 每轮都重发

问题:每轮都说”我们在做《妖管局》第 X 章”——agent 已经在上下文里,重发浪费。

修法:把”我们在做 X”放在第 1 轮,后面用指代 “接着写” / “上面那一段改”。

14 个月数据:重复 base 让我砍了 15% 账单——T11 第二黑名单。

③ 闲聊 / 致谢 / 道歉 ——「无效 token」

现象:模型自动生成(或你自己写)的”好的我明白了”、“非常感谢您的建议”、“抱歉,我重新理解一下”——每轮浪费 50-200 token

实战数据

  • 6 月我跑 50 轮对话——平均每轮 150 token 闲聊 / 致谢 / 道歉
  • 把”好” / “谢谢” / “我理解” / “抱歉”全删 = 50 轮 × 150 token = 7500 token 砍掉

最常见的 5 种无效字符串

字符串浪费修法
”好的我明白了。“8 token
”非常感谢您的建议。“12 token
”抱歉,我重新理解一下。“15 token改成”重新理解:"
"我理解你的意思是…“20 token直接回答
”希望我的回答对您有帮助。“18 token

修法总览

  1. 写 system prompt 时加约束:在 system prompt 末尾加 “不要用致谢 / 道歉 / 「我理解」开头。直接回答。”
  2. 收到回复后裁剪:把回复前 50 字符的”好的 / 谢谢 / 抱歉”全删
  3. 在 Co-thinker 模式下特别严:Co-thinker 模式回复默认带”嗯 / 我觉得 / 你确定吗”——这些是反问需要的,但致谢 / 道歉仍可删

14 个月数据:闲聊类让我砍了 10% 账单——T11 第三黑名单(但这是”细水长流”型,单次小但高频)。

④ 无结构日志 ——「agent 解析不出来”

现象:贴大段纯文本 log(不 JSON、不分类、不带分隔符)——agent 既要读又要解析,单次浪费 800-5000 token

实战数据

  • 6 月改 Discord 30 天项目时贴 1 段 log——4 万字符 raw text
  • agent 解析 1.5 万 token 才找到 3 个错误
  • 改成结构化 JSON 后,agent 用 200 token 定位所有错误 = 砍 98%

最常见的 2 种无结构

a. raw text log(不分类、不带时间)

[14:23:01] 启动服务
[14:23:02] 连接数据库
[14:23:03] 错误:connection timeout
[14:23:04] 重试中
[14:23:05] 错误:connection timeout
[14:23:06] 重试中
[14:23:07] 成功

问题:人眼可读但 agent 难解析(“哪几行是错误” agent 要扫 7 行)。

修法

[
  {"t": "14:23:01", "level": "info", "msg": "启动服务"},
  {"t": "14:23:03", "level": "error", "msg": "connection timeout"},
  {"t": "14:23:05", "level": "error", "msg": "connection timeout"},
  {"t": "14:23:07", "level": "info", "msg": "成功"}
]

节省:300 token(raw text)→ 120 token(JSON)= -60%agent 解析更快(结构化数据 schema 内置)。

b. 嵌套打印([Class.method] [thread-1] ...

[2026-06-15 14:23:01.123] [INFO] [main] [com.x.Service.method1] 启动
[2026-06-15 14:23:02.456] [WARN] [thread-2] [com.x.Db.connect] connection slow (1.2s)
[2026-06-15 14:23:03.789] [ERROR] [thread-2] [com.x.Db.connect] connection timeout

问题:每行带 5 段 metadata——80% 是噪音。agent 要找到错误得扫整段。

修法只贴 ERROR 行 + ERROR 上下文(前后各 1 行)

14 个月数据:无结构日志让我砍了 12% 账单(单次砍得多但频次低,仅”出错时”才有)。

⑤ 历史消息冗余 ——「多轮对话的循环」

现象:多轮对话每轮都重发之前的对话历史——第 10 轮时已经把第 1-9 轮重复 9 次

实战数据

  • 5 月改怪招本 v3 跑了 50 轮对话——平均每轮 8000 token 历史冗余
  • 改成”摘要”模式(第 5/10/15/20… 轮做一次摘要替换历史)= 砍 60%

最常见的 3 种冗余

a. 完整历史每轮重发

问题:第 1 轮 2000 token 上下文,第 10 轮累计 20000 token——第 10 轮 1 条消息但带了 20000 token 历史

修法

  • 每 5 轮做一次摘要(前 5 轮 → 200 token 摘要)
  • 用 Anthropic cache:标记前 4 轮 cacheable,第 5 轮改摘要
  • 用滑动窗口:只保留最近 10 轮,之前的自动摘要

b. 重复的”指令前缀”

问题:每轮都写”请用中文回答,300 字内,5 段结构”——20 轮重复 20 次

修法:把”指令前缀”放 system prompt,永不变。每轮 user message 只写”写下一段”。

c. 重复的”输出格式”

问题:每轮都重发”输出 JSON 格式:{...}”——20 轮重复 20 次。

修法:放 system prompt,永不变

14 个月数据:历史消息冗余让我砍了 8% 账单——T11 第五黑名单(多轮对话越长影响越大)。

⑥ 例子不收敛 ——「few-shot 越训越乱」

现象:few-shot 提示词里的例子 5 个写法都不一样——agent 学到的不是”模式”是”例子集”

实战数据

  • 4 月我训练一个 5-例子客服 prompt——5 个例子分别是”礼貌型 / 直接型 / 学术型 / 口语型 / 段子型”
  • 实际跑 1000 条请求,5 种风格随机出现——品牌一致性 38%
  • 改成”5 个例子同一种风格”(学术型 5 个不同场景)= 品牌一致性 89% + 训练 token -40%

最常见的 2 种不收敛

a. 例子风格不统一

问题:5 个例子用了 5 种不同语气——agent 学不到”什么是品牌”

修法:所有例子同一风格(语气 / 用词 / 长度一致),只换场景

b. 例子边界不统一

问题:5 个例子有的用了 emoji 有的没用、有的分了段有的没分、有的用列表有的用 paragraph——agent 不知道”边界在哪”

修法:5 个例子结构完全一致(emoji / 分段 / 列表 / 长度都是 5 个统一)。

14 个月数据:例子不收敛让我砍了 5% 账单——T11 第六黑名单(仅训练场景,频次低但单次砍得多)。

6 类「看到就改」清单(汇总)

下次写 brief / 跑 agent 之前,先扫一遍这 6 条

  • ① brief 里有没有大段代码块?→ 改自然语言 / 前 3 行 / 错误前后
  • ② system prompt 有没有每轮重发?→ 标 cacheable / 移到 user 最前
  • ③ 输出里有没有”好的 / 谢谢 / 抱歉”?→ 加 system 约束 + 手动删
  • ④ log 输出有没有无结构?→ 改 JSON / 只贴 ERROR
  • ⑤ 多轮对话历史有没有冗余?→ 每 5 轮摘要 / 滑动窗口
  • ⑥ few-shot 例子有没有不收敛?→ 同一风格 / 同一边界

全过 → -30% ~ -50% 账单过 1-2 条 → -5% ~ -10%

6 类反模式(“你以为不是黑名单,其实就是”)

跑 T11 的 14 个月里我踩过 3 个反模式——给你提个醒:

反模式 1:「系统提示词长 = 智能高」

症状:system prompt 越写越长(5000 token、10000 token)——以为”信息越多 agent 越聪明”。 真因system prompt 越长,每轮重发越费——50 轮对话 × 10000 token = 50 万 token 在 system prompt 上。Sonnet 4.5 单价是 ¥0.021/1k token,system prompt 1 万 token × 50 轮 = ¥10.5——光 system prompt 就烧掉 ¥10。 修法system prompt 只放”必须每轮都在”的(约束 / 角色 / 格式),“偶尔用”的放 user message 最前。

反模式 2:「few-shot 例子越多越好」

症状:few-shot 加到 10 个例子——以为”例子多 agent 学得全”。 真因:10 个例子 = 10×few-shot_token 每轮重发。5 个 vs 10 个例子准确率差别 < 3%——但成本 2 倍。 修法3-5 个例子 + 收敛(同一风格 / 同一边界)——T11 第 6 类实战数据证明 5 个收敛例子 > 10 个发散例子。

反模式 3:「agent 报错就贴完整 log」

症状:agent 报”TypeError: x is not a function”——你贴 200 行 log 让 agent 自己看。 真因:agent 读 200 行 log = 8000-10000 token。80% 的 log 是噪音修法只贴错误前后 5 行 + 关键 info——T11 第 4 类实战数据证明 -90% 账单。

5 分钟扫一遍 6 类的实操流程

写 brief 之前 / agent 跑完报账单之后,花 5 分钟扫这 6 条

问自己时间
1brief 里有大段代码块吗?(>20 行 / 1 个完整 JSON)30 秒
2system prompt 是 1 段长文还是”必须每轮在 / 偶尔用”分开?30 秒
3最近 3 轮回复开头有没有”好的 / 谢谢 / 抱歉”?30 秒
4我最近贴的 log 是 raw text 还是 JSON / 分级?1 分钟
5多轮对话到第 5 轮了,做过摘要吗?1 分钟
6few-shot 例子风格统一吗?边界一致吗?1 分钟

5 分钟 = 6 个 yes/no全 yes → 砍 30%-50% 账单4/6 yes → 砍 20%≤ 3/6 yes → 没改,账单照旧

把这 6 步做成 sticky note 贴屏幕——跑 agent 之前必扫,3 周后账单自己会说话。

1 个真实小案例:5 月改《妖管局》细纲跑 T11

5 月写《妖管局》第 5-7 章时,T11 黑名单还没成文——brief 是怎么写怎么费。拿 5 月 12 日那周的数据看:

那天brief tokenagent 输出总 token浪费(按 T11 6 类估)
5-12 一180024004200代码块 1100(26%)+ 闲聊 240(6%)= 32%
5-13 二160021003700代码块 950(26%)+ 重复 base 400(11%)= 37%
5-14 三190023004200代码块 1300(31%)+ log 600(14%)= 45%
5-15 四150018003300代码块 800(24%)+ 闲聊 200(6%)= 30%
5-16 五200025004500代码块 1400(31%)+ log 700(16%)= 47%
周均176022203980平均 -38%

5-17 周末我把 T11 黑名单写出来——下周一开始每条 brief 都过 6 条清单

那天brief tokenagent 输出总 token节省(按 T11 改后)
5-19 一60019002500-37%
5-20 二55017002250-39%
5-21 三70021002800-33%
5-22 四50016002100-36%
5-23 五65019002550-43%
周均60018402440平均 -38%

5-12 那周平均 3980 token / 天 → 5-19 那周平均 2440 token / 天——日均省 1540 token

月账单:1.2 万 token(之前)→ 0.75 万 token(改后)= -38%

1 周改完,省整月账单——T11 黑名单值回来用 1 周的 brief 重写。

复现

# 1. 装 token 监控
mavis cron self --cron-name token-cost-monitor --every "1d" \
  --prompt "扫描昨日所有 .mdx + prompt 文件,按 6 类黑名单统计浪费 token。"

# 2. 跑监控 → 出账单
python scripts/token-blacklist-audit.py \
  --dir src/content/posts \
  --days 30

# 输出:
# ① 代码块浪费:12000 token (28%)
# ② 重复 base 浪费:6500 token (15%)
# ③ 闲聊浪费:4200 token (10%)
# ...

# 3. 按账单 top 3 类别先改

14 个月总账单(T11 黑名单 ROI)

阶段月均账单节省
改 T11 之前8.5 万 token
砍①代码块后6.0 万 token-29%
砍②重复 base 后5.1 万 token-40%
砍③闲聊后4.6 万 token-46%
砍④日志后4.0 万 token-53%
砍⑤历史冗余后3.7 万 token-56%
砍⑥例子收敛后3.5 万 token-59%

6 类合计砍 59% 账单 = 14 个月省 ¥500+——T11 是 14 个月里”花 1 周改完,省 14 个月账单”的偏方。

关键 takeaway

  • 6 类按”砍多少 × 频次”排序:①代码块 > ②重复 base > ③闲聊 > ④日志 > ⑤历史 > ⑥例子
  • cache 是”省着花”,黑名单是”别乱花”——前者省 20-30%,后者省 30-50%
  • 每类都有”立即可改”清单:①前 3 行 / ②cacheable / ③system 约束 / ④JSON / ⑤摘要 / ⑥同风格
  • 6 类合计 -59% 账单——比 cache 还省
  • “看到就改”清单比”重新设计 prompt”更高效——清单 5 分钟扫一遍,prompt 重写 1 小时

T2 开了 cache,T7 提了命中,T9 修了失效——3 篇都是「cache 层面」。T11 是「内容层面」:哪些字符串本身就不该进 prompt。这一篇和 T2/T7/T9 配套看才完整。

配套

  • T2 · Claude 4 prompt cache 砍 60% 账单 — T11 是 T2 的补充
  • T7 · Cache 命中率从 60% 提到 95% — 跟 T11 一起看
  • T9 · Prompt cache 失效的 4 个隐藏触发器 — 跟 T11 一起看
  • T10 · Mavis cron self 1 周省 4 小时 — T11 的 token-cost-monitor cron 跑的就是 T11 的审计
  • D4 · 9 维度 type 选型矩阵 — 9 维度里”预算”维度跟 T11 直接挂钩
THE END

怪招本 · vol.01 · 第 T11 期