Develop

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

너드나무 2024. 11. 7. 08:21
반응형

서론

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
반응형