ストリーミング・Tool Use・構造化出力

AI Navigate Original / 2026/3/24

💬 オピニオンDeveloper Stack & Infrastructure
共有:

要点

  • SSEストリーミングはチャット/長文UIの体感速度を改善。DB/監査は断片でなく最終確定テキストを使い、厳密な構造化出力はストリーミング外で。
  • Tool Use:どのツールをどこまで許すかをアプリ側で制御。副作用には確認、引数はJSON Schemaで厳密化、検索/参照/更新ツールを分離。
  • JSON構造化出力:スキーマ固定、「JSONのみ」明記、temperature 0〜0.2、アプリ側バリデーション、説明用と構造化APIを分離。
  • Prompt Cachingは長い固定プロンプトのコスト削減、Batch APIは大量非同期向け。導入順は構造化出力→ストリーミング→Tool Use→Caching/Batch。

Claude API は、ただ文章を返すだけではなく、応答を少しずつ流す(ストリーミング)外部処理を呼び出す(Tool Use)決まった形のJSONで返す(構造化出力)共通の前置きを使い回す(プロンプトキャッシュ)大量処理をまとめて流す(Batch)といった、実運用で効く機能を備えています。チャット画面で試したプロンプトをそのままAPI化するより、速度・コスト・再現性を設計して組み込むのがコツです。

本記事は Python のコード例を中心に、各機能を「どう組み込むと実際に使いやすいか」を図とともに整理します。なお、モデル名・料金・SDKの細部は更新が速いので、導入時は必ず公式ドキュメント(platform.claude.com)で最新を確認してください。本記事の具体値は 2026年前半時点のものです。

Claude API ストリーミング 待たせない表示 Tool Use 構造化出力 壊れないJSON プロンプトキャッシュ Batch API

FIG.1 チャットUIの先にある、実運用向けの5機能

まず押さえたいのは、これらは用途で使い分けるもので、最初から全部入れる必要はないという点です。記事末で段階導入の順番も示します。

01まずモデルを選ぶ(名前は変わる前提で)

2026年前半時点の主なラインナップは、最上位の Claude Opus、バランス型の Claude Sonnet、高速・低コストの Claude Haiku の3系統です。世代番号(例:Sonnet 4.6、Haiku 4.5)は短い周期で更新されるため、コード中のモデルIDは定数として1か所にまとめ、差し替えやすくしておくのが実務的です。

Haiku

分類・抽出・大量処理など、速度とコストを重視する定型タスク向き。

Sonnet

コーディング支援やエージェントなど、日常の主力。性能とコストのバランス型。

Opus

難度の高い推論・設計・調査など、最大の知能が要る場面に絞って使う。

正確なモデルID・対応機能・価格は更新されます。使う前に公式の Models / Pricing ページを確認してください。本記事の例では、説明用に claude-sonnet-4-5 等のIDを示しますが、利用時点の最新IDに置き換えてください。

02ストリーミング:まず「待たせない体験」を作る

長めの回答や要約では、全文の完成を待つよりサーバー送信イベント(SSE)で逐次表示したほうが体感速度が上がります。チャット、レビュー支援、議事録生成などで特に有効です。Anthropic SDK では messages.stream を使い、テキストの断片を順に受け取ります。

from anthropic import Anthropic

client = Anthropic(api_key="YOUR_API_KEY")

with client.messages.stream(
    model="claude-sonnet-4-5",   # 利用時点の最新モデルIDに置換
    max_tokens=1200,
    temperature=0.2,
    messages=[
        {"role": "user", "content": "SSEストリーミング実装の要点を3つ教えて"}
    ],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

    final_message = stream.get_final_message()

実装の勘所は、途中の断片をそのまま保存しないこと。逐次出力には言い直しや未完の文が混ざるため、DB保存や監査ログには get_final_message() で得る最終確定テキストを使うほうが安全です。あわせて、テキスト断片だけでなく完了イベント・エラーイベントも扱い、ユーザーのキャンセル操作で接続を閉じられるようにしておきます。

Claude 断片を逐次 画面に逐次表示 UI専用・体感速度↑ 最終確定テキスト DB保存・監査ログ 確定後に処理 表示と処理を分離

FIG.2 ストリーミングは「見せる」用、業務処理は「確定後」に分ける

向くケース・注意するケース

向く注意
チャットUI(体感速度が大きく改善)JSON構造化出力(途中断片は不完全JSONになりやすい)
長文要約(途中から読み始められる)バッチ集計(逐次表示の利点が薄い)

構造化出力を厳密に扱う処理では、逐次表示はUI専用、業務処理は最終レスポンス確定後に行う、という分離が実践的です。

03Tool Use:外部処理を「モデル任せにしすぎない」

Tool Use は、Claudeが「どの関数を、どんな引数で呼ぶべきか」を判断して構造化された呼び出し要求を返す仕組みです。実際の処理(社内検索・在庫照会・天気取得・RAG検索・DB問い合わせなど)はあなたのアプリ側が実行し、結果をClaudeに戻します。重要なのは自由実行させることではなく、どのツールを・どの条件で・どこまで許可するかをアプリ側で制御することです。

続きを読むには無料登録が必要です

アカウントを作成すると、オリジナル記事の全文をお読みいただけます。