본문 바로가기
Develop

[OpenAI] GPT Response JSON Schema로 관리하기

by 너드나무 2024. 11. 7.
반응형

서론

OpenAI 응답을 받아 처리하는 과정에서 단순 string 기반을 개선하고자 한다.

제공하는 Structureed Outputs 기능을 활용하여, 안전하게 관리하는 방법을 정리해본다.

Structured Outputs이란?

  • OpenAI 모델 버전
    • gpt-4o-2024-08-06 이후 버전부터 사용 가능
  • 안정적인 타입 보장
    • 올바른 데이터 형식을 자동으로 유지해 검증이나 수정이 필요하지 않음
  • 명확한 거부 응답
    • 모델이 특정 요청을 거부하는 경우를 명시적으로 확인 가능
  • 간편한 프롬프트 구성
    • 일관된 데이터 구조를 위해 강한 문구를 사용할 필요 없음

구현

  • pydantic - BaseModel
    • Structured Outputs의 구조를 설계
    • 일반적인 RestAPI에서 Request, Response 구조를 관리하는 것과 유사하게 구현할 수 있음
from pydantic import BaseModel
from openai import OpenAI
import json

client = OpenAI()

class CalendarEvent(BaseModel):
    name: str
    date: str
    participants: list[str]

completion = client.beta.chat.completions.parse(
    model="gpt-4o-2024-08-06",
    messages=[
        {"role": "system", "content": "Extract the event information."},
        {"role": "user", "content": "Alice and Bob are going to a science fair on Friday."},
    ],
    response_format=CalendarEvent,
)

event = json.loads(completion.choices[0].message.content)

응답 예제

  • 게시글에 대한 요약과 관련 키워드를 추출하는 프롬프트 모델
    • Default Output
      • 응답 값 전체가 String 임으로 추가 처리를 위한 많은 전처리 작업이 필요하다.
    • Structured Output
      • Response가 pydantic으로 관리되어 다음에 들어올 결과값에 대한 형태를 확정할 수 있다.
# Default Output
요약
게시글에서는 ~~ 나타난다.

키워드 목록
무산
수수료
제안

# Structured Output
{
    'summary': '게시글에서는 ~~ 나타난다.',
    'keyword': [
    	'무산', 
        '수수료', 
        '제안'
    ]
}
728x90
반응형