Skip to content

AI 应用的成本控制与优化

从一个月烧 $500 到 $50——手把手教你把 AI 应用的账单砍下来,同时不牺牲用户体验。


2. 模型选型:选对模型比调参重要 10 倍

上一章我们知道了:最贵和最便宜的模型价格差 900 倍。那问题来了——是不是所有场景都需要最强的模型?

答案是:绝对不是。大多数 AI 应用中,80% 的请求用最便宜的模型就能处理好。找到"哪些请求用贵模型、哪些用便宜模型"的分界线,就是成本优化最有效的第一刀。


2.1 "用最贵的模型"是最大的浪费

模型能力并非"越贵越好"

一个反直觉的事实:

  任务:从用户消息中提取关键信息
  输入:"我想预约明天下午 3 点的会议室 A"

  GPT-4o 的回答:
    {"date": "明天", "time": "15:00", "room": "A"}
    → 正确 ✅ | 耗时 800ms | 成本 $0.008

  GPT-4o-mini 的回答:
    {"date": "明天", "time": "15:00", "room": "A"}
    → 正确 ✅ | 耗时 300ms | 成本 $0.0005

  Deepseek-V3 的回答:
    {"date": "明天", "time": "15:00", "room": "A"}
    → 正确 ✅ | 耗时 500ms | 成本 $0.0008

  三个模型的结果完全一样!
  但成本差了 16 倍,速度差了 2.7 倍

  用 GPT-4o 做这种简单任务
  = 请一个博士后来做小学算术
  = 纯粹在烧钱

什么时候需要强模型

模型能力等级与适用场景:

  ┌─────────────────────────────────────────────┐
  │ 🔴 顶级模型(GPT-4o / Claude Sonnet)         │
  │                                             │
  │  • 复杂推理(多步骤逻辑链)                    │
  │  • 创意写作(长篇高质量文章)                   │
  │  • 代码生成(复杂算法、架构设计)               │
  │  • 多模态理解(图片分析 + 文字)                │
  │  • 模糊/开放性问题(需要深度理解)              │
  │                                             │
  │  占比:~20% 的请求                             │
  │  单次成本:$0.01-0.05                         │
  ├─────────────────────────────────────────────┤
  │ 🟡 中端模型(GPT-4o-mini / Deepseek-V3)      │
  │                                             │
  │  • 知识库问答(基于上下文回答)                 │
  │  • 内容总结(文档摘要)                        │
  │  • 翻译、改写                                 │
  │  • 中等复杂度的代码                            │
  │                                             │
  │  占比:~50% 的请求                             │
  │  单次成本:$0.0005-0.002                      │
  ├─────────────────────────────────────────────┤
  │ 🟢 轻量模型(Gemini Flash / 本地 Llama 8B)    │
  │                                             │
  │  • 信息提取(从文本中抽取结构化数据)            │
  │  • 分类(情感分析、意图识别)                   │
  │  • 简单问答(FAQ 类型)                        │
  │  • 格式转换(Markdown → JSON)                │
  │                                             │
  │  占比:~30% 的请求                             │
  │  单次成本:$0.0001-0.0005                     │
  └─────────────────────────────────────────────┘

2.2 任务分级:什么任务该用什么模型

任务分级矩阵

任务类型推荐模型原因月成本(10万次)
意图识别Gemini Flash / 本地模型简单分类,无需强模型$5-15
信息提取GPT-4o-mini结构化输出,mini 够用$9-30
FAQ 问答GPT-4o-mini + 缓存重复问题多,缓存后更省$5-15
RAG 知识库问答GPT-4o-mini答案在上下文中,理解力够$30-90
内容总结GPT-4o-mini / Deepseek摘要类任务中端模型足够$15-50
创意文案GPT-4o / Claude Sonnet需要创造力和表达力$140-500
复杂代码生成GPT-4o / Claude Sonnet需要深度推理$140-500
多轮对话GPT-4o-mini(大部分轮次)大部分轮次是简单对话$20-60

分级策略实战

