API成本:被低估的运营支出
很多团队在开发阶段忽略了API成本,上线后才发现每月LLM调用费用远超预期。一个处理10万请求/天的应用,如果每个请求平均消耗2000 tokens,用GPT-4月成本超过10万美元。成本优化不是可选项,是生存必需。
成本结构分析
Token计费模型
成本 = 输入tokens × 输入单价 + 输出tokens × 输出单价
以GPT-4o为例(2026年价格):
输入: $2.5/1M tokens
输出: $10/1M tokens
单次对话(输入500, 输出300):
= 500×2.5/1M + 300×10/1M
= $0.00125 + $0.003
= $0.00425/次
成本分解
典型Agent应用的token消耗分布:
- 系统Prompt: 15-25%(固定开销)
- 上下文/历史: 30-50%(随对话长度增长)
- 用户输入: 5-10%
- 模型输出: 10-20%
- 工具结果: 10-20%
最大成本项是"上下文/历史"——长对话的累积上下文。
优化策略一:模型路由
分层路由
根据任务复杂度选择不同模型:
def route_model(query, budget_tracker):
complexity = classify_complexity(query)
if complexity == "simple":
# 简单问答、格式转换 → 小模型
return "qwen-2-7b" # $0.0005/次
elif complexity == "medium":
# 中等推理、分析 → 中等模型
return "deepseek-v4" # $0.002/次
elif complexity == "complex":
# 复杂推理、创意 → 大模型
return "gpt-4o" # $0.004/次
elif complexity == "expert":
# 极高难度 → 最强模型
return "o3" # $0.02/次
复杂度分类器
用小模型或规则做路由决策:
def classify_complexity(query):
# 规则1: 长度
if len(query) < 20:
return "simple"
# 规则2: 关键词
if any(kw in query for kw in ["分析", "对比", "推理", "证明"]):
return "medium"
if any(kw in query for kw in ["架构设计", "策略制定", "深度分析"]):
return "complex"
# 规则3: 用小模型分类
return small_model.classify(query)
路由效果
假设80%的请求是简单任务:
- 全用GPT-4o: $0.004 × 100% = $0.004/次
- 分层路由: $0.0005×80% + $0.002×15% + $0.004×4% + $0.02×1% = $0.0011/次
- 成本降低73%
级联路由
先尝试小模型,失败再用大模型:
def cascade(query):
# 先用小模型尝试
result = small_model.generate(query)
# 评估结果质量
if confidence(result) > threshold:
return result # 小模型够用
# 不够好,用大模型
return large_model.generate(query)
优化策略二:Prompt压缩
系统Prompt精简
原始系统Prompt (2000 tokens):
"你是一个专业的客服助手。你的职责是帮助用户解决订单相关问题。
你需要遵循以下规则:
1. 始终保持礼貌和耐心
2. 如果用户的问题超出你的能力范围,转接人工
3. 不要透露内部系统信息
..."
精简后 (500 tokens):
"你是客服助手。规则:礼貌、保密、转人工处理超范围问题。"
上下文压缩
- 对话摘要:用小模型定期摘要历史对话
- 信息提取:只保留结构化关键信息,丢弃原始对话
- 语义去重:删除重复的上下文内容
Few-Shot精简
3-shot到1-shot可能只损失5%效果但省50% token。
优化策略三:缓存
精确匹配缓存
cache = Redis()
def cached_generate(prompt, model="gpt-4o"):
cache_key = f"{model}:{hash(prompt)}"
if cached := cache.get(cache_key):
return cached
result = llm.generate(prompt, model)
cache.set(cache_key, result, ttl=3600)
return result
语义缓存
相似问题命中缓存:
def semantic_cache_generate(query):
# 向量化query
query_embedding = embed(query)
# 搜索相似query
similar = vector_db.search(query_embedding, threshold=0.95)
if similar:
return similar.answer
# 未命中,调用LLM
answer = llm.generate(query)
# 存入缓存
vector_db.add(query_embedding, answer)
return answer
缓存效果
- 精确匹配:命中率10-15%(重复请求)
- 语义缓存:命中率25-40%(相似请求)
- 综合缓存可节省30-50%的API调用
优化策略四:批处理
请求合并
多个独立请求合并为一次调用:
# 不好的做法:5次API调用
for question in questions:
answer = llm.generate(question) # 5次调用
# 好的做法:1次API调用
combined = f"回答以下问题,每个问题用编号标注:\n"
for i, q in enumerate(questions):
combined += f"{i}. {q}\n"
answers = llm.generate(combined) # 1次调用
批量推理
自部署模型时使用vLLM的continuous batching:
- 多个请求共享一次forward计算
- 吞吐量提升5-10倍
- 每请求成本大幅下降
优化策略五:混合部署
自部署+API混合
路由策略:
- 高频简单任务 → 自部署小模型 (固定成本)
- 低频复杂任务 → API调用大模型 (按需付费)
成本模型:
自部署: 固定成本$2000/月 (GPU租用)
API: 变动成本 ~$0.002/次
当月请求量 > 100万次时:
全API: $2000+
混合: $2000 (自部署) + $200 (复杂任务API) = $2200
优势不明显
当月请求量 > 500万次时:
全API: $10000+
混合: $2000 + $1000 = $3000
节省70%
成本监控
class CostMonitor:
def __init__(self, budget_monthly):
self.budget = budget_monthly
self.spent = 0
def record(self, cost):
self.spent += cost
if self.spent > self.budget * 0.8:
alert("已达月预算80%")
if self.spent > self.budget * 0.95:
alert("接近月预算,切换到降级模式")
def get_stats(self):
return {
"spent": self.spent,
"budget": self.budget,
"remaining": self.budget - self.spent,
"daily_avg": self.spent / day_of_month
}
成本对比
不同方案成本对比(10万请求/天)
| 方案 | 月成本 | 质量 |
|---|---|---|
| 全用GPT-4o | $12,750 | 最高 |
| 全用DeepSeek-V4 | $1,500 | 高 |
| 模型路由 | $3,200 | 高 |
| 路由+缓存 | $2,100 | 高 |
| 自部署7B | $1,000 (GPU) | 中 |
| 混合部署 | $2,200 | 高 |
总结
大模型API成本优化是一个系统工程——不是单纯选便宜模型,而是在质量、速度、成本三者间找最优平衡。核心策略:模型路由让"好钢用在刀刃上",缓存避免重复计算,Prompt压缩减少浪费,混合部署兼顾灵活性和经济性。对于规模化应用,成本优化通常能降低60-80%的LLM调用费用——这可能是技术开发者最容易创造价值的工作之一。