OpenAI - OpenAI DevDay 2024 | Structured outputs for reliable applications
OpenAI는 2023년 8월 API에 구조화된 출력 기능을 도입하여 개발자가 LLM을 통해 신뢰할 수 있는 JSON 출력을 생성할 수 있도록 했습니다. 이 기능은 JSON 스키마에 맞춰 출력을 생성하도록 모델을 제약하며, 개발자가 원하는 형식으로 데이터를 정확하게 추출할 수 있게 합니다. 예를 들어, 개인 비서 앱에서 사용자의 명령을 API 호출로 변환할 때, JSON 객체로 정확하게 변환하여 오류를 줄일 수 있습니다. 또한, 이 기능은 함수 호출과 응답 형식 매개변수 두 가지 모드로 제공되며, 각각의 모드는 개발자가 LLM을 통해 기능을 연결하거나 사용자에게 직접 응답할 때 유용합니다. 구조화된 출력은 개발자가 복잡한 스키마를 정의하고, 모델이 이를 정확히 따르도록 하여, 데이터 추출의 신뢰성을 높이고, 에이전트 워크플로우의 신뢰성을 100%로 보장합니다. 이를 통해 개발자는 더 나은 AI 애플리케이션을 구축할 수 있습니다.
Key Points:
- 구조화된 출력은 JSON 스키마에 맞춰 정확한 출력을 보장합니다.
- 함수 호출과 응답 형식 매개변수 두 가지 모드로 제공됩니다.
- 개발자는 복잡한 스키마를 정의하여 데이터 추출의 신뢰성을 높일 수 있습니다.
- 에이전트 워크플로우의 신뢰성을 100%로 보장합니다.
- 개발자는 더 나은 AI 애플리케이션을 구축할 수 있습니다.
Details:
1. 🚀 새로운 기능 소개: 구조화된 출력
- OpenAI API에 구조화된 출력 기능이 도입됨으로써 개발자들이 LLMs와 작업하는 데 있어 큰 진전을 이루었다.
- 이 기능은 개발자들이 더 정교하고 명확한 데이터를 얻을 수 있도록 지원하며, 특히 복잡한 데이터 구조를 다룰 때 유용하다.
- 구조화된 출력은 API 응답을 JSON 형식으로 제공하여, 개발자들이 데이터를 쉽게 파싱하고 활용할 수 있게 한다.
- 예를 들어, 고객 세분화나 개인화된 추천 시스템을 구축할 때 이 기능을 활용하면 정확성과 효율성을 크게 향상시킬 수 있다.
- 이러한 기능은 개발자들이 AI 모델을 더 쉽게 통합하고, 다양한 산업에서 혁신적인 솔루션을 개발하는 데 기여할 수 있다.
2. 🔍 구조화된 출력의 필요성과 작동 원리
2.1. 개발자 통합
2.2. API 디자인 리더십
2.3. API 기술 리더십
2.4. 구조화된 출력의 필요성 및 작동 원리
3. 📜 GPT-3에서 GPT-4로: 발전의 여정
- 2020년에 OpenAI는 GPT-3를 출시하여 이메일 작성, 블로그 게시물 초안 작성, 영화 대본 생성 등 텍스트 생성에 뛰어난 성능을 보였습니다.
- 개발자들은 AI Dungeon과 같은 게임 스크립트 생성, copy.ai와 같은 마케팅 자료 초안 작성 등 새로운 응용 프로그램을 빠르게 발견했습니다.
- 2023년에 GPT-4가 출시되면서 LLM 지능에서 새로운 돌파구를 마련했습니다.
- GPT-4는 고급 추론, 복잡한 지침 따르기, 긴 문서에서 정보 추출, 사용자 대신 행동 수행이 가능해졌습니다.
4. 🛠️ 개발자들이 직면한 문제와 해결책
- 개발자들은 CURSOR와 같은 AI 기반 생산성 도구를 구축하여 다음 단계로 발전시켰습니다.
- 이러한 제품들은 모두 LLMs를 외부 세계와 연결하는 공통점을 가지고 있었습니다.
- 코드 베이스에서 외부 API 또는 장치 내 작업으로 연결되었습니다.
- 이를 위해 출력이 구조화되어야 했으며, 일반적으로 JSON 형식이 필요했습니다.
- 개인 비서를 구축하고 사용자의 메시지를 API 호출로 변환하려는 경우를 예로 들 수 있습니다.
- 사용자가 '비틀즈를 재생해줘'라고 말하면, API를 위한 JSON 객체가 필요합니다.
- 그러나 종종 개발자에게는 JSON만 필요한데, 불필요한 텍스트가 포함된 경우가 많습니다.
5. 🔧 기능 호출과 JSON 모드의 한계
- LLM 출력은 항상 신뢰할 수 없으며, 이를 통합하는 데 어려움이 있음.
- 개발자들은 다양한 방법을 시도했으나, 완벽한 해결책은 아님.
- 작년 6월 기능 호출을 도입하여 JSON 스키마를 사용해 도구를 정의할 수 있게 함.
- 모델이 JSON 스키마에 맞춰 출력을 생성하지만, 종종 잘못된 JSON을 출력함.
- 작년 11월 DevDay에서 JSON 모드를 출시하여 유효한 JSON 출력을 보장함.
- 그러나 여전히 잘못된 타입 출력이나 파라미터 환각 문제가 발생함.
- AI 애플리케이션은 신뢰할 수 있는 출력이 필요하며, 이를 위해 8월에 API에 구조화된 출력을 도입함.
6. 🆕 구조화된 출력의 도입과 이점
- 구조화된 출력은 개발자가 제공한 JSON 스키마와 정확히 일치하는 출력을 생성하도록 설계된 새로운 기능입니다.
- 이 기능은 모델에게 스키마를 사용하도록 제안하는 것과 이를 강제하는 것의 차이를 제공합니다.
- 개발자는 더 이상 요청할 필요 없이 필요한 JSON 스키마를 제공할 수 있습니다.
- 이 솔루션이 문제를 해결하는 올바른 방법인지에 대한 의문이 있을 수 있지만, 이는 성능과 대규모 추론을 위한 솔루션을 구축하는 데 시간이 걸렸기 때문입니다.
- 구조화된 출력은 함수 호출이 종종 올바른 추상화라고 믿으며, 성능을 유지하면서 출력을 제한하는 솔루션을 구축하는 데 시간이 걸렸습니다.
7. 💡 API에서의 구조화된 출력 사용법
- API에서 구조화된 출력은 두 가지 모드로 제공됩니다. 첫 번째는 함수 호출로, 이는 개발자가 LLM을 애플리케이션의 기능성과 연결할 수 있게 합니다.
- 두 번째 모드는 응답 형식 매개변수로, 모델이 사용자에게 직접 응답할 때 유용합니다.
- 함수 호출을 사용할 때, JSON 스키마를 도구 섹션에 제공하며, 함수의 매개변수를 설정합니다.
- 예를 들어, 'get weather' 함수는 'location'과 'unit'이라는 두 가지 매개변수를 가지며, 이는 문자열 타입입니다.
- 구조화된 출력을 활성화하려면 코드 한 줄로 strict를 true로 설정하면 됩니다. 이는 제공된 스키마를 사용하여 항상 모델의 응답이 이를 따르도록 보장합니다.
- 구조화된 출력의 두 모드는 개발자가 API와의 상호작용을 보다 효율적으로 관리할 수 있게 하며, 특히 복잡한 데이터 구조를 다룰 때 유용합니다.
8. 👓 AI 안경 스타트업 사례 연구
- AI 안경 제품은 Open AI API를 기반으로 하며, 스템에 스피커와 AR 스크린이 포함되어 있어 사용자에게 답변을 읽어줌.
- 내부 관리 대시보드를 통해 주문 정보와 배송 상태를 확인할 수 있도록 데이터베이스와 연결된 어시스턴트를 개발 중.
- SQL 데이터베이스 쿼리 기능을 만들어 어시스턴트가 주문 정보를 조회할 수 있도록 설정.
- 데이터베이스는 'orders' 테이블과 여러 컬럼을 지원하며, 조건부 쿼리를 위한 연산자(=, >, <, !=)를 제공.
- ORM의 제한으로 인해 '>=' 연산자가 작동하지 않으므로, 'strict' 옵션을 사용하여 모델이 제공된 연산자만 사용하도록 설정하여 오류를 방지.
- 구조화된 출력은 애플리케이션의 오류를 줄이는 데 효과적이며, '>=' 대신 '>' 연산자를 사용하여 8월 마지막 날 이후의 데이터를 정확히 조회.
9. 🎨 응답 형식과 JSON 모드의 차이점
- 과거에는 모델이 JSON으로 응답하도록 하기 위해 JSON 모드를 사용했으나, 구조화된 출력으로 전환하여 응답 형식 매개변수에 지시사항을 이동함으로써 항상 일관된 형식을 유지할 수 있음.
- AI 안경 스타트업의 예시에서, 음성 출력과 렌즈에 요약된 버전을 표시하기 위해 응답 형식 매개변수를 사용하여 모델이 항상 두 가지 키를 따르도록 함.
- 음성 출력은 TTS를 통해 소리 내어 읽히며, 숫자와 약어를 완전히 작성하도록 지시함.
- 디스플레이 속성은 안경의 공간 제약으로 인해 5단어로 제한됨.
- 응답 형식 옵션에서 스키마를 붙여넣고 strict를 true로 설정하여 구조화된 출력을 활성화함.
- 기린의 키와 같은 일반적인 질문에 대해 테스트한 결과, 요청한 형식으로 출력이 제공됨.
10. 🏢 Convex: AI 채용 도구의 활용
- Convex는 AI 기반의 채용 도구로, 채용 공고 작성, 추천 제출, 인터뷰 일정 조율을 지원합니다.
- Convex는 이력서에서 정보를 추출하고, 후보자 데이터에 대한 쿼리를 수행하기 위해 함수 호출을 사용합니다.
- 모델은 구조화된 출력을 사용하여 PDF 내 텍스트에서 정보를 실시간으로 추출합니다.
- JSON 객체를 사용하여 이름, 직함, 위치, 연락처 정보, 경력 등을 이력서에서 추출합니다.
- Zod 라이브러리를 사용하여 스키마를 정의하고, OpenAI 노드 SDK는 Zod를 네이티브로 지원합니다.
- OpenAI Python SDK는 Pydantic을 네이티브로 지원합니다.
- GitHub 사용자 이름과 같은 추가 필드를 쉽게 추가할 수 있습니다.
- 함수 호출을 통해 UI를 제어하고, 특정 위치에 기반한 후보자 필터링을 수행할 수 있습니다.
11. 📊 UI 생성 및 에이전트 워크플로우
11.1. 기능 정의 및 구조화된 출력 사용
11.2. 후보자 경험 연수에 따른 그래프 생성
11.3. UI 생성 도구 및 스키마 정의
11.4. 인터뷰 일정 예약 워크플로우
11.5. 구조화된 출력의 중요성
12. 🔍 구조화된 출력의 실제 적용 사례
- 비구조화된 데이터에서 정보를 추출하기 위해 응답 형식을 사용할 수 있습니다. 예를 들어, 고객 피드백에서 특정 키워드를 자동으로 식별하여 분류하는 시스템을 구축할 수 있습니다.
- UI 생성을 위해 함수 호출을 사용할 수 있습니다. 이는 사용자 인터페이스를 자동으로 생성하여 개발 시간을 50% 단축할 수 있습니다.
- 100% 신뢰성을 갖춘 에이전트 워크플로우를 구축할 수 있습니다. 이는 오류를 최소화하고 작업 효율성을 40% 향상시킵니다.
13. 🔧 구조화된 출력의 엔지니어링 구현
13.1. 연구와 엔지니어링의 통합 접근법
13.2. 구조화된 출력의 중요성
13.3. 제약 디코딩 접근법
13.4. LLM 추론
13.5. 모델 예시: 숫자 인식
13.6. 대규모 언어 모델의 작동 방식
14. 🧠 LLM 추론과 토큰 마스킹
14.1. 토큰의 정의와 역할
14.2. GPT-4 토크나이저의 실제 토큰
14.3. 구조화된 출력과 스키마
14.4. 토큰 마스킹 기법
14.5. 자기회귀 모델의 특성
14.6. 빠른 추론을 위한 최적화
15. ⚙️ JSON 스키마와 구문 분석
- 각 배치에 대해 확률을 계산하고 토큰 마스크를 적용한 후 최종 확률 분포에서 샘플링을 수행합니다. 이는 병렬로 수행되어 GPU 자원을 절약할 수 있습니다.
- 마스크 결정은 CPU에서 수행되어 속도를 유지하는 데 도움이 됩니다. 이는 모델 크기에 따라 다르며, 토큰 간 시간을 10밀리초 이하로 유지해야 합니다.
- 유효한 토큰을 사전 계산하여 샘플링 시 재사용함으로써 계산을 조회처럼 간단하게 만듭니다. 이는 SQL 데이터베이스에서 인덱스를 구축하여 쿼리를 빠르게 하는 것과 유사합니다.
- JSON 스키마를 문법으로 변환하고, 문법을 통해 파서를 생성하여 문자열이 해당 언어의 일부인지 확인할 수 있습니다. 파서는 JSON 블롭을 입력받아 스키마와 일치하는지 여부를 알려줍니다.
- 모든 토큰과 가능한 상태를 반복하여 유효한 토큰을 결정하고 인덱스를 구축합니다. 인덱스는 O(1) 조회를 가능하게 하는 트리 구조로, 추론 시 빠른 조회를 지원합니다.
- 인덱스 생성은 계산 비용이 크지만, 한 번 생성 후 캐시하여 빠른 조회를 제공합니다. 구조화된 출력에 대한 첫 번째 쿼리는 10초 이내의 시간이 걸릴 수 있지만, 이후 쿼리는 매우 빠릅니다.
16. 🔄 CFG 접근법과 재귀적 스키마 지원
16.1. 정규 표현식의 한계
16.2. CFG 접근법의 장점과 구현 도전 과제
17. 🔬 연구와 엔지니어링의 결합
- LLM 추론에서 구조화된 출력에 대한 엔지니어링 측면을 설명하며, JSON 스키마의 광범위한 하위 집합을 지원하여 개발자에게 최적의 트레이드오프를 제공함.
- 모델이 형식에 맞춰 더 잘 작동하도록 연구를 통해 개선하였으며, 특히 JSON 스키마와 복잡한 스키마를 이해하도록 훈련함.
- 모델의 정확도가 지난 1년간 약 26%에서 86%로 향상되었으며, 최신 모델에서는 프롬프트만으로 85%의 정확도를 달성하고, 새로 훈련된 응답 형식을 추가하면 93%로 향상됨.
- 제약된 디코딩을 사용하여 정확도를 100%로 향상시킬 수 있으며, 이는 연구와 엔지니어링의 결합을 통해 최상의 결과를 도출함.
18. 📐 API 설계의 주요 결정
- 추가 속성: 기본적으로 JSON 스키마는 모든 추가 속성을 허용하지만, OpenAI API에서는 기본적으로 추가 속성을 허용하지 않기로 결정하여 런타임 오류를 방지함.
- 필수 속성: JSON 스키마에서는 모든 속성이 선택 사항이지만, OpenAI API에서는 모든 속성을 기본적으로 필수로 설정하여 개발자 기대치를 맞춤.
- 속성 순서: JSON 스키마는 속성 순서에 제약이 없지만, LLM의 맥락에서는 속성 순서가 중요하므로 스키마에 정의된 순서대로 필드를 생성하도록 결정함.
19. 🎉 개발자와의 협력과 미래 비전
- OpenAI API의 엔지니어링 및 연구 작업은 결합될 때 최고의 결과를 제공합니다.
- 개발자를 위한 사용이 쉬운 API를 만들기 위해 구조화된 출력과 같은 문제를 해결하고자 합니다.
- 구조화된 출력은 AI 애플리케이션의 전체 잠재력을 해제하는 마지막 퍼즐 조각으로 간주됩니다.
- 데이터 추출이 신뢰할 수 있게 되었고, 함수 호출은 필요한 매개변수를 갖추게 되었습니다.
- 구조화된 출력이 도입된 이후, Shopify와 같은 고객은 환각을 줄이고 애플리케이션의 신뢰성을 향상시켰습니다.
- OpenAI의 사명은 모든 사람을 위한 안전한 AGI를 구축하는 것이며, 개발자와의 협력이 그 사명을 달성하는 데 중요합니다.