소식

정확하고 오류가 없습니다. 가격을 입력하면 깨집니다! OpenAI 공식 발표 API는 구조화된 출력을 지원하며 JSON 정확도는 100%입니다.

2024-08-07

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina



  새로운 지혜 보고서

편집자: 편집부
[새로운 지혜 소개] 프로그래머를 위한 좋은 소식! OpenAI가 새로 출시한 모델 API는 모두 구조화된 출력을 지원하고 JSON 스키마 일치율은 최대 100%이며 비용은 즉시 절반으로 절감됩니다.
아직도 수많은 프롬프트 단어를 생각하느라 머리를 쥐어짜고, 한 번의 작업 후에도 다양한 출력 결과로 인해 두통을 겪고 계십니까?
OpenAI는 마침내 대중의 목소리를 듣고 오랫동안 기다려온 1위 기능을 개발자에게 제공했습니다.
OpenAI는 오늘 새로운 기능의 출시를 발표했으며 이제 ChatGPT API는 JSON 구조 출력을 지원합니다.
JSON(JavaScript Object Notation)은 사람이 읽기 쉽고 기계가 구문 분석하기 쉽기 때문에 파일 및 데이터 교환 형식에 대한 업계 표준입니다.
그러나 LLM은 종종 JSON에 대해 작동하여 종종 환각을 생성하고 지침을 부분적으로만 따르는 응답을 생성하거나 완전히 구문 분석할 수 없는 일련의 "천국의 책"을 생성합니다.
이를 위해서는 개발자가 여러 오픈 소스 도구를 사용하고, 원하는 출력을 생성하기 위해 다양한 프롬프트를 시도하거나 요청을 반복해야 하는데, 이는 시간이 많이 걸리고 노동 집약적입니다.
오늘 출시된 구조화된 출력 기능은 위의 까다로운 문제를 해결하고 모델에서 생성된 출력이 JSON에 지정된 스키마와 일치하는지 확인합니다.
구조화된 출력 기능은 항상 개발자들이 가장 많이 요청한 기능이었습니다. 또한 Ultraman은 자신의 트윗에서 이 버전이 사용자의 요청에 따라 출시되었다고 밝혔습니다.
OpenAI가 출시한 새로운 기능은 실제로 많은 개발자의 마음을 사로잡았으며 모두 "이것은 대단한 일이다"라는 데 동의합니다.
많은 분들이 "훌륭해요!"라며 칭찬의 메시지를 남겨주셨습니다.
누군가는 기쁘고 누군가는 슬프다. 이번 OpenAI 업데이트로 인해 스타트업을 집어삼킬까 걱정이 된다.
하지만 일반 사용자들이 더 걱정하는 질문은 GPT-5가 언제 출시될 것인가이다. JSON Schema의 경우 "그게 뭐야?"
결국, GPT-5 소식이 없다면 올 가을 OpenAI의 DevDay는 작년보다 훨씬 조용할 수도 있습니다.

스키마 일관성을 쉽게 보장

구조화된 출력을 사용하면 JSON 스키마만 정의하면 되며 AI는 더 이상 지침에 따라 "의도적으로" 순종적으로 데이터를 출력하지 않습니다.
또한, 새로운 기능은 AI를 더욱 순종적으로 만들 뿐만 아니라 출력 콘텐츠의 신뢰성도 크게 향상시킵니다.
복잡한 JSON 스키마의 추적 평가에서 구조화된 출력을 갖춘 새로운 모델 gpt-4o-2024-08-06이 100% 만점을 받았습니다. 이에 비해 gpt-4-0613은 40% 미만의 점수를 받았습니다.
실제로 JSON 스키마 기능은 작년 DevDay에서 OpenAI에 의해 출시되었습니다.
이제 OpenAI는 API에서 이 기능을 확장하여 모델에서 생성된 출력이 개발자가 제공한 JSON 스키마와 정확하게 일치하는지 확인합니다.
구조화되지 않은 입력에서 구조화된 데이터를 생성하는 것은 오늘날 애플리케이션에서 인공 지능의 핵심 사용 사례 중 하나입니다.
개발자는 OpenAI API를 사용하여 함수 호출을 통해 데이터를 얻고 질문에 답할 수 있는 강력한 도우미를 구축하고, 데이터 입력을 위해 구조화된 데이터를 추출하고, 다단계 에이전트 워크플로를 구축하여 LLM이 조치를 취할 수 있도록 합니다.

