

# 스트리밍 응답
<a name="streaming-responses"></a>

스트리밍을 사용하면 모델 응답이 생성될 때 이를 점진적으로 수신하여 대화형 기능이 강화된 사용자 경험을 제공할 수 있습니다. Converse API 및 Invoke 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>

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

## 스트림 이벤트 유형
<a name="streaming-events"></a>

스트리밍 응답에는 다음과 같이 여러 이벤트 유형이 포함됩니다.
+ `messageStart`: 메시지의 시작을 나타냄
+ `contentBlockStart`: 콘텐츠 블록의 시작을 나타냄
+ `contentBlockDelta`: 증분 텍스트 또는 데이터를 포함함
+ `contentBlockStop`: 콘텐츠 블록의 끝을 나타냄
+ `messageStop`: 중지 이유를 포함하는 메시지의 끝을 나타냄
+ `metadata`: 사용량 정보(토큰 수)를 포함함