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
# Default Output
요약
게시글에서는 ~~ 나타난다.
키워드 목록
무산
수수료
제안
# Structured Output
{
'summary': '게시글에서는 ~~ 나타난다.',
'keyword': [
'무산',
'수수료',
'제안'
]
}
728x90
반응형