7.7 成本控制
AI 应用的成本可以从月均 $500 优化到 $50——关键在于模型选型、缓存策略、Token 优化和监控预警。
学习时长:1 周
成本构成
AI 应用成本 = 模型 API 费用 + 向量数据库 + 服务器 + 人力
其中模型 API 通常占 60-80%:
输入 Token(Prompt + 上下文)+ 输出 Token(模型生成)1. 模型选型降本
| 任务类型 | 推荐模型 | 成本(每 100 万 Token) |
|---|---|---|
| 简单分类/提取 | GPT-4o-mini / DeepSeek-V3 | $0.15-0.27 |
| 通用对话 | GPT-4o-mini / Qwen-Plus | $0.15-1.00 |
| 复杂推理 | GPT-4o / Claude Sonnet | $2.50-3.00 |
| 顶级推理 | o3 / Claude Opus | $10-15 |
python
# 按任务复杂度自动选模型
def select_model(task_type: str) -> str:
MODEL_MAP = {
"classification": "gpt-4o-mini", # $0.15/1M
"extraction": "gpt-4o-mini",
"chat": "gpt-4o-mini",
"summarization": "gpt-4o-mini",
"complex_reasoning": "gpt-4o", # $2.50/1M
"code_generation": "gpt-4o",
"research": "o3", # $10/1M
}
return MODEL_MAP.get(task_type, "gpt-4o-mini")2. Token 优化
Prompt 压缩
python
# 精简 System Prompt
# ❌ 冗长(500 token)
system_prompt_bad = """
你是一个非常专业的、经验丰富的客户服务代表。
你需要始终保持专业、友好、耐心的态度。
你的回答应该简洁明了,但也要确保覆盖用户的所有问题。
如果你不确定答案,请诚实地告诉用户...
(还有 20 行...)
"""
# ✅ 精简(100 token)
system_prompt_good = """你是客服助手。要求:专业友好,简洁回答,不确定时说明。"""
# 效果相同,Token 减少 80%上下文窗口控制
python
def trim_context(messages: list, max_tokens: int = 4000) -> list:
"""保留最新对话,控制上下文 Token 用量"""
total = sum(count_tokens(m["content"]) for m in messages)
while total > max_tokens and len(messages) > 2:
removed = messages.pop(1) # 保留 system + 最新消息
total -= count_tokens(removed["content"])
return messages3. 缓存策略
python
import hashlib
import redis
r = redis.Redis()
async def cached_llm_call(prompt: str, model: str = "gpt-4o-mini") -> str:
"""精确缓存:相同 Prompt 直接返回缓存结果"""
cache_key = f"llm:{hashlib.md5(f'{model}:{prompt}'.encode()).hexdigest()}"
if cached := r.get(cache_key):
return cached.decode() # 缓存命中,0 成本
response = await client.chat.completions.create(
model=model, messages=[{"role": "user", "content": prompt}]
)
result = response.choices[0].message.content
r.setex(cache_key, 3600, result) # 缓存 1 小时
return resultAPI 侧前缀缓存
python
# 保持 System Prompt 不变 → 自动命中前缀缓存
# OpenAI:50% 折扣 | Anthropic:90% 折扣 | DeepSeek:90% 折扣
# ❌ 每次变化 → 不命中
messages = [{"role": "system", "content": f"时间{datetime.now()}。你是助手..."}]
# ✅ 固定前缀 → 自动命中
messages = [{"role": "system", "content": "你是助手,负责回答产品问题..."}]4. 监控与预警
python
from datetime import datetime
class CostTracker:
"""Token 成本追踪器"""
PRICING = { # 每百万 Token 价格(美元)
"gpt-4o": {"input": 2.5, "output": 10},
"gpt-4o-mini": {"input": 0.15, "output": 0.6},
"o3": {"input": 10, "output": 40},
}
def __init__(self, daily_budget: float = 10.0):
self.daily_budget = daily_budget
self.daily_cost = 0.0
def track(self, model: str, input_tokens: int, output_tokens: int):
pricing = self.PRICING.get(model, self.PRICING["gpt-4o-mini"])
cost = (input_tokens * pricing["input"] + output_tokens * pricing["output"]) / 1_000_000
self.daily_cost += cost
if self.daily_cost > self.daily_budget * 0.8:
send_alert(f"⚠️ 日成本已达 ${self.daily_cost:.2f},预算 ${self.daily_budget}")
if self.daily_cost > self.daily_budget:
raise BudgetExceededError(f"超出日预算: ${self.daily_cost:.2f}")成本优化清单
立即见效(节省 50-80%):
✅ 简单任务用 mini 模型
✅ 精简 System Prompt
✅ 启用精确缓存
✅ 固定 Prompt 前缀(命中 API 侧缓存)
中期优化(节省 30-50%):
✅ 批量 API(Batch API 50% 折扣)
✅ 上下文窗口裁剪
✅ 语义缓存(相似问题复用)
✅ 设置 Token 预算和告警
长期优化:
✅ 高频任务微调小模型替代大模型
✅ 本地部署开源模型(Qwen/DeepSeek)
✅ 混合路由:本地模型 + 云端 API学习资源