Новости

Точно и 0 ошибок, введите цену и она сломается! Официальное объявление OpenAI API поддерживает структурированный вывод, точность JSON составляет 100%.

2024-08-07

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



  Новый отчет мудрости

Редактор: Редакционный отдел
[Введение в новую мудрость] Хорошие новости для программистов! Недавно запущенный API-интерфейс модели OpenAI поддерживает структурированный вывод, степень соответствия схемы JSON достигает 100%, а стоимость сразу снижается вдвое.
Все еще ломаете голову над тем, чтобы придумать кучу подсказок, и у вас болит голова из-за различных результатов вывода после одной операции?
OpenAI наконец-то услышала голос масс и предоставила разработчикам долгожданную функцию №1.
Сегодня OpenAI объявила о запуске новых функций, а API ChatGPT теперь поддерживает структурированный вывод JSON.
JSON (нотация объектов JavaScript) является отраслевым стандартом для форматов обмена файлами и данными, поскольку его легко читать людям и легко анализировать машинам.
Однако LLM часто работает против JSON, часто вызывая галлюцинации, либо генерируя ответы, которые лишь частично следуют инструкциям, либо генерируя кучу «небесных книг», которые вообще невозможно полностью разобрать.
Это требует от разработчиков использовать несколько инструментов с открытым исходным кодом, пробовать разные подсказки или повторять запросы для получения желаемого результата, что отнимает много времени и труда.
Функция структурированного вывода, выпущенная сегодня, решает вышеуказанные сложные проблемы и гарантирует, что выходные данные, сгенерированные моделью, соответствуют схеме, указанной в JSON.
Функция структурированного вывода всегда была функцией номер один, запрошенной разработчиками. Ultraman также заявил в своем твите, что эта версия была выпущена в ответ на запросы пользователей.
Новые функции, выпущенные OpenAI, действительно поразили сердца многих разработчиков, и все они согласны с тем, что «это большое дело».
Многие люди оставляли сообщения, выражая свою похвалу, называя «Отлично!»
Некоторые довольны, некоторые опечалены. Это обновление OpenAI заставило людей беспокоиться, что оно поглотит стартапы.
Однако более обычных пользователей больше волнует вопрос: когда будет выпущен GPT-5? Что касается схемы JSON: «Что это?»
В конце концов, без новостей о GPT-5 DevDay OpenAI этой осенью может пройти намного спокойнее, чем в прошлом году.

Легко обеспечить согласованность схемы

При структурированном выводе вам нужно лишь определить схему JSON, и ИИ больше не будет «своенравным» и послушно выводить данные согласно инструкциям.
Более того, новая функция не только делает ИИ более послушным, но и значительно повышает надежность вывода контента.
При оценке отслеживания сложной схемы JSON новая модель gpt-4o-2024-08-06 со структурированным выводом получила высший балл 100%. Для сравнения, gpt-4-0613 набрал менее 40%.
Фактически, функция JSON Schema была запущена OpenAI на DevDay в прошлом году.
Теперь OpenAI расширила эту функциональность в API, гарантируя, что выходные данные, сгенерированные моделью, точно соответствуют схеме JSON, предоставленной разработчиком.
Генерация структурированных данных из неструктурированных входных данных — один из основных вариантов использования искусственного интеллекта в современных приложениях.
Разработчики используют API OpenAI для создания мощных помощников, которые могут получать данные и отвечать на вопросы посредством вызовов функций, извлекать структурированные данные для ввода данных и создавать многоэтапные агентные рабочие процессы, позволяя LLM принимать меры.

Технические принципы

OpenAI использует двусторонний подход для улучшения соответствия между выходными данными модели и схемой JSON.
Хотя производительность модели значительно улучшилась, достигнув точности 93% в тестах производительности, присущая ей неопределенность остается.
Чтобы обеспечить стабильность приложений, созданных разработчиками, OpenAI предоставляет более точный метод ограничения выходных данных модели, тем самым достигая 100% надежности.

Декодирование ограничений

OpenAI использует метод, называемый ограниченной выборкой или ограниченным декодированием. По умолчанию модель генерирует выходные данные совершенно без ограничений, потенциально выбирая любой токен из словаря в качестве следующего результата.
Такая гибкость может привести к ошибкам, например к случайной вставке недопустимых символов при создании допустимого JSON.
Чтобы избежать таких ошибок, OpenAI использует метод декодирования динамических ограничений, чтобы гарантировать, что сгенерированный выходной токен всегда соответствует предоставленной схеме.
Для этого OpenAI преобразует предоставленную схему JSON в контекстно-свободную грамматику (CFG).
Для каждой схемы JSON OpenAI вычисляет синтаксис, представляющий схему, и эффективно обращается к предварительно обработанным компонентам во время выборки.
Такой подход не только делает генерируемые выходные данные более точными, но и уменьшает ненужные задержки. Первый запрос новой схемы может потребовать дополнительного времени обработки, но последующие запросы обрабатываются быстро посредством механизма кэширования.

Параметры

Помимо метода CFG, другие методы обычно используют конечные автоматы (FSM) или регулярные выражения для декодирования ограничений.
Однако эти методы имеют ограниченные возможности динамического обновления действительных токенов. FSM часто бывает трудно обрабатывать, особенно в случае сложных вложенных или рекурсивных структур данных.
Метод OpenAI CFG хорошо работает при выражении сложных схем. Например, схема JSON, поддерживающая рекурсивные схемы, реализована в API OpenAI, но не может быть выражена с помощью методов FSM.

Сэкономьте половину входных затрат

Структурированный вывод доступен для всех моделей, поддерживающих вызовы функций, включая новейшие модели GPT-4o и GPT-4o-mini, а также модели с тонкой настройкой.
Эта функция доступна в API Chat Completions API, Assistants API и Batch API и совместима с визуальным вводом.
По сравнению с версией gpt-4o-2024-05-13, версия gpt-4o-2024-08-06 также более экономична. Разработчики могут сэкономить 50 % стоимости на стороне ввода (2,50 доллара США/1 миллион токенов). , экономя 33% стоимости на выходе (10,00 долларов США/1 миллион токенов).

Как использовать структурированный вывод

Существует две формы, которые можно использовать для представления структурированного вывода в 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

Теперь разработчики могут выбирать, требовать ли форматированный вывод с помощью новой опции json_schema в response_format.
Эта функция полезна, когда модель не вызывает инструменты, а структурированно отвечает пользователю.
Эта функция доступна для последних моделей 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 сообщает, что их SDK Python и Node были обновлены для поддержки структурированного вывода.
Предоставить схему или формат ответа для инструмента так же просто, как предоставить объект Pydantic или Zod SDK OpenAI, который может преобразовывать типы данных в поддерживаемые схемы JSON, автоматически десериализовать ответы JSON в типизированные структуры данных и анализировать отклонения.
Кроме того, для response_format также доступна встроенная поддержка структурированного вывода.

Другие варианты использования

Разработчики часто используют модели OpenAI для создания структурированных данных для различных вариантов использования.
Некоторые другие примеры включают в себя:
-Динамическое создание пользовательского интерфейса на основе намерений пользователя.
Разработчики могут использовать структурированный вывод для создания приложений для создания кода или пользовательского интерфейса.
Используя один и тот же формат ответа, можно создавать разные пользовательские интерфейсы на основе пользовательского ввода.
Например, создайте «Интерфейс входа в систему садовника»:
Он генерируется с помощью следующего кода:
{
  "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, соответствующий предоставленной схеме.
Использованная литература: