AWS Certified Generative AI Developer - Professional 資格対策コース

FM API 統合(同期・非同期・ストリーミング)

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

このレッスンで学ぶこと 対応試験ドメイン D2 タスク 2.4.1・2.4.2(FM API 統合パターン)。基盤モデルを呼び出す 3 方式(同期 Converse、ストリーミング ConverseStream、非同期のキュー駆動)の使い分けと、Amazon SQS・Amazon API Gateway WebSocket を使った実装パターンを判断できるようになります。

解説

FM の呼び出しは「すぐ短い応答を返す」「長い応答を少しずつ届ける」「時間のかかる処理をバックグラウンドで回す」のどれを求めるかで実装方式が変わります。試験では「ユーザー体験と処理特性に対してどの統合方式を選ぶか」が問われます。

3 つの統合方式

方式API/構成向いている場面
同期Amazon Bedrock Converse短い応答を 1 リクエストで返す。シンプルな問い合わせ
ストリーミングAmazon Bedrock ConverseStream生成中のトークンを逐次表示。チャット UI の体感向上
非同期SQS/イベント + バックグラウンド処理長文生成・バッチ・即応不要。クライアントを待たせない

同期(Converse)

Converse はリクエストを送り、応答が揃ってから一括で返す同期 API です。実装が単純で、短い応答や即時性が要る軽い処理に向きます。ただし生成完了まで接続を保持するため、長い応答ではユーザーが待つ時間が長くなります。

ストリーミング(ConverseStream)

ConverseStream は生成されたトークンを逐次ストリームで返します。チャット UI で「文字が少しずつ出てくる」体験を実現し、最初の 1 文字までの体感を大きく改善します。フロントへ届けるには、Lambda からのレスポンスストリーミングや、Amazon API Gateway の WebSocket でサーバーからクライアントへ逐次プッシュする構成を取ります。

非同期(キュー駆動)

長文レポート生成やバッチ処理など、即応が不要で時間のかかる処理は、リクエストを Amazon SQS に積んでバックグラウンドのワーカー(Lambda 等)で処理します。クライアントは「受け付けました」をすぐ受け取り、結果は後で取得(ポーリングや通知)します。これによりクライアントを長時間ブロックせず、ピーク負荷もキューで吸収できます。

コード例(ストリーミング ConverseStream)

トークンを逐次受け取る最小例です。認証は IAM ロール経由です。

Python

import boto3 bedrock = boto3.client("bedrock-runtime", region_name="us-east-1") resp = bedrock.converse_stream( modelId="anthropic.claude-3-5-sonnet-20241022-v2:0", messages=[{"role": "user", "content": [{"text": "RAG の利点を 3 つ"}]}], ) for event in resp["stream"]: if "contentBlockDelta" in event: print(event["contentBlockDelta"]["delta"]["text"], end="")

試験で問われるポイント

  • 同期 vs ストリーミング vs 非同期。短い即時応答は Converse(同期)、逐次表示で体感改善は ConverseStream(ストリーミング)、長時間・即応不要はキュー駆動(非同期)
  • 長文生成でクライアントを同期待ちさせるのはアンチパターン。タイムアウトや接続切れのリスクがある。非同期(SQS)かストリーミングへ
  • ストリーミングのフロント配信は WebSocket(API Gateway WebSocket)や Lambda レスポンスストリーミング。通常の同期 REST では逐次プッシュできない
  • 非同期にすると「結果の受け取り方法」(ポーリング/通知/購読)の設計が伴う。受け付け即時応答 + 後で結果取得という分離が問われる

サービスの使い分け早見表

やりたいこと使うもの混同しやすいもの
短い応答を 1 リクエストで返すAmazon Bedrock Converse(同期)ConverseStream(逐次が不要なら過剰)
生成トークンを逐次表示するAmazon Bedrock ConverseStreamConverse(一括返却で逐次表示不可)
長文/バッチを非同期処理Amazon SQS + バックグラウンドワーカー同期 Converse(長時間ブロックで不適)
サーバーからフロントへ逐次プッシュAmazon API Gateway WebSocket同期 REST(プッシュ配信できない)

まとめ

FM API 統合は処理特性で 3 方式を使い分けます。短い即時応答は Amazon Bedrock Converse(同期)、逐次表示で体感を上げるなら Amazon Bedrock ConverseStream(ストリーミング)を Amazon API Gateway WebSocket 等でフロントへ配信、長文やバッチで即応不要なら Amazon SQS によるキュー駆動の非同期です。長文を同期で待たせるのはアンチパターンで、ストリーミングか非同期に逃がすのが定石です。

次のステップ

次のクイズレッスンで、3 つの統合方式の使い分けとストリーミング配信の実装を問うシナリオ問題に挑戦しましょう。

関連レッスン

  • レジリエントな API(バックオフ・フォールバック・ルーティング)(pro-api-resilience)
  • エンタープライズ統合(イベント駆動・疎結合)(pro-enterprise-integration)
  • レイテンシ・スループット最適化(pro-perf-latency)