DevChoco

실전 코드와 디버깅 맥락을 남기는 개발 지식 아카이브

AI
조회 92분 읽기

OpenAI JSON-only 응답 강제를 위한 스키마 검증 및 복구 패턴

OpenAI Chat Completions API에서 JSON-only 응답을 강제하는 방법과 런타임 스키마 검증 및 재시도 패턴을 TypeScript 예제와 함께 설명합니다.

#openai#json#타입스크립트#스키마검증#api#백엔드

개요

OpenAI Chat Completions API를 사용할 때, JSON 형식의 응답을 강제하는 것은 데이터의 일관성을 유지하는 데 중요합니다. 하지만 때때로 API가 잘못된 형식의 응답을 반환할 수 있습니다. 이 글에서는 JSON-only 응답을 강제하는 방법과 런타임에서 스키마를 검증하고, 필요할 경우 응답을 복구하는 패턴을 살펴보겠습니다.

JSON-only 응답 강제하기

OpenAI API의 response_formatjson_object로 설정하여 JSON 형식의 응답을 요청할 수 있습니다. 그러나 이 설정만으로는 모든 경우에 JSON 형식의 응답을 보장할 수 없습니다. 따라서 추가적인 검증이 필요합니다.

런타임 스키마 검증

TypeScript를 사용하여 응답의 스키마를 검증하는 간단한 예제를 살펴보겠습니다. 아래는 ajv 라이브러리를 사용하여 JSON 스키마를 검증하는 코드입니다.

import Ajv from 'ajv'; const ajv = new Ajv(); const schema = { type: 'object', properties: { id: { type: 'string' }, choices: { type: 'array', items: { type: 'object', properties: { text: { type: 'string' } } } } }, required: ['id', 'choices'] }; const validate = ajv.compile(schema); function validateResponse(response: any) { const valid = validate(response); if (!valid) { console.error(validate.errors); throw new Error('Invalid response format'); } }

응답 복구 및 재시도 패턴

응답이 유효하지 않은 경우, 다음과 같은 전략을 사용할 수 있습니다:

  1. 재시도: 일정한 횟수만큼 API 호출을 재시도합니다.
  2. 기본값 사용: 응답이 유효하지 않을 경우, 미리 정의된 기본값을 사용합니다.
  3. 로깅 및 알림: 유효하지 않은 응답이 발생할 때, 이를 로깅하고 개발팀에 알립니다.

체크리스트

  • response_formatjson_object로 설정되었는가?
  • 응답의 스키마를 검증하는 로직이 포함되어 있는가?
  • 유효하지 않은 응답에 대한 처리 로직이 구현되어 있는가?

트레이드오프

  • 성능: 스키마 검증 로직이 추가됨에 따라 약간의 성능 저하가 발생할 수 있습니다.
  • 복잡성: 응답 처리 로직이 복잡해질 수 있으며, 코드 유지보수가 어려워질 수 있습니다.

주의사항

  • API 응답의 스키마가 변경될 수 있으므로, 변경 사항에 따라 검증 로직을 업데이트해야 합니다.
  • JSON-only 응답을 강제하더라도, 외부 API의 신뢰성에 따라 문제가 발생할 수 있습니다. 따라서 항상 예외 처리를 고려해야 합니다.

같이 읽으면 좋은 글

같은 주제이거나 태그가 겹치는 글을 연결해 탐색 흐름을 강화했습니다.

AI 전체 보기

이전 글

Towards AI Enabled Total Economic Management

다음 글

Y2K 버그 발견 후 IT 팀의 사무실 캠프

댓글

불러오는 중…