AIエージェント入門

Claude API max_tokens 300K|バッチで大量出力する

Claude API max_tokens 300K|バッチで大量出力する

この記事の結論

Claudeのmax_tokens 300K対応ベータが登場。Message Batches APIでOpus/Sonnet 4.6が最大30万トークンを一括出力可能に。長文・構造化データ・大規模コード生成の実装コード付きで解説します。

「300Kトークンも出力できるなら、プロジェクト丸ごと生成できるのでは?」

そう感じた開発者は少なくないはずです。2026年3月24日、AnthropicはMessage Batches APIで最大30万トークンの出力を可能にするベータ機能「output-300k-2026-03-24」を公開しました。通常の同期APIではOpus 4.6が128K、Sonnet 4.6が64Kに制限されているところ、バッチ経由なら一気に300Kまで引き上げられます。

この記事では、300K出力ベータの有効化方法から実装コード例、コスト計算、実際のユースケースまでをまとめて解説します。「長文を一度に生成したい」「巨大な構造化データを一括抽出したい」という課題を持つ方に特に役立つ内容です。

300Kトークン出力の基本:何が変わったのか

従来のClaude APIでは、同期Messages APIでの最大出力はモデルごとに固定されていました。

モデル 同期API最大出力 Batch API(300Kベータ) 標準バッチ料金(出力)
Claude Opus 4.6 128K tokens 300K tokens $12.50 / MTok
Claude Sonnet 4.6 64K tokens 300K tokens $7.50 / MTok
Claude Haiku 4.5 64K tokens 非対応

重要なのは、300K出力はMessage Batches APIのみ対応という点です。同期APIや、AWS Bedrock、Google Vertex AI、Microsoft Foundryでは現時点では使えません。また、一度の300Kトークン生成には1時間以上かかる場合があるため、24時間の処理ウィンドウを意識したバッチ設計が必要です。

料金はバッチ標準の50%割引が適用されます(通常API比)。Sonnet 4.6で300Kトークン生成した場合の概算コストは 300,000 ÷ 1,000,000 × $7.50 = $2.25。本一冊分の文章を約350円で生成できる計算です。

AIエージェントの構築パターンや長文コンテンツ生成の基礎についてはAIエージェント構築完全ガイドも参照してください。

実装:300Kベータヘッダーの追加方法(3言語)

ベータ機能の有効化は anthropic-beta: output-300k-2026-03-24 ヘッダーを追加するだけです。ただし、通常の client.messages.batches ではなく client.beta.messages.batches エンドポイントを使う点に注意してください。

Python実装例

以下は技術ドキュメントの一括生成を想定したコードです。


# 動作環境: Python 3.11+, anthropic>=0.40.0
# pip install anthropic
# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。

import anthropic
from anthropic.types.beta.messages.batch_create_params import Request
from anthropic.types.message_create_params import MessageCreateParamsNonStreaming

client = anthropic.Anthropic(api_key="YOUR_API_KEY")  # 実際は環境変数を使うこと

# 300K出力ベータを有効化してバッチ作成
message_batch = client.beta.messages.batches.create(
    betas=["output-300k-2026-03-24"],  # ← これが必須
    requests=[
        Request(
            custom_id="long-doc-generation",
            params=MessageCreateParamsNonStreaming(
                model="claude-opus-4-6",
                max_tokens=300000,  # 最大300K
                messages=[
                    {
                        "role": "user",
                        "content": "以下の仕様書に基づいて、完全な技術ドキュメントを生成してください。..."
                    }
                ],
                system="あなたはシニアテクニカルライターです。詳細かつ正確なドキュメントを作成してください。"
            ),
        )
    ]
)

print(f"Batch ID: {message_batch.id}")
print(f"Status: {message_batch.processing_status}")
# → Batch ID: batch_01abc...
# → Status: in_progress

ポイント:

  • betas=["output-300k-2026-03-24"] が必須。これがないと従来の上限が適用される
  • max_tokens=300000 と明示的に指定する(デフォルト値では300Kにならない)
  • バッチIDを保存しておき、後でポーリングして結果を取得する

バッチ結果の取得(ポーリング実装)

300Kトークンの生成は完了まで数十分〜1時間以上かかります。以下のポーリングコードで完了を待ちます。


import time
import anthropic

client = anthropic.Anthropic(api_key="YOUR_API_KEY")
batch_id = "batch_01abc..."  # 作成時に保存したID

