乐于分享
好东西不私藏

AI开发Token节省指南

AI开发Token节省指南

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% ⭐⭐⭐

核心原则:

  1. 先压缩输入,再优化模型:输入 Token 是大头
  2. 能缓存就缓存:重复系统 Prompt 是隐形税
  3. 能小不大:简单任务不要浪费 GPT-4o
  4. 监控驱动优化:看不到数据就改不动行为

八、附:一个真实降本案例

背景: 某 AI 客服产品,月消耗 2400 美元

诊断:

  • 每次用户问题 + 历史对话全量发送给 LLM → 约 8000 tokens/次
  • 没有用缓存,每次都重复带 2000 tokens 系统 Prompt
  • 所有问题统一用 GPT-4o

优化步骤:

  1. 系统 Prompt 接入 Prompt Caching → 节省 ~70%
  2. 对话历史改用滑动窗口(保留3轮)+ 关键信息提取 → 节省 ~60%
  3. 简单问题路由到 GPT-3.5 → 节省 ~80%
  4. 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