Notes · 2026-06-22
降低 AI API 成本的 10 个实用技巧
为什么需要关注 API 成本?
AI API 的费用增长速度往往超出预期。计费本质是:
总费用 = 输入 Token 数 × 输入单价 + 输出 Token 数 × 输出单价
(Token 是什么、怎么估算,见同系列 什么是 Token?。)
一个日活 1,000 人的聊天应用,如果每次对话平均消耗 2,000 Token、每人每天 5 轮,按 GPT-4o 量级粗算,月开销可能到 数百~上千美元。以下 10 个技巧从模型选型、Prompt、架构、运维四个方向压成本;节省比例因业务而异,表格里的数字是常见区间,不是承诺。
先认识几个词
| 术语 | 白话 |
|---|---|
| 输入 Token | 你发过去的内容(系统提示、历史、RAG 文档等) |
| 输出 Token | 模型生成的回答 |
| System Prompt | 每次请求都会带上的系统指令 |
| RAG | 先检索相关资料,再让模型回答 |
| 上下文缓存 | 对重复的长输入打折计费 |
| 模型路由 | 简单问题用小模型,复杂问题用大模型 |
技巧一:为任务匹配合适的模型
不是每个任务都需要最贵的模型。 根据任务复杂度选择对应层级:
| 任务类型 | 推荐模型(示例) | 输出单价量级 / 1M Token |
|---|---|---|
| 简单分类、提取、格式转换 | GPT-4o Mini、Claude Haiku、DeepSeek 等小模型 | 约 $0.6~$2 |
| 常规对话、摘要、代码补全 | Claude Sonnet、GPT-4o | 约 $10~$15 |
| 复杂推理、长文创作、高难度 Agent | Claude Opus、GPT 旗舰档 | 约 $60~$75+ |
潜在节省:70%~94%(相对「全部用最贵模型」)
怎么判断该用哪档?
| 信号 | 倾向小模型 | 倾向大模型 |
|---|---|---|
| 任务是否有标准答案 | 分类、抽取、翻译模板 | 开放创作、多步推理 |
| 错误代价 | 低(可人工复核) | 高(法律、医疗等) |
| 是否需要长链工具调用 | 单步即可 | 多步 Agent |
实践上可以用 100~200 条真实样本 先在小模型上跑,看准确率是否达标;达标就不必上旗舰。
技巧二:精简系统提示词(System Prompt)
系统提示词在每次请求中都会重复发送。它写得越长,每一通电话都在为多出来的 Token 买单。
将 500 Token 的系统提示精简到 200 Token,若日均 10,000 次调用、输入单价 $2.50/1M:
节省 ≈ 300 × 10,000 × 30 / 1,000,000 × $2.50 ≈ $225/月
精简技巧
- 用关键词列表代替完整句子描述角色
- 示例从 5 个减到 2~3 个最有代表性的
- 去掉模型已默认遵守的常识(「请用中文」「不要违法」等除非业务真需要)
- 把很少变的长文档挪到 RAG 或缓存,不要塞进 System Prompt
精简前后对比(示意)
❌ 冗长(~120 tokens):
你是一个非常专业、经验丰富、耐心的客服助手。在用户提问时,
你需要首先理解用户情绪,然后礼貌地回答……(后面还有三段)
✅ 精简(~40 tokens):
角色:客服助手。
规则:仅根据【知识库】回答;无依据则说「不清楚」并建议转人工。
格式:先结论,后步骤,≤150 字。
改完务必用固定测试集对比质量,别为省 Token 把关键约束删没。
技巧三:限制输出 Token 数
输出单价通常比输入更贵,且模型容易「话多」。要从参数和提示词两侧同时约束。
response = client.chat.completions.create(
model="gpt-4o",
max_tokens=200, # 硬性上限:到数就停
messages=[{
"role": "user",
"content": "用 3 句话总结以下文章……" # 软性要求
}]
)
| 方式 | 作用 |
|---|---|
max_tokens / max_completion_tokens | API 级硬封顶,防失控 |
| 提示词里写「≤100 字」「只输出 JSON」 | 引导风格,更省但非硬保证 |
| 结构化输出(JSON schema) | 减少废话和重复解释 |
潜在节省:30%~60%(尤其对摘要、分类、提取类任务)
技巧四:利用上下文缓存(Prompt Caching)
OpenAI、Anthropic、Google 等均提供对重复长输入的缓存计费:同一段前缀(常见是 System Prompt、长文档、少样本示例)在缓存命中时,按折扣价计费。
| 服务商 | 缓存折扣(示意,以官网为准) |
|---|---|
| OpenAI(GPT-4o 等) | 缓存输入约 50% off |
| Google(Gemini) | 最高约 75% off |
| Anthropic(Claude) | 缓存输入约 90% off |
适合缓存什么?
- 固定的 System Prompt(几百~几千 Token)
- 不变的少样本示例(few-shot)
- 同一产品文档前缀被大量用户共享
不适合什么?
- 每条请求用户问题都不同、前缀几乎无重复
- 需要实时更新的动态上下文
实施难度:⭐⭐——要按各平台文档配置 cache breakpoint,并保证前缀字节级一致。
技巧五:批量处理(Batch API)
对不要求秒级响应的任务(批量翻译、离线标注、日报生成),使用各家的 Batch API,通常有 ~50% 折扣,且不占实时配额。
| 适合 Batch | 不适合 Batch |
|---|---|
| 夜间跑数据清洗 | 在线聊天 |
| 大批量 eval | 交互式 Copilot |
| 文档批处理 | 强实时客服 |
提交前把任务设计成「可重试、可幂等」,Batch 完成时间可能是数小时级。
技巧六:实现本地缓存层(语义缓存)
聊天、FAQ 场景里,用户常问相似问题。在调用模型前加一层 Redis / 内存缓存:
用户问题 → 归一化 / 向量相似度 → 命中则直接返回 → 未命中再调 API
| 策略 | 说明 |
|---|---|
| 精确匹配 | 同一问题字符串完全一致才命中,实现简单 |
| 语义缓存 | .embedding 相似度 > 阈值即命中,命中率更高,要防「近似但意图不同」 |
命中率 30% → 约节省 30% 的 API 调用费
注意:缓存要有 TTL 和 版本号——产品或 Prompt 升级后应失效旧答案。
技巧七:用 RAG 代替整库塞进 Prompt
把整本手册、全部 FAQ 一次性塞进 Prompt,输入 Token 爆炸,还更容易超窗口。
检索增强生成(RAG) 的标准做法:
- 文档切片(chunk)写入向量库
- 用户提问时检索最相关的 3~5 段
- 只把这几段放进 Prompt
Prompt 长度常可减少 60%~70%,且答案更贴资料——省 Token 和质量可以兼得。
控费相关参数:
| 参数 | 过大 | 过小 |
|---|---|---|
| chunk 大小 | 每段占 Token 多 | 上下文不完整 |
| top_k | 检索片段多、输入长 | 漏关键信息 |
建议对 RAG 链路开 trace(如 LangSmith),看「检索到了什么、最终 prompt 多长」。
技巧八:监控和分析使用模式
没有用量数据,优化是盲目的。至少每周看:
- 按功能 / 接口 谁消耗的 Token 最多?
- 输入 vs 输出 比例是否异常(输出占比过高 → 检查是否话多或未限长)
- 是否有 bug 循环调用(重试风暴、Agent 死循环)
- P95 延迟 与 Token 是否同向飙高
工具:OpenAI Usage Dashboard、LangSmith、自建日志(记录 model, input_tokens, output_tokens, user_id, route)。
一次真实案例:某接口把完整对话历史无截断回传,30 天后输入 Token 线性涨到初期的 20 倍——加「只保留最近 10 轮」立刻降 40%+。
技巧九:评估官方价 vs 聚合渠道
除官方 API 外,一些聚合/中转服务通过批量采购提供更低单价。若考虑这类渠道:
- 查是否与官方同源模型、SLA 和隐私条款
- 对比输入/输出是否分开计价、是否有隐藏最低消费
- 生产环境先小流量 A/B 测延迟与错误率
可用 APIS 价格对比工具 等站点做横向参考(第三方工具,自行甄别)。
潜在节省:因渠道而异,不宜默认比官方可靠;合规场景(金融、医疗、政企)优先官方或私有化。
技巧十:混合模型路由
在应用里加一层 Router,按任务复杂度分发:
用户输入 → 规则 / 小分类模型 → 简单 → Mini(便宜)
→ 复杂 → 旗舰(质量)
→ 不确定 → 先 Mini,置信度低再升级
| 路由信号(示例) | 路由结果 |
|---|---|
| 消息长度 < 50 且意图=查订单 | 小模型 |
| 含「写方案」「架构设计」 | 大模型 |
| 小模型回答「不确定」 | fallback 到大模型 |
业界经验:约 70%~80% 的请求可由小模型处理,整体成本降 50%~70% 并不少见。
路由本身也有成本(一次额外分类调用或规则维护),要用总账单验证,不是越复杂越省。
常见误解
| 误解 | 实际情况 |
|---|---|
| 用最贵模型才专业 | 大量任务是抽取、分类、短答,小模型足够 |
| 流式输出更便宜 | 流式只影响体验,总 Token 不变 |
| RAG 一定比长 Prompt 贵 | 检索几段往往比塞整库省输入 Token |
| 缓存万能 | 只对重复前缀有效;用户问题各异时帮助有限 |
| 省 Token 可以牺牲所有示例 | few-shot 示例删光可能准确率骤降,要测 |
小结
| 技巧 | 预估节省 | 实施难度 |
|---|---|---|
| 匹配合适模型 | 70%~94% | ⭐ |
| 精简 System Prompt | 10%~30% | ⭐ |
| 限制输出长度 | 30%~60% | ⭐ |
| 上下文缓存 | 50%~90%(命中部分) | ⭐⭐ |
| 批量处理 | ~50% | ⭐⭐ |
| 本地语义缓存 | 20%~40% | ⭐⭐ |
| RAG 替代长上下文 | 60%~70% | ⭐⭐⭐ |
| 监控与分析 | 10%~20% | ⭐⭐ |
| 聚合渠道 | 因渠道而异 | ⭐ |
| 混合模型路由 | 50%~70% | ⭐⭐⭐ |
控费没有银弹,通常是组合拳:先上监控找大户,再模型分级 + 限输出 + 精简 Prompt;有固定长前缀再加缓存;知识型应用优先 RAG。
建议落地顺序:
- 接用量统计,知道钱烧在哪
- 非核心路径换小模型 +
max_tokens - 精简 System Prompt 并做回归测试
- 有重复前缀再开 Prompt Caching
- 文档类场景上 RAG,别整库硬塞