# ポーリングで完了を確認(本番では指数バックオフを推奨)
while True:
    batch = client.beta.messages.batches.retrieve(batch_id)

    if batch.processing_status == "ended":
        print("バッチ処理完了")
        break
    elif batch.processing_status == "errored":
        print(f"エラー: {batch}")
        break

    print(f"処理中... ステータス: {batch.processing_status}")
    time.sleep(60)  # 60秒待機(1時間かかることがあるため長めに設定)

# 結果の取得
for result in client.beta.messages.batches.results(batch_id):
    if result.result.type == "succeeded":
        content = result.result.message.content[0].text
        token_count = result.result.message.usage.output_tokens
        print(f"出力トークン数: {token_count:,}")
        print(f"出力(先頭500文字): {content[:500]}")
    else:
        print(f"エラー: {result.result.error}")

cURL(Shell)での直接呼び出し

CLIやスクリプトから素早く試したい場合はcURLが便利です。


# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
curl https://api.anthropic.com/v1/messages/batches \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "anthropic-beta: output-300k-2026-03-24" \
     --header "content-type: application/json" \
     --data '{
    "requests": [
        {
            "custom_id": "large-output-request",
            "params": {
                "model": "claude-opus-4-6",
                "max_tokens": 300000,
                "messages": [
                    {
                        "role": "user",
                        "content": "完全な実装ガイドを生成してください..."
                    }
                ]
            }
        }
    ]
}'
# → {"id":"batch_01abc...", "processing_status":"in_progress", ...}

300K出力が活きる3つのユースケース

出力トークン数が大幅に増えたことで、これまで現実的でなかったユースケースが実現できます。

1. 長文コンテンツの一括生成

書籍1冊分の原稿(10万字相当)や、長大な技術仕様書の生成が1リクエストで完結します。従来はチャプターごとに分割してつなぎ合わせる必要があり、文脈の連続性が課題でした。300Kトークン(日本語で約20〜30万字相当)なら、序章から結論まで一貫したトーンで生成できます。

想定シナリオ: SaaS企業のヘルプドキュメント全体(FAQ・チュートリアル・APIリファレンスの統合版)を一度のバッチで生成。編集コストを大幅に削減。

2. 大規模な構造化データ抽出

数百ページのPDFや大量のテキストから、構造化JSONを一括抽出するタスクに有効です。


# 大量文書からの構造化データ抽出例
# 動作環境: Python 3.11+, anthropic>=0.40.0

import anthropic, json

client = anthropic.Anthropic()

# 数百ページの規約・契約書を一括解析するバッチ
requests = []
for i, doc_text in enumerate(large_documents):  # 例: 100件の契約書
    requests.append({
        "custom_id": f"doc-{i}",
        "params": {
            "model": "claude-sonnet-4-6",
            "max_tokens": 10000,  # 抽出結果はコンパクトなので小さくてOK
            "messages": [
                {"role": "user", "content": f"以下の契約書からJSONで情報を抽出してください:\n\n{doc_text}"}
            ]
        }
    })

# 300Kベータは使わず、通常バッチで100件並列処理(コスト最適)
batch = client.messages.batches.create(requests=requests)
print(f"100件の契約書を並列処理中: {batch.id}")

注意: 抽出結果がコンパクトな場合は300Kを使わず、通常バッチで並列処理する方がコスト効率が良いです。

3. 大規模コードスキャフォールド生成

フルスタックアプリのボイラープレート、複数ファイルにわたるコードベースの初期構造、包括的なテストスイートの一括生成が可能です。300Kトークンは日本語換算で約5万行のコードに相当します。

バッチAPI設計のベストプラクティス

コスト最適化の考え方

用途 推奨モデル max_tokens設定 理由
長文原稿・仕様書生成 Opus 4.6 200,000〜300,000 品質重視
大量文書の構造化抽出 Sonnet 4.6 50,000〜100,000 コスト効率
並列コード生成(複数ファイル) Sonnet 4.6 300,000 スループット重視
小規模タスクの大量処理 Haiku 4.5 64,000(上限) 最安コスト

プロンプトキャッシュとの組み合わせ

バッチ処理では処理時間が長いため、プロンプトキャッシュの1時間キャッシュオプションを使うとキャッシュヒット率が上がります。共通のシステムプロンプトや参照文書がある場合は特に効果的です。


# プロンプトキャッシュと300Kバッチの組み合わせ
# 動作環境: Python 3.11+, anthropic>=0.40.0
# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。

from anthropic.types.beta.messages.batch_create_params import Request
from anthropic.types.message_create_params import MessageCreateParamsNonStreaming

# 大きなシステムプロンプトにキャッシュを適用
shared_system = {
    "type": "text",
    "text": "あなたは〜のエキスパートです..." * 100,  # 大きな参照文書
    "cache_control": {"type": "ephemeral"}  # 1時間キャッシュ
}

