LLM 成本优化:从 prompt 到部署的 10× 省钱方法
LLM 调用又贵又快——一不小心就把 AWS 账单炸了。这一篇讲实战中的成本管控技巧。
LLM 应用一上线—— 月底账单可能让你崩溃。
之前的工程师只担心性能 和功能。 LLM 时代——成本 也是核心约束。
一个不优化的 LLM 产品 ≈ 一个 100×成本的传统产品。
这一篇讲实战中怎么把 LLM 成本砍到 1/10。
成本来自哪
LLM 成本结构:
单次请求成本 = (input tokens × input price) + (output tokens × output price)
总成本 = QPS × 平均成本 × 时间
主要变量:
- Token 数量(input + output)
- 模型选择(GPT-4 vs 小模型)
- 请求频率
- 失败 + 重试(隐形成本)
每个都可优化。
优化 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-4o | 2.50 | 10.00 |
| GPT-4o-mini | 0.15 | 0.60 |
| Claude 3.5 Sonnet | 3.00 | 15.00 |
| Claude 3.5 Haiku | 0.80 | 4.00 |
| Gemini 2.0 Flash | 0.075 | 0.30 |
| DeepSeek V3 | 0.14 | 0.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—— 月成本从 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 账号登录评论src/components/Comments.astro 顶部填入
仓库 ID 和分类 ID(见组件注释里的配置步骤)。