降低 Claude API 成本
LLM 支出会随着用户数量、上下文长度和输出量增长。以下实践可以降低每个成功任务的成本,而无需全面重写产品。
最快的节省方式
计算实际负载成本
输入真实请求量和平均 token 用量。计算器会比较所选模型的官方价格与 Claude API Tech 价格。请求数中应包括重试和后台调用。
负载成本计算器
按官方价格
US$1,350.00
每月
Claude API Tech
US$675.00
每月
每月节省
US$675.00
每年节省
US$8,100.00
估算使用所选模型的当前价格,不包含 prompt caching。它用于判断成本规模,不代表精确到账单金额。
价格页面详细说明了输入、输出和缓存 token 的区别、总成本如何形成,以及如何计算单次请求的费用。 Claude API 费用计算方式 →
先收集七天的 usage 数据
总账单无法说明钱花在了哪里。请把 usage 与具体产品功能一起记录,例如客服回复、文档处理、agent 步骤或报告生成。一周的数据通常就能看出哪个功能最耗预算。
const startedAt = performance.now();
const message = await anthropic.messages.create({
model,
max_tokens,
messages
});
analytics.track("llm_request", {
feature: "support_reply",
model: message.model,
input_tokens: message.usage.input_tokens,
output_tokens: message.usage.output_tokens,
latency_ms: Math.round(performance.now() - startedAt)
});找到最大的成本来源
不要同时重写所有 prompt。先按成本对产品功能排序,从最高的一项开始。下面的表格可以帮助选择第一个实验。
| 数据表现 | 成本增长位置 | 首先检查 |
|---|---|---|
| RAG 或聊天的 prompt 很大 | input_tokens | Retrieval、历史记录、prompt caching |
| 回答比界面实际需要的更长 | output_tokens | max_tokens 和响应格式 |
| 一次用户操作产生很多调用 | retries 或 agent loop | Backoff、stop conditions、重复请求 |
| 所有任务都使用同一个模型 | 每个 token 的价格 | 把简单任务路由到更便宜的模型 |
需要优化的部分
1. 降低相同 token 的价格
迁移到 Claude API Tech 后,无需更改模型、prompt 或 token 用量,即可将 Claude API 成本降低 50%。注册即可获取兼容的 API 密钥。
降低 50% 的成本 →2. 根据任务选择模型
不要把分类、字段提取和简单转换都交给最昂贵的模型。使用自己的评测集验证质量,仅在确实能改善结果时使用更强的模型。
const model = task.requiresDeepReasoning
? "claude-sonnet-5"
: "claude-fable-5";
const response = await anthropic.messages.create({
model,
max_tokens: task.requiresLongAnswer ? 1200 : 300,
messages
});3. 删除不必要的上下文
不要在每次请求中发送完整对话和所有文档。只保留相关片段、早期消息摘要以及当前步骤需要的指令。
未优化
- ●完整历史
- ●所有文档
- ●重复指令
≈ 12,400 个输入 token
优化后
- ●简短摘要
- ●3 个相关片段
- ●已缓存的指令
≈ 3,100 个输入 token
4. 使用 prompt caching
缓存较长的系统指令和重复上下文。缓存读取价格为普通输入价格的 0.1 倍,因此重复 prompt 部分最多可节省 90%。
const response = await anthropic.messages.create({
model: "claude-sonnet-5",
max_tokens: 500,
system: [{
type: "text",
text: policyAndInstructions,
cache_control: { type: "ephemeral" }
}],
messages: [{
role: "user",
content: relevantChunks.join("\n\n")
}]
});5. 限制输出长度
设置合理的 max_tokens,并要求模型使用所需格式回答。流式输出可以改善首 token 时间,但本身不会减少计费 token。
const stream = anthropic.messages.stream({
model: "claude-sonnet-5",
max_tokens: 300, // 响应上限
system: "仅返回包含 summary 和 risk_level 字段的精简 JSON,不要使用 Markdown。",
messages
});
for await (const event of stream) {
console.log(event);
}
const message = await stream.finalMessage();
console.log(message.usage.output_tokens); // 实际生成的 token6. 避免重试风暴
只重试临时错误,并使用 exponential backoff。不要因为前端错误或自身服务超时而重复已成功的模型请求。
进行一次受控测试
选择一个高成本功能,在修改前后运行相同的请求集。比较成本、输出质量、latency 和错误率。结果可以接受后,再迁移下一个使用场景。
- 记录当前模型、prompt 和每个成功结果的平均成本。
- 保存 30 到 100 个不含个人数据的典型请求。
- 只修改一个变量:endpoint、模型、上下文、caching 或输出限制。
- 使用同一请求集比较两个版本。
- 只有在不损害产品质量时才保留优化。
下一步
先比较模型价格,然后通过新 endpoint 测试一个生产场景。在迁移其他流量之前,评估质量、latency 和实际成本。