AI 开发 Token 节省指南:9 种方法 + 详细步骤
Token 是 LLM 调用费用的核心计量单位。无论是 ChatGPT 按 token 计费,还是 Claude API 的按Token扣费,每多消耗 1M token 就意味着多付一笔钱。
一个真实案例:某团队每月 RAG 费用高达 2400 美元,通过优化降至 650 美元——节省了 73%。
本文整理了 9 种经过验证的 Token 节省方案,涵盖从 Prompt 设计到系统架构的各个层级,全部附带可落地的操作步骤。
一、Prompt 压缩:把长输入变短
原理: 输入 Token 占总消耗的大头,压缩 Prompt 等于直接省钱。
方法 1:LLM 自压缩(Self-Compress)
不要让 AI 直接处理长文本,先让它自己摘要:
步骤:
1. 原始输入(3000字)→ 发送压缩 Prompt:
"请将以下文本压缩为200字摘要,保留所有关键信息:
[原文]"
2. 用摘要替换原文发送给主模型
3. 节省约 85-90% Token
方法 2:Few-Shot 示例最小化
每个示例都是 Token 成本。优化策略:
❌ 差:每个任务附带 5 个完整示例(每个 500 字 = 2500 tokens)
✅ 好:
- 只保留 2 个最典型的示例
- 用一句话描述而非完整示例:"参考格式:问题→答案"
- 或使用"负面示例"(只告诉AI什么不该做)
方法 3:结构化输出约束
减少 Token 浪费在格式解析上:
❌ 差:Prompt 说"请详细解释XXX,条理清晰"
✅ 好:Prompt 结尾加约束
"回答格式:{"核心观点":"一句话","理由":["理由1","理由2"]}"
模型输出更紧凑,解析更高效
二、Prompt Caching:重复内容只付一次钱
原理: OpenAI、Claude 等都推出了缓存机制,重复的系统 Prompt 和上下文只需首次付费。
方法 4:OpenAI Prompt Caching(2024-2025 新功能)
适用场景:系统 Prompt 固定、参考文档重复的场景。
步骤:
1. 调用时使用 cache_control 参数(以 OpenAI SDK 为例):
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-4o",
input=[
{"role": "system", "content": system_prompt, "cache_control": {"type": "ephemeral"}},
{"role": "user", "content": user_query}
]
)
2. 首次调用:完整计费
3. 后续调用相同 system_prompt:享受 50-90% 折扣(视 provider 而定)
3. 最佳实践:system_prompt 超过 1000 tokens 时效果最明显
方法 5:Anthropic Claude 上下文缓存
Claude 支持类似的缓存策略:
步骤:
1. 将固定不变的系统 Prompt 和参考文档放在对话开头
2. 使用 messages API 时,设置 max_tokens 上限防止过量输出
3. 利用 Claude 的 200K 超长上下文,按段加载长文档而非全量输入
三、RAG 优化:砍掉 73% RAG 成本的实战方案
原理: RAG(检索增强生成)是最贵的场景之一,每次问答都要搜文档 + 送上下文。
方法 6:语义分块 + 层级检索
步骤:
1. 文档预处理阶段:
- 不要按固定字数分块(如每1000字一切)
- 按语义边界分块(段落、章节、主题)
- 用 embedding 模型给每个块打向量
2. 查询优化阶段:
- 用户问题 → 先检索相关块(向量相似度)
- 只把 top-K 相关块发给 LLM(K=3~5,不要全量)
- 每个块控制在 500 tokens 以内
3. 成本对比(以 1000 份文档为例):
❌ 优化前:每次查询送全文档 → ~10000 tokens/次
✅ 优化后:top-3 语义块 → ~1500 tokens/次(节省 85%)
方法 7:Query 改写 + 路由
步骤:
1. 用户原始问题 → 先用一个廉价模型做意图识别
"这个问题需要查文档吗?还是可以直接回答?"
2. 可以直接回答的问题 → 直接调用 LLM,不走 RAG
3. 需要查文档的问题 → 改写 Query 再检索
原始:"苹果公司去年营收多少?"
改写:"Apple Inc 2024 annual revenue"
→ 检索命中率更高,上下文更短
四、模型分层:能用小模型就不用大模型
原理: GPT-4o 比 GPT-3.5 贵 20-60 倍,但并非所有任务都需要 GPT-4o。
方法 8:LLM 路由(Task Routing)
步骤:
1. 定义任务分类器(用简单规则或小模型):
- 简单问答 / 翻译 / 摘要 → 用 GPT-3.5 / Claude Haiku
- 复杂推理 / 代码生成 / 长文分析 → 用 GPT-4o / Claude Sonnet
2. 成本对比示例:
任务:翻译一段 500 字英文
❌ GPT-4o:约 $0.015
✅ GPT-3.5:约 $0.0005(便宜 30 倍)
3. 路由实现(简单规则版):
if task in ["translate", "summarize", "rewrite"]:
model = "gpt-3.5-turbo"
elif task in ["analyze", "reasoning", "code"]:
model = "gpt-4o"
else:
model = "gpt-3.5-turbo" # 默认用便宜的
方法 9:Output Token 严格上限
步骤:
1. 调用 API 时设置 max_tokens:
❌ 不设置:模型可能输出 2000 tokens,浪费
✅ 设置合理上限:预期 200 字 → max_tokens=500
2. 利用 JSON mode / structured output:
{
"max_tokens": 300, # 严格控制输出长度
"response_format": "json_object" # 结构化输出,避免废话
}
五、上下文窗口管理:不让"记忆"吃光你的预算
原理: 对话历史越长,累计 Token 越多。在多轮对话中及时"遗忘"很重要。
方法 10:对话历史压缩(Conversation Summarization)
步骤:
1. 每 N 轮对话后,调用一次摘要:
system_prompt = "将以下对话摘要为3句话,保留所有关键信息和结论"
2. 用摘要替换历史记录:
原始:10轮对话 × 1000 tokens = 10000 tokens
摘要后:1段摘要 × 200 tokens = 200 tokens(节省 98%)
3. 实现时机:
- 每 5-10 轮对话做一次摘要
- 或 Token 累计超过上下文 50% 时触发
方法 11:滑动窗口 + 关键信息保留
步骤:
1. 不要保留完整对话历史
2. 用滑动窗口:只保留最近 3-5 轮
3. 但将关键信息显式保存到变量:
context = {
"user_preferences": "喜欢简洁回答",
"current_project": "iOS App 开发",
"ongoing_tasks": ["登录功能", "首页UI"]
}
4. 每轮对话时,把 context 注入 Prompt 开头
六、成本监控:看不到钱的去处,就管不住花钱
实战工具:
| 工具 | 用途 |
|---|---|
| LangSmith | 全链路追踪,每次调用的 Token 消耗、延迟、费用 |
| OpenAI Usage Dashboard | 查看每日/每月 Token 消耗分布 |
| Helicone | 开源方案,可视化 API 调用和成本 |
| Braintrust | 评测 + 成本分析 |
步骤(LangSmith 示例):
1. 注册 LangSmith 并获取 API Key
2. 在 OpenAI SDK 中添加:
import langsmith
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o")
runnable = llm.with_config({"tags": ["production"]})
3. LangSmith Dashboard 自动显示:
- 每次调用的 input/output tokens
- 推算费用(按 provider 定价计算)
- 慢查询告警(间接节省:避免重复调用)
七、总结:Token 节省优先级矩阵
| 方法 | 节省幅度 | 实施难度 | 优先级 |
|---|---|---|---|
| Prompt 压缩(自压缩) | 50-90% | 低 | ⭐⭐⭐⭐⭐ |
| Output Token 上限 | 30-60% | 低 | ⭐⭐⭐⭐⭐ |
| Prompt Caching | 50-90% | 中 | ⭐⭐⭐⭐ |
| 模型路由 | 50-80% | 中 | ⭐⭐⭐⭐ |
| RAG 分块优化 | 60-85% | 中 | ⭐⭐⭐⭐ |
| 对话历史压缩 | 40-70% | 中 | ⭐⭐⭐ |
| Few-Shot 最小化 | 20-40% | 低 | ⭐⭐⭐ |
核心原则:
- 先压缩输入,再优化模型:输入 Token 是大头
- 能缓存就缓存:重复系统 Prompt 是隐形税
- 能小不大:简单任务不要浪费 GPT-4o
- 监控驱动优化:看不到数据就改不动行为
八、附:一个真实降本案例
背景: 某 AI 客服产品,月消耗 2400 美元
诊断:
- 每次用户问题 + 历史对话全量发送给 LLM → 约 8000 tokens/次
- 没有用缓存,每次都重复带 2000 tokens 系统 Prompt
- 所有问题统一用 GPT-4o
优化步骤:
- 系统 Prompt 接入 Prompt Caching → 节省 ~70%
- 对话历史改用滑动窗口(保留3轮)+ 关键信息提取 → 节省 ~60%
- 简单问题路由到 GPT-3.5 → 节省 ~80%
- RAG 查询改用 top-5 语义块 → 节省 ~50%
结果: 月费用从 2400 美元降至 650 美元,节省 73%,同时响应速度提升。
参考资料:
- OpenAI Prompt Caching 文档:platform.openai.com/docs/guides/prompt-caching
- Anthropic Claude 上下文管理:docs.anthropic.com
- LangSmith 成本追踪:docs.smith.langchain.com
夜雨聆风