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

Batch API で大量処理

Batch API · 約 8 分

重要キーワード

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

エラー処理

Anthropic SDK は HTTP ステータスに応じた例外クラスを返します。
例外 ステータス 意味
BadRequestError 400 リクエスト不正
AuthenticationError 401 API キー誤り
PermissionDeniedError 403 権限不足
NotFoundError 404 モデル ID 等が無効
RateLimitError 429 レート上限超え
APIStatusError 5xx サーバー側エラー
APIConnectionError - 通信失敗

リトライ付きの呼び出し

wzxhzdk:1

SDK 標準のリトライ機構

Anthropic(max_retries=3, timeout=60) のように、SDK 自体にもリトライ・タイムアウト設定があります。 シンプルな用途ならまずはこちらで十分。

レートリミット (Rate Limit)

Anthropic はティアごとに RPM (リクエスト/分), TPM (トークン/分) が決まっています。 - 開発初期: 低い上限。 - 使用量・支払いが増えると 自動昇格 または申請で引き上げ可能。

Retry-After ヘッダ

429 のレスポンスには retry-after ヘッダが含まれることがあるので、 これを尊重して待機するのが行儀の良い実装です。SDK は自動で読みます。

Idempotency (冪等性)

同じリクエストを再送しても安全か? Anthropic の messages API は副作用なし なので、リトライしても問題ありません。 ただしユーザー側でログ・課金処理を多重に走らせないよう注意。

よく出るエラーと診断

エラーメッセージ 原因 対処
Invalid API Key キーが間違い・失効 Console で確認
model not found モデル ID 誤り claude-sonnet-4-6 のような正しい ID
max_tokens too large プランの上限超え 引き下げる
prompt is too long コンテキスト超過 入力短縮 / モデル変更
429 レート超過 バックオフ
overloaded_error サーバー過負荷 バックオフして再試行

サーキットブレーカー

連続して失敗するときは 一時停止 (circuit breaker) を入れて、 下流サービスが過負荷で潰れるのを防ぎます。
class Breaker:
    def __init__(self, threshold=5, cooldown=60):
        self.fails = 0
        self.opened_at = None
        self.threshold = threshold
        self.cooldown = cooldown
    def call(self, fn, *a, **kw):
        if self.opened_at and (time.time() - self.opened_at) < self.cooldown:
            raise RuntimeError("circuit open")
        try:
            r = fn(*a, **kw)
            self.fails = 0
            return r
        except Exception:
            self.fails += 1
            if self.fails >= self.threshold:
                self.opened_at = time.time()
            raise

観察

エラー応答もモデルに考えさせると面白い学びになります。 @@TRY_0@@

演習問題

演習 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 は非同期で時間がかかるため、リアルタイム応答には不向きです。