기술 원리

OpenAI는 모델 출력과 JSON 스키마 간의 일치를 개선하기 위해 두 가지 접근 방식을 취합니다.
모델 성능이 크게 향상되어 벤치마크 테스트에서 정확도가 93%에 도달했지만 본질적인 불확실성은 여전히 ​​남아 있습니다.
개발자가 구축한 애플리케이션의 안정성을 보장하기 위해 OpenAI는 모델의 출력을 제한하는 더 높은 정확도의 방법을 제공하여 100% 신뢰성을 달성합니다.

제약 조건 디코딩

OpenAI는 제한된 샘플링 또는 제한된 디코딩이라는 기술을 사용합니다. 기본적으로 모델은 완전히 제한되지 않은 출력을 생성하여 잠재적으로 어휘에서 토큰을 다음 출력으로 선택합니다.
이러한 유연성으로 인해 유효한 JSON을 생성할 때 잘못된 문자를 실수로 삽입하는 등의 오류가 발생할 수 있습니다.
이러한 오류를 방지하기 위해 OpenAI는 동적 제약 조건 디코딩 방법을 사용하여 생성된 출력 토큰이 항상 제공된 스키마를 준수하는지 확인합니다.
이를 달성하기 위해 OpenAI는 제공된 JSON 스키마를 CFG(컨텍스트 자유 문법)로 변환합니다.
각 JSON 스키마에 대해 OpenAI는 스키마를 나타내는 구문을 계산하고 샘플링 중에 전처리된 구성 요소에 효율적으로 액세스합니다.
이 접근 방식을 사용하면 생성된 출력이 더 정확해질 뿐만 아니라 불필요한 지연도 줄어듭니다. 새 스키마에 대한 첫 번째 요청에는 추가 처리 시간이 걸릴 수 있지만 후속 요청은 캐싱 메커니즘을 통해 신속하게 응답됩니다.

옵션

CFG 방법 외에도 다른 방법에서는 일반적으로 제약 조건 디코딩을 위해 FSM(Finite State Machine) 또는 정규식을 사용합니다.
그러나 이러한 방법에는 유효한 토큰을 동적으로 업데이트하는 기능이 제한되어 있습니다. 특히 복잡한 중첩 또는 재귀 데이터 구조의 경우 FSM을 처리하기 어려운 경우가 많습니다.
OpenAI의 CFG 방식은 복잡한 스키마를 표현할 때 좋은 성능을 발휘합니다. 예를 들어 재귀 스키마를 지원하는 JSON 스키마는 OpenAI API에서 구현되지만 FSM 방법을 통해 표현할 수는 없습니다.

투입 비용을 절반으로 절감

구조화된 출력은 최신 GPT-4o 및 GPT-4o-mini 모델과 미세 조정 모델을 포함하여 기능 호출을 지원하는 모든 모델에 사용할 수 있습니다.
이 기능은 Chat Completions API, Assistants API 및 Batch API에서 사용할 수 있으며 시각적 입력과 호환됩니다.
gpt-4o-2024-05-13 버전과 비교하여 gpt-4o-2024-08-06 버전은 비용 효율성도 더 높습니다. 개발자는 입력 측면에서 비용을 50% 절약할 수 있습니다($2.50/1M 토큰). , 출력단 비용의 33%를 절약합니다($10.00/1M 토큰).

구조화된 출력을 사용하는 방법

API에 구조화된 출력을 도입하는 데 사용할 수 있는 두 가지 형식이 있습니다.

함수 호출

