Agent 的「无意识代价」:6 个你看不到的 token 黑洞
你以为你优化了 prompt,其实有 6 个隐性 token 在偷你的预算。每个 1-3k,月账单悄悄多 30%。
背景
我帮 4 个团队做过 prompt 优化。每个团队优化前都觉得自己 prompt 压得差不多了。优化后平均降本 28%。
降下来的 28% 来自他们没意识到的 6 个 token 黑洞。
下面 6 个,按”常见程度”排。
黑洞 1:tool schema 重复
# 错的写法
tools = [
{"name": "search", "description": "...", "parameters": {...}},
{"name": "search_again", "description": "...", "parameters": {...}}, # 几乎一样
{"name": "search_v2", "description": "...", "parameters": {...}} # 几乎一样
]
3 个 search 工具 = 3 倍 schema token。1-2k/请求。
修法:合并工具,加 enum 区分行为。
黑洞 2:few-shot 占大头
# 错的写法
prompt = """
You are a helpful assistant.
Example 1: ...
Example 2: ...
Example 3: ...
... (10 个 examples)
Now answer the user's question:
"""
10 个 example = 4-5k token,占了总 prompt 的 50%。
修法:
- 留 2-3 个最有代表性的
- 用
<example>块压缩(见 T1 · 偏方 3) - 或者 zero-shot(很多 case 真的不需要 few-shot)
黑洞 3:system prompt 内嵌的 URL / base64
prompt = f"""
参考资料:
- https://example.com/docs/{very_long_path}
- {base64_image_data}
- {very_long_inline_data}
"""
URL / base64 算 token(base64 比二进制更费 token)。单次 1-3k。
修法:
- URL 用短链
- 图片用 URL 引用 + cache,不要 inline
- 大文本不要塞 prompt
黑洞 4:cot / think 标签没关
# 错的写法
prompt = "Think step by step.\n\n" + task
# Claude 默认会输出 <thinking>...</thinking> 块
# 但有时候开发者没意识到这些也算 output token
<thinking> 块默认计费。平均多 30-50% output。
修法:
- 不用 cot 时别开
- 必要时用
</thinking>边界拆 token
黑洞 5:multi-turn 对话的”重复 system prefix”
# 多轮对话中,每次请求都带完整 system
messages = [
{"role": "system", "content": SYSTEM_5K},
{"role": "user", "content": "Q1"},
{"role": "assistant", "content": "A1"},
{"role": "user", "content": "Q2"},
# ↑ 这次请求的 input 包含 SYSTEM_5K + Q1 + A1 + Q2
]
每轮都重复 system prefix。如果对话 20 轮,system 算了 20 次。
修法:开 prompt cache。5K system 缓存一次,hit 后 0.1x 价。省 80%。
黑洞 6:未压缩的对话历史
# 错的写法:把整个对话历史带上
messages = [
system,
*history_50_turns, # 50 轮对话 = 100k token
user_new_question
]
history 越长,每次请求越贵。50 轮历史算 50 次。
修法:
- 每 8 轮摘要一次(见 T1 · 偏方 5)
- 超过 30 轮的对话直接新开 session,把关键 context 用新 system 注入
6 个黑洞合计
| 黑洞 | 节省比例 | 实现难度 |
|---|---|---|
| 1. tool 重复 | 5-10% | 低(合并) |
| 2. few-shot 过多 | 10-15% | 中(实验) |
| 3. URL / base64 | 5-10% | 低(短链) |
| 4. cot 标签 | 5-10% | 低(关掉) |
| 5. system prefix 重复 | 30-50% | 低(开 cache) |
| 6. 对话历史不压 | 20-30% | 中(摘要) |
6 个都修 = 降本 70%+。修 1 个黑洞 5(开 cache)= 降本 30%——性价比最高。
写在最后
我团队里有个规矩:“每个新 prompt 必须过 token audit”——上线前用 T1 的脚本 跑一遍,看 input token 是不是合理的。
不合理的不让上线。3 个月下来,省了 $12K。
这比雇一个 prompt 工程师便宜。
5 条偏方 + 5 个类型 + 5 个人物 + 5 个实战 = 20 篇,写完了。
怪招本 v1 整版改版完。