ストリーミングレスポンス
ストリーミングを使用すると、モデルレスポンスの生成時に段階的に受信できるため、よりインタラクティブなユーザーエクスペリエンスを実現できます。Converse API と Invoke API はどちらもストリーミングをサポートしています。
ConverseStream を使用したストリーミング
ConverseStream を使用して、イベントのストリームとしてレスポンスを受信します。
import boto3 bedrock = boto3.client('bedrock-runtime', region_name='us-east-1') response = bedrock.converse_stream( modelId='us.amazon.nova-2-lite-v1:0', messages=[ { 'role': 'user', 'content': [{'text': 'Write a short story about AI.'}] } ] ) for event in response['stream']: if 'contentBlockDelta' in event: delta = event['contentBlockDelta']['delta'] if 'text' in delta: print(delta['text'], end='', flush=True)
InvokeModelWithResponseStream を使用したストリーミング
Invoke API でのストリーミングに InvokeModelWithResponseStream を使用します。
import boto3 import json bedrock = boto3.client('bedrock-runtime', region_name='us-east-1') request_body = { 'messages': [ { 'role': 'user', 'content': [{'text': 'Explain quantum computing.'}] } ] } response = bedrock.invoke_model_with_response_stream( modelId='us.amazon.nova-2-lite-v1:0', body=json.dumps(request_body) ) for event in response['body']: chunk = json.loads(event['chunk']['bytes']) if 'contentBlockDelta' in chunk: delta = chunk['contentBlockDelta']['delta'] if 'text' in delta: print(delta['text'], end='', flush=True)
ストリームイベントタイプ
ストリーミングレスポンスには、いくつかのイベントタイプが含まれます。
-
messageStart: メッセージの開始を示します -
contentBlockStart: コンテンツブロックの開始を示します -
contentBlockDelta: 増分テキストまたはデータを含みます -
contentBlockStop: コンテンツブロックの終了を示します -
messageStop: メッセージの終わりを示し、停止理由を含みます -
metadata: 使用状況情報 (トークン数) を含みます