도구를 통한 구조화된 출력은 함수 정의에서 strict: true를 설정하여 달성할 수 있습니다.
이 기능은 모든 모델 gpt-4-0613 및 gpt-3.5-turbo-0613 이상을 포함하여 지원되는 도구가 있는 모든 모델에서 사용할 수 있습니다.
구조화된 출력이 활성화되면 모델 출력이 제공된 도구 정의와 일치합니다.
요청 예시:
예제 출력:
{
  "table_name": "orders",
  "columns": ["id", "status", "expected_delivery_date", "delivered_at"],
  "conditions": [
    {
      "column": "status",
      "operator": "=",
      "value": "fulfilled"
    },
    {
      "column": "ordered_at",
      "operator": ">=",
      "value": "2023-05-01"
    },
    {
      "column": "ordered_at",
      "operator": "<",
      "value": "2023-06-01"
    },
    {
      "column": "delivered_at",
      "operator": ">",
      "value": {
        "column_name": "expected_delivery_date"
      }
    }
  ],
  "order_by": "asc"
}

response_format 매개변수에 대한 새로운 옵션

이제 개발자는 response_format의 새로운 옵션 json_schema를 통해 형식화된 출력을 요구할지 여부를 선택할 수 있습니다.
이 기능은 모델이 도구를 호출하지 않고 구조화된 방식으로 사용자에게 응답할 때 유용합니다.
이 기능은 오늘 출시된 최신 GPT-4o 모델인 gpt-4o-2024-08-06 및 gpt-4o-mini-2024-07-18에서 사용할 수 있습니다.
response_format이 strict:true로 설정되면 모델 출력이 제공된 스키마와 일치합니다.
요청 예시:
예제 출력:
{
  "steps": [
    {
      "explanation": "Subtract 31 from both sides to isolate the term with x.",
      "output": "8x + 31 - 31 = 2 - 31"
    },
    {
      "explanation": "This simplifies to 8x = -29.",
      "output": "8x = -29"
    },
    {
      "explanation": "Divide both sides by 8 to solve for x.",
      "output": "x = -29 / 8"
    }
  ],
  "final_answer": "x = -29 / 8"
}
개발자는 구조화된 출력을 사용하여 원하는 출력을 안내하는 단계별 답변을 생성할 수 있습니다.
OpenAI에 따르면 개발자는 잘못된 응답을 검증하거나 재시도할 필요가 없으며 이 기능을 통해 더 간단한 프롬프트가 가능합니다.

네이티브 SDK 지원

OpenAI는 Python 및 Node SDK가 구조화된 출력을 기본적으로 지원하도록 업데이트되었다고 말합니다.
도구에 스키마 또는 응답 형식을 제공하는 것은 Pydantic 또는 Zod 개체를 제공하는 것만큼 쉽습니다. OpenAI의 SDK는 데이터 유형을 지원되는 JSON 스키마로 변환하고 JSON 응답을 유형이 지정된 데이터 구조로 자동 역직렬화하고 거부를 구문 분석할 수 있습니다.
또한 response_format에 대한 기본 구조화된 출력 지원도 사용할 수 있습니다.

기타 사용 사례

