AI 초보자 QnA
질문
OpenAI API 스트리밍 답변이 끝났는지 어떻게 확인하나요?
답변
글자가 더 나오지 않는지만 보지 말고 response.completed 이벤트와 응답 상태를 확인하세요. Responses API의 HTTP 스트리밍은 글 조각뿐 아니라 생성 시작·완료·실패를 알리는 이벤트도 보냅니다.
텍스트 일부가 도착했거나 연결이 닫혔다고 정상 완료는 아닙니다. 이 글은 API로 받는 스트리밍의 완료 판정을 다룹니다. ChatGPT 앱의 중지 버튼이나 백그라운드 작업 취소와는 다른 절차입니다.
짧게 답하면
이벤트 type 읽기 → 텍스트 조각 표시 → 완료·실패·미완료 구분 → 최종 상태와 내용 검토 순서로 확인하세요. 처음에는 도구 호출이 없는 짧은 텍스트 요청으로 연습하는 편이 쉽습니다.
response.output_text.delta
새로 도착한 텍스트 조각입니다. 화면에 이어 붙일 내용이지 전체 응답의 성공 표시가 아닙니다.
response.output_text.done
해당 텍스트 내용이 확정됐다는 이벤트입니다. 응답 전체의 완료 이벤트와 구분합니다.
response.completed
모델 응답이 완료됐다는 이벤트입니다. 함께 온 response의 id와 status도 확인하세요.
처음 쓰는 사람 기준으로 설명하면
긴 답변이 화면에 한 줄씩 나오다가 멈췄다고 가정해 보세요. 생성이 끝났을 수도 있지만 네트워크가 끊겼을 수도 있습니다. 프로그램은 화면의 마지막 문장 대신 서버가 보낸 이벤트의
type
을 읽어 두 상황을 나눠야 합니다.
공식 스트리밍 가이드는 Responses 요청에
stream=True
를 지정하고 이벤트를 차례로 읽는 Python 예시를 제공합니다. 텍스트 조각은
delta
에서 읽습니다. 모든 이벤트에 글 조각이 있다고 가정하지 말고 type별로 처리하세요.
공식 이벤트 문서는
response.failed
를 실패,
response.incomplete
를 미완료로 설명합니다. 실패하면 response의 error를, 미완료이면 incomplete_details를 살펴보세요. 둘 다 정상 완료와 같은 성공 표시로 처리하면 안 됩니다.
한 줄 정리: 텍스트 조각, 텍스트 확정, 응답 전체 완료는 각각 다른 신호입니다. 글이 보이는 상태와 성공한 상태를 나누세요.
바로 따라 해보기
1단계. 작은 스트리밍 요청을 준비합니다.
공식 SDK 예시에 따라 사용 가능한 모델과 짧은 질문을 정하고 stream을 켭니다. 처음에는 개인정보·파일·도구 호출을 넣지 않습니다. API 키는 안전한 환경에서 불러오고 출력 로그에 남기지 마세요.
2단계. 화면 출력과 상태 기록을 나눕니다.
response.output_text.delta
는 화면에 이어 붙이고, response.created에서 응답 ID를 기록하세요. response.completed가 오면 response.status가 completed인지 확인합니다. failed·incomplete·error 이벤트와 통신 예외는 별도로 남깁니다.
3단계. 끝난 이유를 확인한 뒤 결과를 씁니다.
완료 이벤트를 받지 못한 채 읽기가 끝나면 성공이 아니라 완료 여부 미확인으로 표시하세요. 받은 글은 부분 결과로 구분합니다. 정상 완료를 확인해도 답변의 사실과 요청한 형식은 따로 검토한 뒤 저장·전달하세요.
주의할 점
통신 오류와 모델의 실패 이벤트는 구분해야 합니다. 공식 오류 문서는 APIConnectionError를 연결 문제, APITimeoutError를 시간 초과로 설명합니다. 예외가 났는데 화면에 글이 남아 있다는 이유만으로 완료 처리하지 마세요.
response.output_text.done의 done만 보고 전체 작업 성공으로 기록합니다. 어떤 이벤트가 끝났는지 전체 이름을 읽으세요.
연결이 끊기면 받은 글을 완성본으로 보내거나 같은 요청을 계속 다시 만듭니다. 오류와 기존 응답 ID를 먼저 확인하고 재시도 횟수를 제한하세요.
response.completed를 사실 검증이나 외부 작업 완료의 보증으로 봅니다. 모델 응답의 완료와 답변 정확성, 도구가 실제로 한 일은 따로 확인해야 합니다.
웹사이트와 앱 중 무엇부터 쓰면 좋을까요?
이벤트 이름은 공식 웹 문서에서
Streaming API responses와 Streaming events를 나란히 읽으세요. 이 글은 HTTP의 SSE 스트리밍 기준입니다. 다른 API나 WebSocket 예시의 종료 처리 코드를 이름만 바꿔 붙이지 않습니다.
실제 확인은 API 개발 환경에서
SDK를 쓰는 프로그램에서 이벤트 이름과 최종 상태를 확인합니다. ChatGPT 모바일 앱에 완료 여부를 물어보는 것으로 대신하지 마세요. 연결 오류가 나면 네트워크·프록시·방화벽 설정도 살펴보되 보안 설정을 무작정 끄지는 않습니다.
같이 보면 좋은 질문
확인한 공식 자료
OpenAI 공식 가이드 — Streaming API responses — HTTP 스트리밍 설정, type별 이벤트 처리와 텍스트 조각·완료 이벤트의 구분을 확인했습니다.
OpenAI API 문서 — Streaming events — 텍스트 확정, 응답 완료·실패·미완료 이벤트와 response 객체의 상태·오류 항목을 확인했습니다.
OpenAI 공식 가이드 — Error codes — SDK 연결 오류·시간 초과의 구분과 네트워크·프록시·방화벽 점검 항목을 확인했습니다.
