

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 串流回應
<a name="streaming-responses"></a>

串流可讓您在模型回應產生時逐步接收模型回應，提供更具互動性的使用者體驗。Converse API 和調用 API 都支援串流。

## 使用 ConverseStream 串流
<a name="streaming-converse"></a>

使用 `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 串流
<a name="streaming-invoke"></a>

`InvokeModelWithResponseStream` 使用 與叫用 API 進行串流：

```
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)
```

## 串流事件類型
<a name="streaming-events"></a>

串流回應包含數種事件類型：
+ `messageStart`：表示訊息的開始
+ `contentBlockStart`：表示內容區塊的開始
+ `contentBlockDelta`：包含增量文字或資料
+ `contentBlockStop`：表示內容區塊的結尾
+ `messageStop`：以停止原因表示訊息的結尾
+ `metadata`：包含用量資訊 （字符計數）