개발자는 OpenAI의 모델을 사용하여 다양한 사용 사례에 맞는 구조화된 데이터를 생성하는 경우가 많습니다.
다른 예는 다음과 같습니다.
- 사용자 의도를 기반으로 사용자 인터페이스를 동적으로 생성합니다.
개발자는 구조화된 출력을 사용하여 코드 또는 UI 생성 애플리케이션을 만들 수 있습니다.
동일한 response_format을 사용하면 사용자 입력에 따라 다양한 UI를 생성할 수 있습니다.
예를 들어 "정원사의 로그인 인터페이스"를 생성합니다:
다음 코드로 생성됩니다.
{
  "type": "div",
  "label": "",
  "children": [
    {
      "type": "header",
      "label": "",
      "children": [
        {
          "type": "div",
          "label": "Green Thumb Gardening",
          "children": [],
          "attributes": [{ "name": "className", "value": "site-title" }]
        },
        {
          "type": "div",
          "label": "Bringing Life to Your Garden",
          "children": [],
          "attributes": [{ "name": "className", "value": "site-tagline" }]
        }
      ],
      "attributes": [{ "name": "className", "value": "header" }]
    },
    {
      "type": "section",
      "label": "",
      "children": [
        {
          "type": "div",
          "label": "",
          "children": [
            {
              "type": "div",
              "label": "About Us",
              "children": [
                {
                  "type": "div",
                  "label": "At Green Thumb Gardening, we specialize in transforming your outdoor spaces into beautiful, thriving gardens. Our team has decades of experience in horticulture and landscape design.",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "about-description" }
                  ]
                }
              ],
              "attributes": [{ "name": "className", "value": "about-section" }]
            }
          ],
          "attributes": [{ "name": "className", "value": "content" }]
        }
      ],
      "attributes": [{ "name": "className", "value": "about-container" }]
    },
    {
      "type": "section",
      "label": "",
      "children": [
        {
          "type": "div",
          "label": "",
          "children": [
            {
              "type": "div",
              "label": "Our Services",
              "children": [
                {
                  "type": "div",
                  "label": "Garden Design",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                },
                {
                  "type": "div",
                  "label": "Plant Care & Maintenance",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                },
                {
                  "type": "div",
                  "label": "Seasonal Cleanup",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                },
                {
                  "type": "div",
                  "label": "Custom Landscaping",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                }
              ],
              "attributes": [{ "name": "className", "value": "services-list" }]
            }
          ],
          "attributes": [{ "name": "className", "value": "content" }]
        }
      ],
      "attributes": [{ "name": "className", "value": "services-container" }]
    }
  ],
  "attributes": [{ "name": "className", "value": "landing-page" }]
}
- 최종 답변을 근거 있는 추론이나 추가 의견과 분리하세요.
모델에 별도의 사고 사슬 필드를 제공하면 응답의 최종 품질을 향상시킬 수 있습니다.
묻다:
구조화된 출력:
{
  "reasoning_steps": [
    "First step is to compare the numbers 9.11 and 9.9.",
    "Both numbers have the same whole number part, which is 9.",
    "To compare the decimal parts, convert them to the same number of decimal places.",
    "9.11 has two decimal places: it is 9.11.",
    "9.9 has one decimal place: it can be rewritten as 9.90.",
    "Now, compare 9.11 and 9.90 by looking at the decimal parts.",
    "Compare 11 with 90.",
    "90 is greater than 11, so 9.90 is greater than 9.11."
  ],
  "answer": "9.9 is bigger than 9.11."
}
- 비정형 데이터에서 정형 데이터 추출
예를 들어, 회의록에서 해야 할 일, 마감일, 과제 등을 추출하도록 모델에 지시하세요.
묻다:
구조화된 출력:
{
  "action_items": [
    {
      "description": "Collaborate on optimizing the path planning algorithm",
      "due_date": "2024-06-30",
      "owner": "Jason Li"
    },
    {
      "description": "Reach out to industry partners for additional datasets",
      "due_date": "2024-06-25",
      "owner": "Aisha Patel"
    },
    {
      "description": "Explore alternative LIDAR sensor configurations and report findings",
      "due_date": "2024-06-27",
      "owner": "Kevin Nguyen"
    },
    {
      "description": "Schedule extended stress tests for the integrated navigation system",
      "due_date": "2024-06-28",
      "owner": "Emily Chen"
    },
    {
      "description": "Retest the system after bug fixes and update the team",
      "due_date": "2024-07-01",
      "owner": "David Park"
    }
  ]
}
안전한 구조화된 출력
보안은 OpenAI의 최우선 과제입니다. 새로운 구조화된 출력 기능은 OpenAI의 기존 보안 정책을 준수하면서도 모델이 안전하지 않은 요청을 거부하도록 허용합니다.
보다 쉽게 ​​개발할 수 있도록 개발자가 모델이 스키마와 일치하는 출력 대신 거부를 생성하는지 여부를 프로그래밍 방식으로 감지할 수 있는 API 응답에 새로운 거부 문자열 값이 있습니다.
응답에 거부가 포함되어 있지 않고 모델의 응답이 조기에 중단되지 않은 경우(finish_reason으로 표시됨) 모델의 응답은 제공된 스키마와 일치하는 유효한 JSON을 안정적으로 생성합니다.
참고자료: