MagicTools
claudeApril 12, 20263 views2 min read

Claude API 高级用法:批处理、缓存与成本优化

Message Batches API

当你有大量不需要即时响应的请求时,Batches API 可以帮你节省 50% 的费用。批量请求会在 24 小时内异步处理完成。

创建批处理任务

import anthropic

client = anthropic.Anthropic()

batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": "request-1",
            "params": {
                "model": "claude-sonnet-4-20250514",
                "max_tokens": 1024,
                "messages": [{"role": "user", "content": "总结量子计算的核心概念"}]
            }
        },
        {
            "custom_id": "request-2",
            "params": {
                "model": "claude-sonnet-4-20250514",
                "max_tokens": 1024,
                "messages": [{"role": "user", "content": "解释机器学习与深度学习的区别"}]
            }
        }
    ]
)

print(f"Batch ID: {batch.id}, Status: {batch.processing_status}")

查询和获取结果

# 查询状态
batch = client.messages.batches.retrieve(batch.id)
print(f"Status: {batch.processing_status}")

# 获取结果(处理完成后)
for result in client.messages.batches.results(batch.id):
    print(f"{result.custom_id}: {result.result.message.content[0].text[:100]}")

Prompt Caching

对于包含大量固定上下文的场景(如长文档分析、系统提示),Prompt Caching 可以缓存输入内容,后续请求复用缓存,节省高达 90% 的输入 Token 费用。

使用缓存

import anthropic

client = anthropic.Anthropic()

long_document = "这是一篇非常长的文档..." * 500  # 长上下文

# 在需要缓存的内容块上添加 cache_control
response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": long_document,
            "cache_control": {"type": "ephemeral"}
        }
    ],
    messages=[{"role": "user", "content": "这篇文档的核心观点是什么?"}]
)

# 后续相同上下文的请求将命中缓存
# usage.cache_creation_input_tokens: 首次缓存写入
# usage.cache_read_input_tokens: 后续缓存命中
print(f"Cache read: {response.usage.cache_read_input_tokens} tokens")

缓存定价

  • 缓存写入:比正常输入价格高 25%
  • 缓存读取:比正常输入价格低 90%
  • 缓存有效期:5 分钟(每次命中自动续期)

Extended Thinking

Extended Thinking 让 Claude 在回答前进行深度思考,适合复杂的推理、数学和编程问题。

response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=8000,
    thinking={
        "type": "enabled",
        "budget_tokens": 5000  # 思考过程的 Token 预算
    },
    messages=[{"role": "user", "content": "证明根号 2 是无理数"}]
)

for block in response.content:
    if block.type == "thinking":
        print(f"思考过程: {block.thinking[:200]}...")
    elif block.type == "text":
        print(f"最终回答: {block.text}")

Token 计数 API

在发送请求前预估 Token 用量,帮助你做好成本控制:

count = client.messages.count_tokens(
    model="claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "Hello, world!"}]
)
print(f"Input tokens: {count.input_tokens}")

成本优化策略

策略 节省幅度 适用场景
使用 Haiku 模型 约 90% 简单分类、摘要任务
Message Batches 50% 离线批量处理
Prompt Caching 最高 90% 重复长上下文
精简 Prompt 可观 所有场景
合理设置 max_tokens 可观 避免浪费

速率限制与重试

import anthropic

client = anthropic.Anthropic()

# SDK 内置自动重试(默认 2 次)
client = anthropic.Anthropic(max_retries=3)

# 也可手动处理
try:
    response = client.messages.create(...)
except anthropic.RateLimitError:
    # 等待后重试,或切换到更低的请求频率
    pass

常见问题

Batches API 的结果可以保存多久?

批处理结果在完成后保留 29 天。请在此期间下载并保存你需要的结果。

Prompt Caching 对所有模型都有效吗?

Prompt Caching 支持 Claude Sonnet、Opus 和 Haiku 等主要模型。缓存内容至少需要 1024 个 Token 才会被缓存,过短的内容不会触发缓存机制。

Extended Thinking 的 budget_tokens 设多少合适?

根据问题复杂度调整。简单推理任务设置 2000-5000 即可,复杂数学证明或多步骤推理可以设置 10000 以上。budget_tokens 不会额外收费,只有实际使用的 Token 计费。

如何监控 API 使用成本?

在 console.anthropic.com 的 Usage 页面可以查看实时用量和费用。建议设置 Spending Limit 防止意外超支,同时通过 API 响应中的 usage 字段跟踪每次请求的 Token 消耗。

Published by MagicTools