实际项目中的任务分级流程:

  用户请求进来

       │ Step 1:意图识别(用最便宜的模型)

  ┌─────────────────────────────────┐
  │ 用轻量模型快速判断请求类型:       │
  │                                 │
  │  "帮我写一篇技术博客"            │
  │   → 意图:创意写作 → 路由到 GPT-4o│
  │                                 │
  │  "这段代码有什么 bug"             │
  │   → 意图:代码分析 → 路由到 GPT-4o│
  │                                 │
  │  "什么是 RESTful API"             │
  │   → 意图:知识问答 → 路由到 mini  │
  │                                 │
  │  "把这段话翻译成英文"              │
  │   → 意图:翻译 → 路由到 mini      │
  └─────────────────────────────────┘

       │ Step 2:路由到对应模型

  ┌─────────────────────────────────┐
  │  GPT-4o:     复杂任务 (~20%)     │
  │  GPT-4o-mini: 中等任务 (~50%)    │
  │  本地模型:    简单任务 (~30%)     │
  └─────────────────────────────────┘

  成本效果:
    全用 GPT-4o:$1400/月
    分级路由后:~$280/月(节省 80%)

关键洞察:在任何 AI 应用中,简单请求的占比远高于复杂请求。用"一刀切"的方式给所有请求用同一个模型,是最常见也是最浪费的做法。

2.3 开源模型 vs 商业 API:成本深度对比

"自己部署开源模型不就免费了?"——没有那么简单。我们来算一笔完整的账。

商业 API 的成本结构

商业 API(如 OpenAI):

  成本 = Token 用量 × 单价
  ─────────────────────────────────────
  优点:
    ✅ 零运维
    ✅ 按需付费,用多少付多少
    ✅ 自动扩容,不用操心流量洪峰
    ✅ 模型更新自动跟进

  缺点:
    ❌ Token 费随用量线性增长
    ❌ 数据需要发送给第三方
    ❌ 延迟受网络影响
    ❌ 可能被限流(Rate Limit)

自部署开源模型的成本结构

自部署(如 Llama 3 8B):

  成本 = GPU 服务器 + 运维人力 + 电费
  ─────────────────────────────────────
  典型配置(A10G GPU × 1):
    云服务器月租:$500-800(AWS/阿里云)
    或一次性购买 RTX 4090:~$1600

  优点:
    ✅ 大量请求时边际成本极低
    ✅ 数据不出网,隐私安全
    ✅ 零延迟(局域网内)
    ✅ 无限流限制

  缺点:
    ❌ 固定成本高(不管用不用都要付)
    ❌ 需要 GPU 运维能力
    ❌ 模型更新需要手动操作
    ❌ 扩容需要提前规划

盈亏平衡点分析

什么时候自部署比 API 便宜?

  假设:GPT-4o-mini,$0.0009/次
  假设:自部署 Llama 8B,$600/月固定成本

  盈亏平衡点 = $600 / $0.0009 ≈ 66 万次/月
  ─────────────────────────────────────
  < 66 万次/月 → API 更便宜
  > 66 万次/月 → 自部署更便宜

  但注意隐性成本:
  ─────────────────────────────────────
    GPU 运维工程师(兼职):$500-1000/月
    模型调试、更新时间:不可量化
    扩容备用资源:额外 30%

  加上隐性成本后:
    实际盈亏平衡点 ≈ 100-150 万次/月

  月请求量         推荐方案        原因
  ─────────────────────────────────────
  < 10 万          API             固定成本太高不划算
  10-100 万        API(或混合)    API仍有优势
  > 100 万         自部署(或混合)  边际成本优势明显
  > 1000 万        必须自部署       API费用过高

混合方案:最佳实践

请求类型处理方式原因
简单任务(30%)本地 Llama 8B固定成本分摊后极便宜
中等任务(50%)Deepseek API / GPT-4o-mini性价比最高
复杂任务(20%)GPT-4o / Claude Sonnet需要最强能力

实用建议:除非你的月请求量 > 100 万次,否则不要急着自部署。先用 API 跑通业务,等流量上来再考虑迁移。过早自部署 = 把运维成本花在了还没验证的业务上。

2.4 实战:多模型路由策略实现

理论讲完,来看代码——如何实现一个自动选择模型的路由器。

基于规则的路由器(简单有效)

python
from openai import OpenAI

client = OpenAI()

# 模型配置
MODELS = {
    "heavy":  {"name": "gpt-4o",      "max_tokens": 2000},
    "medium": {"name": "gpt-4o-mini", "max_tokens": 1000},
    "light":  {"name": "gpt-4o-mini", "max_tokens": 500},
}

