AI 모델로 채팅 인터페이스를 구축할 때, 사용자는 완전한 응답을 받기 위해 10~30초를 기다리는 대신 응답이 즉시 나타나기를 기대합니다. converse_stream 함수는 텍스트가 생성되는 즉시 스트리밍함으로써 이 문제를 해결하여 훨씬 더 나은 사용자 경험을 제공합니다.
스트리밍 작동 방식
전체 응답이 생성되기를 기다리는 대신, 스트리밍은 텍스트 조각이 준비되는 즉시 이를 전송합니다. 흐름이 어떻게 바뀌는지 살펴보겠습니다:

converse_stream을 호출하면 stream 객체를 포함하는 초기 응답을 즉시 받게 됩니다. 이 스트림은 모델이 텍스트를 생성하면서 이벤트를 산출하는 제너레이터입니다. 각 이벤트는 전체 응답의 작은 청크를 포함합니다.
기본 구현
다음은 코드에서 converse_stream을 사용하는 방법입니다:
이렇게 하면 이벤트가 도착하는 대로 모든 다양한 이벤트가 출력됩니다. 응답이 한 번에 모두 오는 것이 아니라 청크 단위로 들어오는 것을 볼 수 있습니다.
스트림 이벤트 이해하기
스트림은 각각 다른 목적을 수행하는 여러 유형의 이벤트를 산출합니다:

기본적인 텍스트 생성의 경우, contentBlockDelta 이벤트에만 신경 쓰면 됩니다. 이 이벤트에는 사용자에게 표시하고자 하는 실제 생성된 텍스트 청크가 포함되어 있습니다.

이벤트는 항상 예측 가능한 순서로 도착합니다: messageStart, 텍스트를 포함하는 여러 개의 contentBlockDelta 이벤트, 그다음 contentBlockStop, messageStop, 마지막으로 metadata입니다.
텍스트 추출하기
각 청크에서 생성된 텍스트만 가져오려면, contentBlockDelta 이벤트를 필터링하여 텍스트를 추출하세요:
end="" 매개변수는 Python의 print 함수가 추가하는 자동 줄바꿈을 제거하여, 스트리밍되는 텍스트가 더 자연스럽게 보이도록 합니다.
실제 적용
실제 애플리케이션에서는 각 청크를 출력하는 대신 일반적으로 다음과 같은 작업을 수행합니다:
- WebSockets 또는 Server-Sent Events를 통해 각 청크를 프런트엔드로 전송합니다
- UI를 업데이트하여 점점 늘어나는 응답을 실시간으로 표시합니다
- 스트리밍이 완료되면 완전한 메시지를 저장합니다
- 스트리밍 중 발생할 수 있는 오류를 처리합니다
이러한 스트리밍 방식은 사용자 경험을 "제출하고 기다리기"에서 "제출하고 응답이 나타나는 것을 지켜보기"로 전환시켜, AI 기반 애플리케이션을 훨씬 더 반응성 있고 매력적으로 느껴지게 만듭니다.