HelloAI
L4 第 12 篇 🐣 难度 🕒 12 分钟

LLM 成本优化:从 prompt 到部署的 10× 省钱方法

LLM 调用又贵又快——一不小心就把 AWS 账单炸了。这一篇讲实战中的成本管控技巧。

阿莱
2026/8/24

LLM 应用一上线—— 月底账单可能让你崩溃

之前的工程师只担心性能功能。 LLM 时代——成本 也是核心约束。

一个不优化的 LLM 产品 ≈ 一个 100×成本的传统产品。

这一篇讲实战中怎么把 LLM 成本砍到 1/10。

成本来自哪

LLM 成本结构:

单次请求成本 = (input tokens × input price) + (output tokens × output price)

总成本 = QPS × 平均成本 × 时间

主要变量:

  1. Token 数量(input + output)
  2. 模型选择(GPT-4 vs 小模型)
  3. 请求频率
  4. 失败 + 重试(隐形成本)

每个都可优化。

优化 1:Prompt 精简

最容易忽视 + 最有效的优化。

朴素 prompt(200 字)

你是一个高级软件工程师,专长 Python 和 web 开发。
请帮我审查下面的代码并给出建议。
你应该:
1. 检查 bug
2. 建议优化
3. 检查可读性
4. 遵循 PEP 8
5. 给出具体改进示例
... 等等

代码:
{code}

精简 prompt(30 字)

审查这段 Python 代码:找 bug、优化、可读性。
{code}

省 85% token + 效果几乎一样—— 现代 LLM 不需要长篇 prompt。

一些技巧

  • 去掉客套话:“Please, would you mind…”
  • 删除”重复”指令:说一次就够
  • 用清单代替自然语言:“Do A, B, C” 而不是 “First do A, then do B…”
  • 删除不必要的 examples:1-2 个例子够了,不要 10 个

优化 2:选小模型

最大的省钱杠杆—— 小模型比大模型便宜 10-100×

当下价格(2026)

模型Input ($/M)Output ($/M)
GPT-4o2.5010.00
GPT-4o-mini0.150.60
Claude 3.5 Sonnet3.0015.00
Claude 3.5 Haiku0.804.00
Gemini 2.0 Flash0.0750.30
DeepSeek V30.140.28

最便宜 vs 最贵:50-100×

选型决策树

任务是什么?
├── 简单 / 模板化 → Haiku / mini / Flash / DeepSeek
├── 复杂推理 / 代码 → Sonnet / GPT-4o
├── 顶级推理(数学、奥赛)→ o1 / o3
└── 创意 / 长写作 → Claude Sonnet

80% 任务用 mini 级模型够用—— 20% 才需要旗舰。

优化 3:分层路由(Cascade)

更聪明——同一应用混用模型

def smart_route(query):
    # 第一层:极便宜模型判断难度
    difficulty = mini_model.classify(query)

    # 根据难度选模型
    if difficulty == "easy":
        return haiku.answer(query)        # $0.001
    elif difficulty == "medium":
        return sonnet.answer(query)        # $0.01
    else:  # hard
        return o1.answer(query)            # $0.50

好处

  • 简单问题用便宜模型
  • 难问题才上贵的
  • 整体成本可能省 5-10×

微软 Phi-3 等小模型为这种路由提供了优秀”第一层”。

优化 4:缓存

很多请求重复或相似—— 缓存命中率 30-60% 常见

完全相同 query

import functools

@functools.lru_cache(maxsize=10000)
def llm_call(prompt):
    return openai_call(prompt)

FAQ 类应用 缓存命中率可达 70%—— 直接砍 70% 成本

语义相似 query

# 用 embedding 找相似
def semantic_cache(query):
    query_emb = embed(query)
    similar = vector_db.search(query_emb, top_k=1)
    if similar and similar[0].score > 0.95:
        # 找到几乎相同的——直接用缓存
        return similar[0].cached_response
    # 否则调 LLM
    response = llm_call(query)
    vector_db.insert(query, query_emb, response)
    return response

适合:常见问题、知识查询。 不适合:个性化对话、创意任务。

Prompt Caching(OpenAI / Anthropic 提供)

API 厂商支持—— prompt 重复部分自动缓存 + 折扣

  • OpenAI prompt cache:折扣 50%
  • Anthropic cache:折扣 90%
# Anthropic
client.messages.create(
    model="claude-3-5-sonnet",
    system=[
        {
            "type": "text",
            "text": LONG_SYSTEM_PROMPT,
            "cache_control": {"type": "ephemeral"}  # 启用缓存
        }
    ],
    ...
)

长 prompt + 多次调用——这个折扣巨省

优化 5:批处理(Batching)

OpenAI Batch API、Anthropic Message Batches—— 离线任务半价

# OpenAI Batch API
batch = client.batches.create(
    input_file_id=file.id,
    endpoint="/v1/chat/completions",
    completion_window="24h"
)
# 24 小时内完成,半价

适合

  • 文档批量处理
  • 数据合成
  • 离线评估
  • 不需要实时的任务

不适合:用户实时对话。

