반응형
서론
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
반응형
'Develop' 카테고리의 다른 글
[Docker] docker-compose 실행 및 중지, 테스트 방법 (0) | 2024.11.25 |
---|---|
[Python] extend()로 List 자료형에 List 요소 추가하기 (0) | 2024.11.18 |
[Python] BeautifulSoup select() CSS 선택자 사용법 (2) | 2024.11.17 |
[Web] Rendering on the Web (0) | 2024.11.12 |
[OpenAI] 1.0.0 Migration 관련 Function 변경 (2) | 2024.11.05 |
[Scraping] Colab Web Scraping 설정하기 (1) | 2024.10.28 |
[k8s] kubeadm 개념 및 명령어 정리 (0) | 2024.10.02 |
[k8s] 구성 요소별 관련 명령어 (3) | 2024.10.02 |