Skip to content

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 messages

3. 缓存策略

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 result

API 侧前缀缓存

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

学习资源

坚持是一种品格