AI Batch API完全ガイド:OpenAI・Claude・Geminiの大量処理術

AIを知りたい

大量のデータを一度にAIで処理したいんですが、一つずつAPI呼び出しするしかないですか?

AIエンジニア

大量処理ならBatch APIを使いましょう!OpenAI、Claude、Geminiの各社がバッチ処理用のAPIを提供しています。コストも大幅に安くなります。

AIを知りたい

バッチ処理ってどういうことですか?

AIエンジニア

複数のリクエストをまとめて送信し、非同期で一括処理する方法です。リアルタイム性は不要だけど大量処理が必要な場合に最適です。

Batch APIとは

Batch APIとは、複数のAPIリクエストをまとめて非同期で処理するサービスです。通常のAPI呼び出しと比べて50%のコスト削減が可能で、データ分析、コンテンツ生成、評価タスクなど大量処理に適しています。

各社のBatch API比較

AIを知りたい

各社のバッチAPIってどう違うんですか?

AIエンジニア

比較してみましょう。

項目 OpenAI Batch Claude Batch Gemini Batch
コスト削減 50% 50% 50%
処理時間 最大24時間 最大24時間 数分〜数時間
入力形式 JSONL JSON配列 BigQuery/GCS
最大リクエスト数 50,000件 10,000件 制限なし(クォータ依存)
結果取得 ファイルダウンロード API取得 BigQuery/GCS出力

OpenAI Batch APIの使い方

AIを知りたい

まずOpenAIのバッチAPIの使い方を教えてください!

AIエンジニア

JSONLファイルを作成して送信する流れです。

import openai
import json

# 1. バッチ入力ファイルの作成
requests = []
for i, text in enumerate(texts_to_process):
    requests.append({
        "custom_id": f"request-{i}",
        "method": "POST",
        "url": "/v1/chat/completions",
        "body": {
            "model": "gpt-4o",
            "messages": [
                {"role": "system", "content": "テキストを要約してください"},
                {"role": "user", "content": text}
            ]
        }
    })

# JSONLファイルとして保存
with open("batch_input.jsonl", "w") as f:
    for req in requests:
        f.write(json.dumps(req) + "n")

# 2. ファイルをアップロード
client = openai.OpenAI()
batch_file = client.files.create(
    file=open("batch_input.jsonl", "rb"),
    purpose="batch"
)

# 3. バッチジョブの開始
batch = client.batches.create(
    input_file_id=batch_file.id,
    endpoint="/v1/chat/completions",
    completion_window="24h"
)

print(f"バッチID: {batch.id}")

Claude Message Batches APIの使い方

AIを知りたい

ClaudeのバッチAPIも教えてください!

AIエンジニア

Claude APIでもバッチ処理が可能です。

import anthropic

client = anthropic.Anthropic()

# バッチリクエストの作成
batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": f"item-{i}",
            "params": {
                "model": "claude-sonnet-4-20250514",
                "max_tokens": 1024,
                "messages": [
                    {"role": "user", "content": text}
                ]
            }
        }
        for i, text in enumerate(texts_to_process)
    ]
)

# ステータス確認
result = client.messages.batches.retrieve(batch.id)
print(f"ステータス: {result.processing_status}")

# 結果の取得
for result in client.messages.batches.results(batch.id):
    print(f"{result.custom_id}: {result.result.message.content}")

バッチ処理の活用シーン

AIを知りたい

どんな場面でバッチAPIを使うべきですか?

AIエンジニア

リアルタイム性が不要な大量処理全般に向いています。

活用シーン 処理内容 メリット
データ分類 大量テキストのカテゴリ分け 50%コスト削減
コンテンツ生成 商品説明文の一括作成 並列処理不要
翻訳 多言語一括翻訳 API制限回避
品質評価 AIモデルのベンチマーク 大規模評価が安価
データクレンジング 不正データの検出・修正 自動化による効率化

AIを知りたい

コスト半分はかなり大きいですね!

AIエンジニア

大量処理でバッチAPIを使わないのは、お金を捨てているようなものです。急がない処理はすべてバッチに回すのが、プロダクション環境での鉄則ですよ!

関連記事