본문 바로가기
IT/CHATGPT

[ChatGPT] Streaming API : 실시간 응답의 힘

by Tony Jung 2025. 3. 25.
반응형

Streaming API responses

ChatGPT API는 강력한 언어 모델 기능을 제공할 뿐만 아니라, 이젠  스트리밍(Streaming) 기능을 통해 실시간 응답 처리까지 지원합니다. 

기존의 ChatGPT API는 사용자가 질문을 보내면, 모든 응답을 생성한 후 한 번에 결과를 반환하였지만,  Streaming API는 생성되는 응답을 한 조각씩(chunk) 실시간으로 받아올 수 있습니다.
이는 마치 채팅 애플리케이션에서 상대방이 타이핑하는 걸 보듯, 점진적으로 응답을 받아보며 사용자 경험을 개선할 수 있습니다.

예제 코드 

import openai

openai.api_key = 'your key'

stream = openai.chat.completions.create(
    model="gpt-4o",
    messages=[
        {
            "role": "user",
            "content": "윤동주시인에 대해서 알려주세요",
        },
    ],
    stream=True,
)

for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")

위의 코드에서 가장 중요한 부분은 아마 stream=True  일것입니다. True로 설정하면 OpenAI는 응답을 스트리밍 형태로 제공하여 여러개의 Chunk(조각) 단위로 응답이 도착하여, 점진적인 출력을 할 수 있습니다. 

잠깐 코드 설명 드릴까요?

반응형

 

구성요소 설명
for chunk in stream: OpenAI API가 반환하는 제너레이터(generator)를 순회합니다. 한 번에 전체 응답이 아니라 조각(chunk) 단위로 수신됩니다.
chunk.choices[0].delta.content 각 chunk 안에 담긴 텍스트의 신규 추가분만 포함되어 있습니다. 전체 응답이 아닌, "지금 막 생성된 텍스트"입니다.
if ... is not None: 스트리밍 중간에 None이 들어올 수도 있기 때문에 예외 처리로 안전하게 필터링합니다.
print(..., end="") 응답이 조각별로 오기 때문에 end=""를 사용하여 줄바꿈 없이 실시간 이어서 출력합니다.

처음 예시 코드처럼  " 윤동주 시인은 누구인가요?" 라고 질문을 하면 GPT는 기존방식대로라면 한번의 아래와 같은 답변을 응답할 것입니다. 

윤동주(尹東柱, 1917년 12월 30일 ~ 1945년 2월 16일)는 일제강점기 조선의 대표적인 저항 시인입니다. 대표작으로는 <서시>, <별 헤는 밤> 등이 있으며, 순수한 언어로 조국에 대한 사랑과 슬픔을 노래했습니다.

하지만 Streaming API에서는 아래와 같이 여러개의 Chunk로 나뉘어 전달 됩니다. 

순서 chunk.choices[0].delta.content
1 "윤동주("
2 "尹東柱, 1917년 12월 30일 ~ "
3 "1945년 2월 16일)는 일제강점기 조선의 대표적인 "
4 "저항 시인입니다. 대표작으로는 "
5 "<서시>, <별 헤는 밤> 등이 있으며, "
6 "순수한 언어로 조국에 대한 사랑과 슬픔을 노래했습니다."

각 Chunk는 바로바로 화면에 출력되고, 사용자는 위 텍스트가 실시간으로 생성되는 듯한 UX 경험을 하게 됩니다.  

이 구조를 이용하면 채팅형태, 로딩 애니메이션, 음성 API와 연동, 타자효과 등 다양한 곳에서 활용 가능하며, 사용자에게는 GPT에서 오는 답변 소요시간이 개선된것처럼 보이는 효과를 제공 할 수 있답니다. 

 

반응형

댓글