成本优化
成本优化全攻略
·约 8 分钟阅读
Claude API 按 token 计费。在生产环境中,成本优化直接影响业务可行性。本文是全方位的成本优化指南:从模型选择到 Prompt 工程,从缓存到批量处理,帮你把每一分钱花在刀刃上。
你将学到什么
- Claude 各模型的定价和适用场景
- 6 种成本优化技巧
- 成本监控和预算控制方案
- 真实场景的成本计算
定价速查
| 模型 | 输入 (/M token) | 输出 (/M token) | 适合场景 |
|---|---|---|---|
| Opus 4.6 | $5 | $25 | 最复杂的推理和分析 |
| Sonnet 4.6 | $3 | $15 | 大多数开发任务(最佳平衡) |
| Haiku 4.5 | $1 | $5 | 分类、摘要、简单任务 |
关键认知:输出比输入贵 3-5 倍。 控制输出长度是最有效的省钱手段。
优化技巧一:选对模型
不是所有任务都需要最强的模型。
def choose_model(task_complexity):
"""根据任务复杂度选择模型"""
if task_complexity == "simple":
return "claude-haiku-4-5" # 分类、摘要
elif task_complexity == "moderate":
return "claude-sonnet-4-6" # 代码、分析
else:
return "claude-opus-4-6" # 复杂推理
# 示例:意图分类用 Haiku,内容生成用 Sonnet
intent = client.messages.create(
model="claude-haiku-4-5", # $1/M 输入
max_tokens=50,
messages=[{"role": "user", "content": "用户消息:" + user_msg}]
)
优化技巧二:Prompt Caching(省 90%)
重复的 system prompt 和参考文档,用缓存只需 0.1x 价格。
# 假设 system prompt 是 10K token
# 不用缓存:每次 10K × $3/M = $0.03
# 用缓存: 首次 $0.03,后续 10K × $0.3/M = $0.003(省 90%)
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[{
"type": "text",
"text": "你的很长的 system prompt...",
"cache_control": {"type": "ephemeral"}
}],
messages=[{"role": "user", "content": "用户问题"}]
)
# 检查缓存命中
print(f"缓存命中: {response.usage.cache_read_input_tokens}")
print(f"缓存未命中: {response.usage.cache_creation_input_tokens}")
优化技巧三:Batch API(省 50%)
不需要实时响应的任务,用 Batch API 享受 50% 折扣。
# 创建批量请求
batch = client.messages.batches.create(
requests=[
{
"custom_id": "task-001",
"params": {
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "翻译任务1"}]
}
},
{
"custom_id": "task-002",
"params": {
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "翻译任务2"}]
}
}
]
)
# Batch 处理在 24 小时内完成,价格是实时 API 的 50%
优化技巧四:控制输出长度
# 在 prompt 中明确限制输出
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=200, # 硬限制
messages=[{
"role": "user",
"content": "用 3 句话总结这篇文章:..." # 软限制
}]
)
优化技巧五:Effort 参数
通过减少推理"努力程度"来降低输出 token 消耗。
# 简单任务用低 effort
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=256,
thinking={
"type": "enabled",
"budget_tokens": 1024,
"effort": "low" # 减少思考量
},
messages=[{"role": "user", "content": "1+1等于几"}]
)
优化技巧六:精简 Prompt
每多一个 token 的输入都有成本。
# 差:冗长的 prompt(200 tokens)
bad_prompt = """
我想请你帮我做一件事情,就是把下面这段英文文字翻译成中文。
请你尽量保持原文的意思和语气,翻译要通顺自然。
下面是需要翻译的内容:
Hello World
"""
# 好:精简的 prompt(20 tokens)
good_prompt = "翻译成中文:Hello World"
成本计算示例
| 场景 | 模型 | 输入 | 输出 | 单次成本 | 1万次/月 |
|---|---|---|---|---|---|
| 意图分类 | Haiku | 500 | 20 | $0.0006 | $6 |
| 内容摘要 | Sonnet | 5K | 500 | $0.0225 | $225 |
| 代码审查 | Sonnet | 10K | 2K | $0.06 | $600 |
| 深度分析 | Opus | 20K | 5K | $0.225 | $2,250 |
实战练习
Tip: 审计你当前的 API 使用并优化。
- 记录你最近 10 次 API 调用的 token 用量和成本
- 识别哪些调用可以用更便宜的模型
- 对高频调用启用 Prompt Caching,对比前后成本
关键要点
Note: 本文核心总结
- 输出 token 比输入贵 3-5 倍,控制输出是第一优先级
- Prompt Caching 省 90%,Batch API 省 50%
- 按任务复杂度选择模型:Haiku → Sonnet → Opus
- 精简 prompt、限制输出长度是基本功