← レッスンに戻る
第4章 · Claude API応用

Batch API で大量処理

Batch API · 約 8 分

重要キーワード

English日本語説明
Batch API バッチAPI 大量リクエストを非同期で安く処理するエンドポイント
custom_id カスタムID リクエストと結果を紐づけるユーザー定義の ID
Async 非同期 応答を即座に待たず、後で取りに行く処理形態

Batch API

大量のリクエストを 非同期で安く 処理する API です。

メリット

使い方

batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": "task-1",
            "params": {
                "model": "claude-sonnet-4-6",
                "max_tokens": 256,
                "messages": [{"role": "user", "content": "..." }],
            },
        },
        # ... 大量の request ...
    ]
)
print(batch.id)

結果の取得

# ポーリング (簡易)
import time
while True:
    status = client.messages.batches.retrieve(batch.id)
    if status.processing_status == "ended":
        break
    time.sleep(30)

for r in client.messages.batches.results(batch.id):
    print(r.custom_id, r.result)

ユースケース

注意

Batch + Cache のシナジー

例: 「1 万件のレビューを同じ system プロンプトで分類」 - Batch: 50% オフ - Cache: 残り料金の 90% オフ (システム部分) - 合計: 元の 5-10% に圧縮

失敗時の挙動

for r in client.messages.batches.results(batch.id):
    if r.result.type == "succeeded":
        ...
    elif r.result.type == "errored":
        print("error:", r.result.error)

演習問題

演習 1: 100 件のレビューを Batch で分類

100 件のダミーレビュー (positive/negative/neutral にランダムに偏らせる) を生成し、 Batch API で一括分類してください。 結果を CSV id,label で書き出すこと。

スタータープロンプト:
Python スクリプト:
1. ダミーレビュー 100 件を生成 (適当なテンプレと感情ラベルからランダム)
2. Batch API に投入し、各 request の custom_id をレビュー番号にする
3. ポーリングして完了を待つ
4. results を取り出して CSV に書き出す
anthropic SDK の messages.batches を使う。完全コードを示してください。
ヒントを見る

Batch の status は validating / in_progress / canceling / ended 等。ended まで sleep でループします。実利用では指数バックオフで頻度を下げましょう。

理解度チェック

  1. Batch API の主な利点は?
    1. リアルタイム応答が速くなる
    2. 通常より約 50% 安い
    3. max_tokens 無制限
    4. API キー不要になる
  2. Batch のレスポンスを正しく紐づけるためのフィールドは?
    1. index
    2. custom_id
    3. request_id
    4. ts
  3. Batch API が向かないケースは?
    1. 大量データのラベル付け
    2. リアルタイムチャットボット
    3. Eval スイート
    4. ドキュメント要約のバルク処理
解答と解説を見る
  1. B — Batch は非同期処理で、通常料金の半額になります。
  2. B — `custom_id` で結果を元のリクエストと突き合わせます。
  3. B — Batch は非同期で時間がかかるため、リアルタイム応答には不向きです。