본문 바로가기
C.W.K.
Stream
Lesson 03 of 06 · published

Responses API Streaming — typed semantic events

~22 min · streaming, responses-api, semantic-events

Level 0Tokenizer
0 XP0/54 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Chat Completions 가 의미를 직접 조립해야 하는 raw delta 를 준다면, Responses 는 type 이 붙은 semantic event 를 줘. response.output_text.delta, response.output_text.done, response.tool_call.created, response.error 처럼 event.type 을 기준으로 처리할 수 있어.

type 이 있으면 분기하기 쉬워

raw delta 는 client 가 여러 필드를 보고 텍스트인지 도구 호출인지 오류인지 판단해야 해. semantic event 는 의미를 type 에 드러내므로 처리 코드가 짧고 안전해져.

대표적인 event

  • response.created — response 가 시작됐어.
  • response.output_text.delta — 새 텍스트 fragment 가 도착했어.
  • response.output_text.done — 텍스트 출력이 끝났어.
  • response.tool_call.created / ...arguments.delta — 도구 호출이 만들어지고 arguments 가 들어와.
  • response.error — 처리 중 실패했어.
  • response.completed — response 전체가 끝났어.

event.type 으로 걸러

async for event in stream: if event.type.endswith('.delta'): ... 처럼 prefix 나 suffix 로 묶어 처리할 수 있어. 완성된 문자열을 다시 분석해 의미를 추측할 필요가 없어.

Code

for event in stream — typed events·python
stream = client.responses.create(
    model="gpt-5.4",
    input="Write a poem about the ocean.",
    stream=True,
)

for event in stream:
    match event.type:
        case "response.output_text.delta":
            print(event.delta, end="", flush=True)
        case "response.function_call_arguments.delta":
            print(f"[tool args: {event.delta}]")
        case "response.completed":
            print(f"\\n\\nDone. Tokens: {event.response.usage.total_tokens}")
        case "error":
            print(f"Error: {event.message}")

External links

Exercise

EventLogger 를 만들어 모든 semantic event 를 terminal 에 네 색으로 출력해. text delta 는 녹색, tool event 는 청록색, error 는 빨간색, done 은 흐린 흰색으로 표시하고 도구를 쓰는 prompt 하나를 끝까지 추적해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.