11P by neo 1달전 | favorite | 댓글 2개
  • 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만 생성하도록 함

흥미로운 기능이네요

Hacker News 의견
  • 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임
  • 최상위 레벨이 객체여야 하는 이유에 대한 의문

    • 배열을 객체로 감싸야 하는 불편함이 있음