스트리밍

스트리밍 (Streaming)

스트리밍 UI와 블로킹 UI의 장단점을 설명하는 문서예요. ChatGPT 같은 대화형 텍스트 UI에서 스트리밍이 왜 중요한지 배워요.

출처: 문서

본문

대화형 텍스트 UI(예: ChatGPT)의 스트리밍은 지난 몇 달 동안 엄청난 인기를 얻었어요. 이 섹션에서는 스트리밍과 블로킹 인터페이스의 장단점을 살펴볼게요.

대규모 언어 모델 (LLMs)은 매우 강력해요. 하지만 긴 출력을 생성할 때는 여러분이 익숙한 지연 시간에 비해 매우 느릴 수 있어요. 전통적인 블로킹 UI를 구축하려고 하면, 사용자들은 전체 LLM 응답이 생성될 때까지 5초, 10초, 심지어 40초까지 로딩 스피너를 바라보며 기다려야 할 수 있어요. 이는 특히 챗봇 같은 대화형 애플리케이션에서 좋지 않은 사용자 경험으로 이어질 수 있어요. 스트리밍 UI는 응답의 일부를 사용할 수 있게 되는 대로 표시함으로써 이 문제를 완화할 수 있어요.

  • 블로킹 UI (Blocking UI): 블로킹 응답은 전체 응답을 사용할 수 있게 될 때까지 기다렸다가 표시해요.
  • 스트리밍 UI (Streaming UI): 스트리밍 응답은 응답의 일부를 사용할 수 있게 되는 대로 전송할 수 있어요.

실제 예제 (Real-world Examples)

다음은 스트리밍 UI가 실제 환경에서 사용자 경험을 어떻게 개선하는지 보여주는 두 가지 예제예요—첫 번째는 블로킹 UI를, 두 번째는 스트리밍 UI를 사용해요.

  • 블로킹 UI: "해리포터 시리즈 첫 번째 책의 처음 200자를 떠올려 봐" 같은 입력에서, 전체 응답이 생성될 때까지 아무 것도 표시되지 않아요.
  • 스트리밍 UI: 같은 입력에서, 응답의 일부가 생성되는 대로 즉시 표시돼요.

보시다시피 스트리밍 UI는 블로킹 UI보다 훨씬 빨리 응답 표시를 시작할 수 있어요. 블로킹 UI는 아무 것도 표시하기 전에 전체 응답이 생성될 때까지 기다려야 하지만, 스트리밍 UI는 응답의 일부를 사용할 수 있게 되는 대로 표시할 수 있기 때문이에요.

스트리밍 인터페이스는 특히 더 큰 언어 모델에서 사용자 경험을 크게 향상시킬 수 있지만, 항상 필요하거나 유익한 것은 아니에요. 스트리밍을 사용하지 않고 더 작고 빠른 모델로 원하는 기능을 달성할 수 있다면, 그 경로가 종종 더 단순하고 관리하기 쉬운 개발 과정으로 이어질 수 있어요.

하지만 모델의 속도와 관계없이, AI SDK는 스트리밍 UI를 가능한 한 간단하게 구현하도록 설계되어 있어요. 아래 예제에서는 SDK의 streamText 함수를 사용해 10줄 미만의 코드로 텍스트 생성을 스트리밍해요:

import { streamText } from 'ai';
__PROVIDER_IMPORT__;

const { textStream } = streamText({
  model: __MODEL__,
  prompt: 'Write a poem about embedding models.',
});

for await (const textPart of textStream) {
  console.log(textPart);
}

스트리밍 UI와 AI SDK에 대한 소개는 Getting Started 가이드를 확인하세요.

더 알아보기 (Learn more)