타임아웃, 속도 제한 및 재시도
SDK 타임아웃과 제한된 재시도를 구성하고, 재시도 가능한 오류와 구성 오류를 구분하여 중복 제출을 방지합니다.
구성 오류를 먼저 수정한 다음 일시적인 장애를 처리합니다. 재시도 횟수, 동시성 및 총 대기 시간을 함께 제한하여 짧은 시간 내에 동일한 실패 요청을 여러 번 반복해서 보내지 않도록 합니다.
재시도해야 하는 상황
제목이 “재시도해야 하는 상황”인 섹션| 상황 | 권장 사항 |
|---|---|
| 400 / 401 / 403 / 404 | 요청, 권한 또는 모델을 먼저 수정합니다. 원본 요청을 자동으로 반복하지 않습니다. |
| 429 | 응답 메시지를 확인합니다. Retry-After이 있는 경우 대기 시간을 따르고 동시성을 낮춥니다. |
| 500 / 502 / 503 / 504 / 529 | 제한된 재시도가 가능합니다. 지속적으로 실패하면 중단하고 요청 ID를 보고합니다. |
| 연결 실패 | DNS, 프록시 및 네트워크를 확인하고 작업이 허용하는 시간 내에서 제한된 재시도를 합니다. |
| 요청 전송 후 타임아웃 또는 연결 끊김 | 결과가 불확실할 수 있으므로 로그를 먼저 확인합니다. 업스트림이 아직 처리하지 않았다고 가정할 수 없습니다. |
클라이언트 라이브러리의 재시도 범위가 위 표와 정확히 같지 않을 수 있습니다. 어느 계층에서 재시도할지 결정하면 해당 계층에서 명시적으로 정책을 설정합니다.
먼저 SDK 내장 재시도 사용
제목이 “먼저 SDK 내장 재시도 사용”인 섹션Python과 Node.js의 타임아웃 단위가 다릅니다. Python은 초, Node.js는 밀리초를 사용합니다. 다음 예제는 120초 타임아웃과 최대 2회 자동 재시도를 설정합니다. 초기 연결 시 문제를 해결할 때는 0으로 변경할 수 있습니다.
import osfrom openai import OpenAI
client = OpenAI( api_key=os.environ["ONEZHE_API_KEY"], base_url="https://1zheai.com/v1", timeout=120.0, max_retries=2,)import OpenAI from "openai";
const client = new OpenAI({ apiKey: process.env.ONEZHE_API_KEY, baseURL: "https://1zheai.com/v1", timeout: 120_000, maxRetries: 2,});타임아웃 구성은 전체 비즈니스 작업의 총 소요 시간 상한이 아닙니다. 재시도와 대기로 총 소요 시간이 증가합니다. 외부에서 작업을 다시 실행하는 경우 별도의 총 마감 시간과 취소 메커니즘을 설정해야 합니다.
직접 재시도를 구현할 때
제목이 “직접 재시도를 구현할 때”인 섹션SDK 자동 재시도를 비활성화하여 중첩을 방지합니다. 점진적으로 증가하는 대기 간격과 무작위 지터를 사용합니다. 시도 횟수, 최대 대기 시간 및 동시성 큐를 명시적으로 제한합니다. Retry-After을(를) 파싱할 때 초 단위일 수도 있고 HTTP 날짜일 수도 있다는 점에 유의합니다.
부분적인 스트리밍 결과를 이미 사용자에게 표시한 경우 자동으로 처음부터 재생하여 기존 텍스트 뒤에 이어서는 안 됩니다. “미완료” 상태를 유지하고 사용자가 다시 생성하거나 계속할지 결정하게 합니다.
이미지 생성, 도구 실행 및 기타 외부 결과를 생성할 수 있는 작업은 중복 제출에 특히 주의해야 합니다. 임의의 요청 ID를 설정하면 서버가 자동으로 중복을 제거한다고 가정할 수 없습니다.
충분한 디버깅 정보 기록
제목이 “충분한 디버깅 정보 기록”인 섹션시간, 엔드포인트, 모델, 상태 코드, 소요 시간, 시도 순서 및 서버가 반환한 요청 ID를 기록합니다. 인증 헤더와 전체 개인 프롬프트는 기록하지 않습니다. 이 정보를 호출 로그과 대조합니다.
SDK 구성은 OpenAI Python SDK 및 Node SDK을 참조합니다. 특정 오류는 오류 코드 및 디버깅을 참조합니다.