# 任务关键词映射规则
ROUTING_RULES = {
    "heavy": [
        "写一篇", "撰写", "创作", "设计方案", "架构",
        "分析代码", "重构", "debug", "复杂"
    ],
    "light": [
        "翻译", "提取", "分类", "是什么", "转换格式",
        "总结一下", "几个字概括"
    ],
    # 不匹配任何规则的 → 默认 medium
}

def route_by_rules(question: str) -> str:
    """基于关键词规则的简单路由"""
    question_lower = question.lower()

    for tier, keywords in ROUTING_RULES.items():
        if any(kw in question_lower for kw in keywords):
            return tier

    return "medium"  # 默认中端模型


def chat_with_routing(question: str, system_prompt: str = "") -> dict:
    """带路由的智能对话"""
    tier = route_by_rules(question)
    model_config = MODELS[tier]

    response = client.chat.completions.create(
        model=model_config["name"],
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": question}
        ],
        max_tokens=model_config["max_tokens"]
    )

    return {
        "answer": response.choices[0].message.content,
        "model": model_config["name"],
        "tier": tier,
        "tokens": response.usage.total_tokens,
    }

# 测试
print(chat_with_routing("REST API 是什么?"))
# → tier: light, model: gpt-4o-mini

print(chat_with_routing("帮我写一篇 Python 异步编程的技术博客"))
# → tier: heavy, model: gpt-4o

基于 LLM 的智能路由器(更精准)

python
def route_by_llm(question: str) -> str:
    """用最便宜的模型做意图分类,决定路由"""

    response = client.chat.completions.create(
        model="gpt-4o-mini",  # 路由本身用最便宜的模型
        messages=[{
            "role": "user",
            "content": f"""请判断以下用户问题的复杂度等级。
只返回一个词:simple / medium / complex

判断标准:
- simple:简单知识问答、翻译、信息提取、格式转换
- medium:需要理解上下文的问答、内容总结、一般代码
- complex:需要深度推理、创意写作、复杂代码生成、架构设计

用户问题:{question}

复杂度:"""
        }],
        max_tokens=10,
        temperature=0
    )

    level = response.choices[0].message.content.strip().lower()

    mapping = {
        "simple": "light",
        "medium": "medium",
        "complex": "heavy"
    }
    return mapping.get(level, "medium")

带 Fallback 的路由器

python
def chat_with_fallback(question: str, system_prompt: str = "") -> dict:
    """先用便宜模型,质量不够再升级"""

    # 1. 先用中端模型尝试
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": question}
        ],
        max_tokens=1000
    )

    answer = response.choices[0].message.content

    # 2. 质量检测(用简单规则或 LLM 判断)
    if needs_upgrade(answer, question):
        # 升级到强模型重新生成
        response = client.chat.completions.create(
            model="gpt-4o",
            messages=[
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": question}
            ],
            max_tokens=2000
        )
        answer = response.choices[0].message.content
        return {"answer": answer, "model": "gpt-4o", "upgraded": True}

    return {"answer": answer, "model": "gpt-4o-mini", "upgraded": False}


def needs_upgrade(answer: str, question: str) -> bool:
    """判断回答质量是否需要升级模型"""
    # 简单规则:
    if "我不确定" in answer or "我无法" in answer:
        return True
    if len(answer) < 50 and len(question) > 100:
        return True  # 问题很长但回答很短,可能没理解
    return False

路由成本:LLM 路由器本身也消耗 Token,但只需 ~20 tokens 输入 + ~5 tokens 输出,成本约 $0.000004/次。10 万次路由判断只需 $0.4——相比省下的钱,这个成本可以忽略不计。


本章小结

知识点要点
模型浪费80% 的请求用便宜模型就够,一刀切是最大浪费
任务分级简单(30%)→ 轻量模型,中等(50%)→ mini,复杂(20%)→ 顶级
开源 vs API月请求量 < 100 万优先用 API,> 100 万考虑自部署
盈亏平衡含隐性成本后,自部署需 100-150 万次/月才划算
规则路由关键词匹配,简单高效,适合 80% 场景
LLM 路由用最便宜模型做分类路由,精度更高
Fallback先试便宜模型,不够再升级,平衡质量和成本

下一章预告:Prompt 工程——少花 Token 多办事。我们会详解 System Prompt 从 2000 Token 瘦身到 500 Token 的具体技巧,以及如何用输出格式约束来减少 50% 的输出 Token。

坚持是一种品格