优化 6:输出控制

输出 token 通常 比输入贵 4×—— 控制输出长度有大效益。

明确指定长度

"用 50 字总结" → 100 token output
"详细解释" → 500 token output  ← 多花 5×

约束输出:
"用 max 100 字总结,分 3 个要点"

结构化输出

# JSON mode—只输出需要的字段
response = client.chat.completions.create(
    model="gpt-4o-mini",
    response_format={"type": "json_object"},
    messages=[{"role": "user", "content": "Extract: name, age, email from: ..."}]
)
# 不输出多余的"explanation"

Token 上限

response = client.chat.completions.create(
    ...,
    max_tokens=200,  # 强制截断
)

别浪费 token—— 但也别截断关键内容

优化 7:减少多轮对话

每次多轮—— 之前所有对话都要重发(input token):

回合 1: 100 token in + 200 token out = $0.001
回合 2: (100 + 200 + 100) input + 200 out = $0.002
回合 3: (400 + 200 + 100) input + 200 out = $0.005
回合 10: ~ $0.05

10 回合一次对话—— 成本可能是单回合的 50×

应对

  • 长对话总结历史(用便宜模型)
  • 不重要细节”丢”
  • 关键事实存外部记忆(向量库)

优化 8:尝试本地 / 私有部署

某规模后—— 自建推理 vs API 调用 算账:

API:每 M token $1-15
自建:每 M token $0.1-1(前提是高利用率)

自建优势

  • 大规模成本砍 10×
  • 数据隐私
  • 无 API 限流

自建劣势

  • 工程成本(运维 / 监控 / 升级)
  • 初期投入大
  • 模型质量略低于商用旗舰

经验法则

  • 月 LLM 账单 < $10K:用 API
  • $10K-100K:考虑自建
  • $100K:必须自建大部分

优化 9:实时监控

没监控 = 黑盒 —— 你不知道在哪烧钱。

必备指标

# 每次 LLM 调用都记
log_to_db({
    "timestamp": now(),
    "user_id": user_id,
    "endpoint": "/chat",
    "model": "gpt-4o",
    "input_tokens": response.usage.prompt_tokens,
    "output_tokens": response.usage.completion_tokens,
    "cost": calculate_cost(...),
    "latency_ms": elapsed,
    "cache_hit": cache_hit,
})

告警

当 daily cost > $100 → 告警
当 cache hit rate < 30% → 告警(可能用法不对)
当 95p latency > 5s → 告警(用户体验差)

工具推荐

  • LangSmith (LangChain)—— LLM 应用监控
  • Helicone —— 实时成本 + 性能
  • Datadog LLM Observability —— 企业级
  • OpenAI Dashboard —— 自家 token 用量

优化 10:API 选型策略

不同任务用不同 API:

任务最优选择
实时聊天GPT-4o-mini / Haiku
长文档摘要Claude(长上下文)
代码生成Claude Sonnet / DeepSeek
数据合成GPT-4o(批量 API)
翻译DeepL API(专 specialized)
嵌入OpenAI text-embedding-3 / BGE

永远不要”一个模型吃所有任务”—— 专 specialized = 性价比更高

一个真实优化案例

某团队的客服 AI—— 月成本从 50K砍到50K 砍到 5K:

优化效果
Prompt 精简 (200→50 字)-30%
Cache 命中率提升 (10%→55%)-40% (after)
Cascade 路由 (80% 用 mini)-50% (after)
Prompt caching 启用-25% (after)
异步批处理常规分析-10% (after)

累积 = 月省 90%—— 用户体验几乎无变化

优化是个”复利”游戏——每个 -10% 累积起来巨大。

误区警告

不要过早优化

如果 LLM 月账单 < $1K——别花时间优化

  • 时间成本 > 节省金额
  • 优化早期可能引入 bug

等到月账单 $5K+ 再认真优化。

不要为省钱牺牲质量

最贵的 LLM 仍比一个差产品便宜—— 如果便宜模型回答烂——用户走 = 损失更大。

优化的目标是 “质量不变的前提下省”—— 不是 “为了省牺牲质量”。

不要忽视隐藏成本

API 价格只是一部分:

  • 失败重试 多花的
  • 过度调用 没用上的
  • 运维成本 监控 / 调试
  • 延迟成本 用户跑了

真实成本 > API 账单

💡 一个观察

LLM 工程师 必备技能 已经包括成本管控:

  • 知道每个 API 的价格
  • 算每个功能的”单位成本”
  • 设计高效缓存 / 路由
  • 监控异常成本

不懂成本的 LLM 工程师—— 可能让公司每月烧几十万美元。

这一篇的技巧——任何严肃 LLM 项目都要用

下一篇推荐:L4-13 Agent 在生产L4-14 LLM 应用法律责任

📬

读到这里说明你认真在学 🎯

订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。

💬

讨论区

· 用 GitHub 账号登录评论
⚠️ Giscus 评论未配置 —— 在 src/components/Comments.astro 顶部填入 仓库 ID 和分类 ID(见组件注释里的配置步骤)。