requests = [
    Request(
        custom_id=f"request-{i}",
        params=MessageCreateParamsNonStreaming(
            model="claude-opus-4-6",
            max_tokens=300000,
            system=[shared_system],  # キャッシュされたシステムプロンプト
            messages=[{"role": "user", "content": f"タスク{i}を処理してください..."}]
        )
    )
    for i in range(10)
]

【要注意】よくある失敗パターンと回避策

失敗1: 同期APIで300Kを指定してエラーになる

❌ 同期Messages APIで max_tokens=300000 と指定して 400 Bad Request

client.beta.messages.batches を使い、betas=["output-300k-2026-03-24"] を追加する

なぜ重要か: 300K出力はBatch APIのみ対応。同期APIでは従来の上限(Opus 128K、Sonnet 64K)が適用されます。

失敗2: 結果取得のタイムアウト設定が短すぎる

❌ 300Kトークン生成のポーリングに60秒タイムアウトを設定 → 処理完了前にタイムアウト

⭕ バッチ結果は最大24時間有効。ポーリング間隔を5〜10分に設定し、完了まで待つ

なぜ重要か: 「300Kトークン生成は1時間以上かかる場合がある」(Anthropic公式ドキュメント)。短いタイムアウトだと処理は続いているのにエラー扱いになります。

失敗3: Bedrock/Vertex AIで使おうとする

❌ AWS Bedrock経由で300Kベータを試みる

⭕ 現時点では Claude API直接接続のみ対応。Bedrock・Vertex AI・Microsoft Foundryは非対応

失敗4: max_tokensを指定し忘れる

❌ ベータヘッダーだけ追加して max_tokens=1024 のまま

max_tokens=300000(または必要な量)を明示的に指定する

コスト計算:300K出力の費用感

実際のプロジェクトに当てはめて計算してみましょう(最終確認日: 2026-04-09)。

ユースケース モデル 出力トークン数 バッチ出力コスト
技術ドキュメント1冊 Sonnet 4.6 〜300K 約$2.25(約335円)
同(高品質版) Opus 4.6 〜300K 約$3.75(約560円)
コードスキャフォールド10本 Sonnet 4.6 10 × 100K = 1M 約$7.50(約1,120円)
契約書100件を並列抽出 Haiku 4.5 100 × 5K = 500K 約$1.25(約186円)

バッチAPIは標準価格の50%オフなので、同期APIで大量生成するよりも大幅にコストを抑えられます。

セキュリティと運用の注意事項

300K出力バッチを本番環境で使う際に意識すべき点をまとめます。

  • APIキー管理: コードに直接書かず、環境変数(ANTHROPIC_API_KEY)または秘密管理サービスを使うこと
  • 結果の保存期間: バッチ結果は作成から29日間のみ取得可能。完了後は即座にダウンロードして自前のストレージに保存する
  • ZDR非対応: Message Batches APIはZero Data Retention(ZDR)対象外。機密データの取り扱いには注意が必要
  • 支出上限: バッチは支出上限をわずかに超える場合がある。ワークスペースの使用量アラートを設定しておく
  • レート制限: バッチ内のリクエスト数は最大100,000件または256MB。大規模処理では複数バッチに分割する

参考・出典

まとめ:今日から始める3つのアクション

1. 今日: client.beta.messages.batches.create(betas=["output-300k-2026-03-24"], ...) を実際に呼び出し、小さな300Kリクエスト(数百字の指示)でバッチIDを取得してみる
2. 今週中: 自プロジェクトの「分割生成していた長文タスク」を1リクエストに統合し、品質と処理時間を比較する
3. 今月中: 大量文書処理や反復コード生成のパイプラインをバッチ化し、API費用の削減効果を測定する

あわせて読みたい:
Claude Agent SDK完全ガイド — PythonとTypeScriptでの実装から応用まで
AIエージェント構築完全ガイド — エージェント設計パターンの基礎から応用まで

AIエージェントの構築・導入でお困りの場合は、Uravationのお問い合わせフォームからご相談ください。

この記事はAIgent Lab編集部がお届けしました。

Need help moving from reading to rollout?

この記事を読んで導入イメージが固まってきた方へ

Uravationでは、AIエージェントの要件整理、PoC設計、社内導入、研修まで一気通貫で支援しています。

この記事をシェア

X Facebook LINE

※ 本記事の情報は2026年4月時点のものです。サービスの料金・仕様は変更される可能性があります。最新情報は各サービスの公式サイトをご確認ください。

関連記事