Agent Skills by ALSEL
汎用LLM・AI開発⭐ リポ 0品質スコア 65/100

batch-api

Message Batches APIを使用すれば、非同期で大量のClaudeの推論処理を実行できます。最大24時間の遅延と引き換えに、約50%のコスト削減が実現します。オフライン分類、評価実行、コンテンツ生成パイプライン、大規模なRAGインデックス作成などに最適です。

description の原文を見る

Use the Message Batches API for async, high-volume Claude inference. Trades latency (up to 24h) for ~50% lower cost. Best for offline classification, evaluation runs, content generation pipelines, and bulk RAG indexing.

SKILL.md 本文

Message Batches API

1バッチあたり最大100,000件のメッセージを送信でき、結果は24時間以内(小規模バッチの場合は数分程度)に返されます。コストは同等の同期呼び出しの約50%です。

使用場面

  • オフライン分類(数百万個のアイテムにラベルを付ける)
  • 評価ハーネスの実行(複数のモデルバージョンに対して評価スイートを実行)
  • リアルタイムレスポンスが不要なコンテンツ生成パイプライン(ニュースレター記事、商品説明)
  • 大規模なデータセットアノテーションまたはRAGドキュメント要約
  • 過去データをモデル出力で埋め戻す

以下の場合は使用を避けてください:

  • レイテンシが重要(ユーザー向け、エージェントループ)
  • 出力を連鎖させる必要がある(1つの呼び出しの結果が次の呼び出しの入力になる)
  • バッチが非常に小規模(<10呼び出し) — オーケストレーションのオーバーヘッドが見合わない

動作仕組み

バッチはrequestsのリストで、各リクエストは一意のcustom_idと標準的なparamsオブジェクト(同期messages.create呼び出しと同じ形式)を持ちます。APIはバッチIDを返し、完了をポーリングするか結果をリストできます。

POST /v1/messages/batches
[
  { "custom_id": "doc-001", "params": { "model": "claude-sonnet-4-6", ... } },
  { "custom_id": "doc-002", "params": { "model": "claude-sonnet-4-6", ... } }
]

リクエストごとのparamsには、cache_control、ツール、システムプロンプト、thinkingを含められます — これは同期APIと同じインターフェースです。

TypeScript

import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();

// 1. 作成
const batch = await client.messages.batches.create({
  requests: docs.map((doc, i) => ({
    custom_id: `doc-${i}`,
    params: {
      model: "claude-sonnet-4-6",
      max_tokens: 512,
      system: [{ type: "text", text: SYSTEM_PROMPT, cache_control: { type: "ephemeral" } }],
      messages: [{ role: "user", content: `Summarize:\n${doc}` }],
    },
  })),
});

// 2. ポーリング
let status = batch;
while (status.processing_status !== "ended") {
  await new Promise(r => setTimeout(r, 30_000));
  status = await client.messages.batches.retrieve(batch.id);
}

// 3. 結果をストリーミング(JSONL)
const results = await client.messages.batches.results(batch.id);
for await (const item of results) {
  if (item.result.type === "succeeded") {
    console.log(item.custom_id, item.result.message.content);
  } else {
    console.error(item.custom_id, item.result.error);
  }
}

Python

from anthropic import Anthropic
client = Anthropic()

batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": f"doc-{i}",
            "params": {
                "model": "claude-sonnet-4-6",
                "max_tokens": 512,
                "system": [{"type": "text", "text": SYSTEM_PROMPT, "cache_control": {"type": "ephemeral"}}],
                "messages": [{"role": "user", "content": f"Summarize:\n{doc}"}],
            },
        }
        for i, doc in enumerate(docs)
    ]
)

while batch.processing_status != "ended":
    time.sleep(30)
    batch = client.messages.batches.retrieve(batch.id)

for item in client.messages.batches.results(batch.id):
    if item.result.type == "succeeded":
        print(item.custom_id, item.result.message.content)

よくある落とし穴

  • custom_idはバッチごとに一意である必要があります。 部分的な失敗時の再試行時に重複を避けるため、安定した冪等なIDを使用してください。
  • リクエストごとのエラーはバッチを失敗させません。 常にitem.result.typeを確認してください — succeedederroredexpiredcanceledが考えられます。
  • 24時間のSLA、リアルタイムではありません。 ユーザーフローをこれに基づいて構築しないでください。
  • ストリーミングはありません。 トークンバイトークンの出力ではなく、完全な応答のみ取得できます。
  • レート制限に注意してください。 バッチは実行時に1分あたりのトークン全体の予算に対してカウントされます。
  • キャッシュの相互作用。 バッチリクエスト内のキャッシュ境界は機能しますが、キャッシュは単一の共有キャッシュです — バッチ内の重複でもキャッシュにヒットできます。

SDK リファレンス

  • TypeScript: @anthropic-ai/sdk >= 0.30
  • Python: anthropic >= 0.40
  • Anthropic ドキュメント: Message Batches API

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
FlexNetOS
リポジトリ
FlexNetOS/agent_harness
ライセンス
MIT
最終更新
2026/5/9

Source: https://github.com/FlexNetOS/agent_harness / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: FlexNetOS · FlexNetOS/agent_harness · ライセンス: MIT