스트리밍 응답 (Streaming)
스트리밍 응답 (Streaming)
긴 답변을 통째로 기다리면 사용자는 몇 초씩 빈 화면을 보게 돼요. 스트리밍은 모델이 글을 만들어내는 중간중간 그 내용을 조각조각 즉시 받아와서, 생성이 끝나길 기다리지 않고 출력을 채워 갈 수 있게 해줍니다. 이 글에서는 스트리밍을 켜는 파라미터와 SSE 응답의 구조를 다뤄볼게요.
켜는 방법과 응답 형식
요청에 stream: true를 넣으면 모델이 결과를 하나로 한꺼번에 주는 대신, SSE(Server-Sent Events)로 델타를 나눠 보내요. 각 이벤트에서 이렇게 받아요.
choices[0].delta.content— 점진적으로 도착하는 답변 텍스트choices[0].delta.reasoning_content— 점진적인 생각(추론) 내용choices[0].finish_reason— 생성 완료 이유 (마지막 chunk에만 등장)usage— 토큰 사용 통계 (마지막 chunk에만 등장)
즉, 마지막 chunk를 만나기 전까지는 delta.content를 하나씩 이어 붙이면 완성된 답변이 됩니다.
호출 예시
cURL은 이렇게 생겼어요.
curl --location 'https://open.bigmodel.cn/api/paas/v4/chat/completions' \
--header 'Authorization: Bearer ***' \
--header 'Content-Type: application/json' \
--data '{
"model": "glm-5.2",
"messages": [ { "role": "user", "content": "봄에 대한 시를 지어줘" } ],
"stream": true
}'
Python SDK(zai-sdk)에서는 응답이 작은 조각들의 이터러블로 돌아오니, chunk.choices[0].delta.content를 누적해 나가면 돼요.
data: {"id":"1","created":1677652288,"model":"glm-5.2","choices":[{"index":0,"delta":{"content":"봄"},"finish_reason":null}]}
...
data: {"id":"1","created":1677652288,"model":"glm-5.2","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":8,"completion_tokens":262,"total_tokens":270}}
data: [DONE]
대화형 채팅, 긴 문서 생성, 그리고 깊은 사고의 생각 과정을 실시간으로 보여주고 싶은 인터페이스에서 특히 유용해요.
더 알아보기 (Learn more)
- 깊은 사고로 추론하기 — 스트리밍으로 생각 과정 받기
- 대화 보완 API (Chat Completions) — SSE와 비동기 호출
- GLM 모델 둘러보기 — 스트리밍 지원 모델 확인