# OpenAI, API에서 구조화된 출력 지원

> Clean Markdown view of GeekNews topic #16204. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16204](https://news.hada.io/topic?id=16204)
- GeekNews Markdown: [https://news.hada.io/topic/16204.md](https://news.hada.io/topic/16204.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-08-07T09:46:17+09:00
- Updated: 2024-08-07T09:46:17+09:00
- Original source: [openai.com](https://openai.com/index/introducing-structured-outputs-in-the-api/)
- Points: 11
- Comments: 2

## Summary

OpenAI의 새로운 기능인 구조화된 출력은 JSON 스키마에 맞춰 모델 출력을 정확히 일치시키는 기능을 제공하여 데이터 검색, 질문 응답, 데이터 추출 등 다양한 작업을 더 신뢰성 있게 수행할 수 있게 합니다. 또한, Python 및 Node SDK에서 네이티브로 지원되어 개발이 용이합니다. 기존의 복잡한 스키마를 더 잘 이해하도록 모델을 훈련시켰으며, 유효한 JSON만 생성하도록 제약된 디코딩 기술을 사용합니다.

## Topic Body

- API에 "Structured Outputs" 도입  
  - 개발자가 제공한 JSON 스키마에 맞춰 모델 출력이 정확히 일치하도록 하는 새로운 기능  
  - 작년 DevDay에서 JSON 모드를 소개했으나, 특정 스키마에 맞는 응답을 보장하지는 않음  
  - 구조화된 출력은 개발자가 제공한 스키마에 맞춰 모델 출력을 제한하고, 복잡한 스키마를 더 잘 이해하도록 모델을 훈련함  
- 구조화된 출력의 필요성  
  - 비구조화된 입력에서 구조화된 데이터를 생성하는 것은 AI의 핵심 사용 사례 중 하나  
  - OpenAI API를 사용해 데이터 검색, 질문 응답, 데이터 추출, 다단계 작업 흐름 구축 등 다양한 작업 수행 가능  
  - 기존에는 오픈 소스 도구, 프롬프트, 재시도 등을 통해 모델 출력을 시스템과 상호 운용 가능한 형식으로 맞추려는 노력이 필요했음  
  - 구조화된 출력은 이러한 문제를 해결하여 개발자가 제공한 스키마에 맞춰 모델 출력을 제한함  
- 성능 평가  
  - 복잡한 JSON 스키마를 따르는 평가에서 gpt-4o-2024-08-06 모델은 100% 점수를 기록  
  - gpt-4-0613 모델은 40% 미만의 점수를 기록  
- 구조화된 출력 사용 방법  
  - 함수 호출을 통한 구조화된 출력: 함수 정의 내에서 `strict: true` 설정  
    - 모든 도구를 지원하는 모델에서 사용 가능  
- 안전한 구조화된 출력  
  - OpenAI의 기존 안전 정책을 준수  
  - 모델이 안전하지 않은 요청을 거부할 수 있음  
  - API 응답에 거부 문자열 값이 포함되어 있어 모델이 거부를 생성했는지 프로그래밍적으로 감지 가능  
- 네이티브 SDK 지원  
  - Python 및 Node SDK가 구조화된 출력을 네이티브로 지원  
  - Pydantic 또는 Zod 객체를 제공하여 JSON 스키마로 변환하고, JSON 응답을 자동으로 직렬화 및 구문 분석  
- 제약 사항  
  - JSON 스키마의 일부만 지원  
  - 새로운 스키마로 첫 번째 API 응답 시 추가 지연 발생  
  - 모델이 안전하지 않은 요청을 거부할 수 있음  
  - 병렬 함수 호출과 호환되지 않음  
  - 구조화된 출력은 Zero Data Retention(ZDR) 대상이 아님  
- 이용 가능 여부  
  - 구조화된 출력은 API에서 일반적으로 사용 가능  
  - 함수 호출을 통한 구조화된 출력은 모든 함수 호출을 지원하는 모델에서 사용 가능  
  - 응답 형식 옵션은 최신 모델에서 사용 가능  
  
### GN⁺의 정리  
- OpenAI의 새로운 기능인 구조화된 출력은 JSON 스키마에 맞춰 모델 출력을 정확히 일치시키는 기능을 제공함  
- 개발자는 이를 통해 데이터 검색, 질문 응답, 데이터 추출 등 다양한 작업을 더 신뢰성 있게 수행할 수 있음  
- Python 및 Node SDK에서 네이티브로 지원되어 개발이 용이해짐  
- 비구조화된 데이터에서 구조화된 데이터를 추출하는 등 다양한 추가 사용 사례가 있음  
- 제약된 디코딩 기술을 사용하여 모델 출력을 제약하고, 유효한 JSON만 생성하도록 함

## Comments



### Comment 27852

- Author: bluejoyq
- Created: 2024-08-08T02:44:22+09:00
- Points: 1

흥미로운 기능이네요

### Comment 27836

- Author: neo
- Created: 2024-08-07T09:46:17+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41173223) 
- GPT-4o를 사용하여 동적 UI와 코드를 구축함
  - JSON 모드를 사용하여 안정적으로 작동함
  - GPT-4o-mini에서는 형식 문제를 해결하는 데 도움이 될 것임
  - 함수 호출 모드에서는 JSON 모드보다 성공률이 낮음
  - 이 기능에 대해 기대가 큼

- gpt-4o-2024-08-06의 주요 변경 사항
  - 출력 토큰이 4k에서 16k로 증가함
  - 입력 비용 50%, 출력 비용 33% 감소
  - API 사용자에게 중요한 변화임

- vLLM의 Outlines Structured Output 사용 경험
  - OpenAI의 Structured Output보다 더 발전된 기능 제공
  - 제한된 필드 타입 지원
    - OpenAI는 String, Number, Boolean 등 기본 타입만 지원함
    - Outlines는 정규 표현식 패턴을 정의할 수 있음
  - 높은 스키마 설정 비용과 지연 시간
    - vLLM과 Outlines는 거의 비용이 들지 않음
    - OpenAI는 문맥 없는 문법 생성에 시간이 걸림
  - OpenAI의 첫 단계로 좋은 출발이지만, 더 발전할 필요가 있음

- AI 성능에 대한 의견
  - AI가 출력 형식을 지정하는 것은 오래된 문제 해결 방식임
  - 자연어 처리와 문제 해결 능력은 놀라운 발전임
  - 그러나 이 결과를 얻기 위해 엄청난 계산이 필요함

- OpenAI의 접근 방식에 대한 의견
  - 구조화된 출력에 대한 미세 조정 접근 방식 포기
  - llama.cpp는 이미 1.5년 전에 이 기능을 구현함

- "strict: true" 옵션에 대한 혼란
  - 항상 원하는 동작이므로 기본값이어야 함
  - 제한된 디코딩 기술에 대해 배움
    - 신뢰성을 높이고 지연 시간을 줄일 수 있음

- JSON을 모델에 하드코딩하는 것이 AGI 목표와 반대 방향이라는 의견

- OpenAI 기능 사용 시 잠금 효과에 대한 우려
  - 다른 LLM으로 쉽게 이동할 수 없음
  - 텍스트 프롬프트가 충분하지 않을 때만 사용 권장

- JSON 형식 오류에 대한 지적
  - {“val{“:2}는 유효한 JSON임

- 최상위 레벨이 객체여야 하는 이유에 대한 의문
  - 배열을 객체로 감싸야 하는 불편함이 있음
