AI 초보자 QnA
질문
OpenAI API가 오류 뒤 알아서 다시 요청하는 것을 끌 수 있나요?
답변
네. 공식 Python SDK에서
OpenAI(max_retries=0)
으로 클라이언트를 만들면 SDK의 자동 재시도를 끕니다. 특정 요청만 바꾸려면
client.with_options(max_retries=0)
을 사용하세요. 최초 요청까지 막는 설정은 아닙니다.
이 글은 SDK가 오류 뒤 같은 API 요청을 다시 보내는 횟수를 제어하는 방법입니다. 모델이 함수를 여러 번 부르는 현상, 화면의 재생성 버튼, 작업 큐의 재실행과는 구분합니다. 끈 뒤에는 실패를 앱에서 처리해야 합니다.
짧게 답하면
SDK·버전 확인 → 자동 재시도 위치 확인 → max_retries 지정 → 오류와 전송 기록 점검 순서로 시작하세요. 반복 요청의 원인을 찾는 연습에서는 SDK와 앱의 재시도를 따로 봅니다.
max_retries
SDK의 추가 재시도 횟수입니다. 0은 자동 재시도를 끄며 음이 아닌 정수를 씁니다.
timeout
응답을 기다리는 시간 설정입니다. 재시도 횟수와 별도입니다.
앱의 재실행
반복문·작업 큐가 다시 호출하는 동작입니다. SDK 설정만으로 꺼지지 않습니다.
처음 쓰는 사람 기준으로 설명하면
요약을 한 번 요청했는데 오류가 늦게 돌아온다고 해 보세요. 공식 Python 문서는 일부 오류를 기본적으로 두 번 재시도하며 짧은 지수 백오프를 둔다고 설명합니다. 앱의 호출 코드가 한 줄이어도 SDK 내부에서 다시 전송할 수 있습니다.
문서의 기본 대상은 연결 오류, HTTP 408·409·429와 500 이상 오류입니다. 요청 본문을 다시 보낼 수 있어야 재시도합니다. 하지만 본문을 재전송할 수 있다는 사실이 외부 저장·발송까지 한 번만 처리된다는 보장은 아닙니다.
Rate limits 가이드는 앱 수준에서 다시 시도할 때 SDK의 재시도도 고려하라고 안내합니다. 이미 큐가 복구를 맡는다면 SDK까지 같은 일을 반복하는지 먼저 살피세요. max_retries는 모델에게 보내는 프롬프트나 Responses 본문의 생성 옵션이 아니라 SDK 클라이언트 설정입니다.
한 줄 정리: SDK의 추가 전송과 앱의 재실행을 나눠 관리하고, 재시도를 껐다는 사실만으로 중복 처리가 해결됐다고 판단하지 마세요.
바로 따라 해보기
1단계. 반복 요청을 만드는 위치를 찾습니다.
사용 중인 것이 공식 openai Python 패키지인지와 버전을 확인하세요. 클라이언트를 만드는 코드, 감싸는 반복문, 작업 큐의 재실행 규칙을 나란히 봅니다. 첫 연습에서는 저장·메일 발송 같은 후속 작업을 제외합니다.
2단계. SDK의 재시도 횟수를 명시합니다.
from openai import OpenAI
뒤에
client = OpenAI(max_retries=0)
을 넣으세요. 한 요청만 바꾸려면
client.with_options(max_retries=0).responses.create(...)
처럼 적용합니다. 생략 부호 부분에는 기존의 model·input 인수를 유지하며, 이 표기는 전체 실행 코드가 아닙니다.
3단계. 작은 요청의 실패 처리를 확인합니다.
권한이 있는 짧은 시험 입력을 쓰고 앱의 실행 횟수와 HTTP 전송 기록을 구분하세요. APIStatusError이면 상태 코드와 가능한 요청 ID를 남깁니다. 연결 오류·시간 초과도 따로 처리하고 키와 원문 자료는 로그에서 뺍니다. 실패한 결과를 성공으로 표시하지 않습니다.
주의할 점
재시도를 끄면 일시적 장애가 곧바로 앱의 오류로 드러날 수 있습니다. 반대로 값을 크게 늘려도 인증·입력·결제 문제가 해결되지는 않습니다. 429라도 잔액 부족이나 지출 한도라면 error.code를 읽고 원인을 먼저 해결하세요.
max_retries=0이면 API 호출 자체나 서버의 진행 작업도 멈춘다고 생각합니다. 이 값은 SDK의 자동 재전송만 제어합니다.
SDK에서 껐는데 앱의 반복문이나 큐는 그대로 다시 실행합니다. 계층별 규칙과 이미 생긴 결과를 확인하세요.
스트리밍 중 받은 글이 끊기면 SDK가 자동 복구해 준다고 가정합니다. Python 문서는 Stream·AsyncStream을 읽는 중의 실패는 자동 재시도하지 않는다고 설명합니다.
웹사이트와 앱 중 무엇부터 쓰면 좋을까요?
설정 위치는 공식 웹 문서에서
Python API library의 Retries에서 기본값과 with_options 예시를 읽으세요. Error codes에서 일시적 오류와 직접 조치할 오류를 구분합니다.
실제 확인은 API 개발 환경에서
앱이 사용하는 클라이언트에 값을 넣고 오류 처리와 전송 기록을 점검하세요. ChatGPT 웹·모바일 앱의 메뉴에서 바꾸는 설정이 아닙니다. 운영 작업에 바로 적용하지 않습니다.
확인한 공식 자료
OpenAI 공식 Python 문서 — OpenAI Python API library — max_retries의 기본값·허용값, 클라이언트·요청별 설정과 스트리밍 읽기 중 예외를 확인했습니다.
OpenAI 공식 가이드 — Rate limits — 앱 재시도에서 SDK 재시도를 고려하고 Retry-After가 있으면 따르는 기준을 확인했습니다.
OpenAI 공식 가이드 — Error codes — API 오류 유형과 429의 잔액·지출 한도 원인을 구분하는 기준을 확인했습니다.
