noticias

Preciso y 0 error, ingresa el precio y se romperá! La API del anuncio oficial de OpenAI admite salida estructurada, la precisión de JSON es del 100%

2024-08-07

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



  Nuevo informe de sabiduría

Editor: Departamento Editorial
[Introducción a la Nueva Sabiduría] ¡Buenas noticias para los programadores! El modelo API recientemente lanzado de OpenAI admite salida estructurada, la tasa de coincidencia del esquema JSON llega al 100% y el costo se reduce inmediatamente a la mitad.
¿Aún te estás devanando los sesos pensando en un montón de palabras clave y te duele la cabeza debido a los diversos resultados obtenidos después de una sola operación?
OpenAI finalmente escuchó la voz de las masas y proporcionó a los desarrolladores la característica número uno tan esperada.
OpenAI anunció hoy el lanzamiento de nuevas funciones y la API ChatGPT ahora admite salida estructurada JSON.
JSON (JavaScript Object Notation) es el estándar de la industria para formatos de intercambio de datos y archivos porque es fácil de leer para los humanos y fácil de analizar para las máquinas.
Sin embargo, LLM a menudo funciona en contra de JSON, produciendo a menudo alucinaciones, ya sea generando respuestas que solo siguen parcialmente las instrucciones o generando un montón de "libros celestiales" que no se pueden analizar completamente en absoluto.
Esto requiere que los desarrolladores utilicen múltiples herramientas de código abierto, prueben diferentes indicaciones o repitan solicitudes para generar el resultado deseado, lo que requiere mucho tiempo y trabajo.
La función de salida estructurada, lanzada hoy, resuelve los espinosos problemas anteriores y garantiza que la salida generada por el modelo coincida con el esquema especificado en JSON.
La función de salida estructurada siempre ha sido la característica número uno solicitada por los desarrolladores. Ultraman también afirmó en su tweet que esta versión se lanzó en respuesta a las solicitudes de los usuarios.
De hecho, las nuevas funciones lanzadas por OpenAI han llegado a los corazones de muchos desarrolladores y todos están de acuerdo en que "esto es un gran problema".
Mucha gente dejó mensajes expresando sus elogios, diciendo "¡Excelente!"
Algunos están contentos y otros tristes. Esta actualización de OpenAI ha hecho que la gente se preocupe de que se trague las nuevas empresas.
Sin embargo, para los usuarios más comunes, la pregunta que más les preocupa es cuándo se lanzará GPT-5. En cuanto al esquema JSON, "¿Qué es eso?"
Después de todo, sin las novedades de GPT-5, el DevDay de OpenAI de este otoño puede ser mucho más tranquilo que el año pasado.

Garantice fácilmente la coherencia del esquema

Con la salida estructurada, solo necesita definir un esquema JSON, y la IA ya no será "voluntaria" y generará datos obedientemente de acuerdo con las instrucciones.
Además, la nueva función no sólo hace que la IA sea más obediente, sino que también mejora en gran medida la confiabilidad del contenido de salida.
En la evaluación de seguimiento de esquemas JSON complejos, el nuevo modelo gpt-4o-2024-08-06 con salida estructurada recibió una puntuación perfecta del 100%. En comparación, gpt-4-0613 obtuvo una puntuación inferior al 40%.
De hecho, OpenAI lanzó la función JSON Schema en DevDay el año pasado.
Ahora, OpenAI ha ampliado esta funcionalidad en la API, asegurando que la salida generada por el modelo coincida exactamente con el esquema JSON proporcionado por el desarrollador.
Generar datos estructurados a partir de entradas no estructuradas es uno de los principales casos de uso de la inteligencia artificial en las aplicaciones actuales.
Los desarrolladores utilizan la API de OpenAI para crear asistentes potentes que pueden obtener datos y responder preguntas a través de llamadas a funciones, extraer datos estructurados para la entrada de datos y crear flujos de trabajo agentes de varios pasos, lo que permite que LLM tome medidas.

Principios técnicos

OpenAI adopta un enfoque doble para mejorar la coincidencia entre la salida del modelo y el esquema JSON.
Aunque el rendimiento del modelo ha mejorado significativamente, alcanzando una precisión del 93 % en las pruebas de referencia, la incertidumbre inherente permanece.
Para garantizar la estabilidad de las aplicaciones creadas por los desarrolladores, OpenAI proporciona un método de mayor precisión para limitar la salida del modelo, logrando así una confiabilidad del 100%.

Decodificación de restricciones

OpenAI utiliza una técnica llamada muestreo restringido o decodificación restringida. De forma predeterminada, el modelo genera resultados completamente sin restricciones, seleccionando potencialmente cualquier token del vocabulario como el siguiente resultado.
Esta flexibilidad puede provocar errores, como la inserción desordenada de caracteres no válidos al generar JSON válido.
Para evitar tales errores, OpenAI utiliza un método de decodificación de restricciones dinámicas para garantizar que el token de salida generado siempre se ajuste al esquema proporcionado.
Para lograr esto, OpenAI convierte el esquema JSON proporcionado en una gramática libre de contexto (CFG).
Para cada esquema JSON, OpenAI calcula una sintaxis que representa el esquema y accede de manera eficiente a los componentes preprocesados ​​durante el muestreo.
Este enfoque no sólo hace que el resultado generado sea más preciso sino que también reduce retrasos innecesarios. La primera solicitud de un nuevo esquema puede tener tiempo de procesamiento adicional, pero las solicitudes posteriores se responden rápidamente a través del mecanismo de almacenamiento en caché.

Opciones

Además del método CFG, otros métodos suelen utilizar máquinas de estados finitos (FSM) o expresiones regulares para decodificar restricciones.
Sin embargo, estos métodos tienen capacidades limitadas para actualizar dinámicamente tokens válidos. Especialmente para estructuras de datos complejas anidadas o recursivas, FSM suele ser difícil de manejar.
El método CFG de OpenAI funciona bien al expresar esquemas complejos. Por ejemplo, el esquema JSON que admite esquemas recursivos se implementa en la API de OpenAI, pero no se puede expresar mediante métodos FSM.

Ahorre la mitad del coste de los insumos

La salida estructurada está disponible para todos los modelos que admiten llamadas a funciones, incluidos los últimos modelos GPT-4o y GPT-4o-mini, así como modelos optimizados.
Esta función está disponible en la API de finalización de chat, la API de asistentes y la API de lotes y es compatible con la entrada visual.
En comparación con la versión gpt-4o-2024-05-13, la versión gpt-4o-2024-08-06 también es más rentable. Los desarrolladores pueden ahorrar el 50% del costo en el lado de la entrada ($2,50/1 millón de token). , ahorrando un 33% del costo en el extremo de salida ($10,00/1 millón de token).

Cómo utilizar resultados estructurados

Hay dos formas que se pueden utilizar para introducir resultados estructurados en la API:

Llamada de función

La salida estructurada a través de herramientas se puede lograr estableciendo estricto: verdadero en la definición de la función.
Esta función está disponible en todos los modelos con herramientas compatibles, incluidos todos los modelos gpt-4-0613 y gpt-3.5-turbo-0613 y superiores.
Cuando la salida estructurada está habilitada, la salida del modelo coincidirá con la definición de herramienta proporcionada.
Solicitud de ejemplo:
Salida de ejemplo:
{
  "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"
}

Nuevas opciones para el parámetro Response_Format

Los desarrolladores ahora pueden elegir si requieren salida formateada a través de la nueva opción json_schema de Response_Format.
Esta característica es útil cuando el modelo no invoca herramientas, sino que responde al usuario de forma estructurada.
Esta función está disponible para los últimos modelos GPT-4o: gpt-4o-2024-08-06 y gpt-4o-mini-2024-07-18 lanzados hoy.
Cuando respuesta_formato se establece en estricto: verdadero, la salida del modelo coincidirá con el esquema proporcionado.
Solicitud de ejemplo:
Salida de ejemplo:
{
  "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"
}
Los desarrolladores pueden generar respuestas paso a paso utilizando resultados estructurados para guiar el resultado deseado.
Según OpenAI, los desarrolladores no necesitan validar ni volver a intentar respuestas con formato incorrecto, y la función permite indicaciones más simples.

Soporte nativo de SDK

OpenAI dice que sus SDK de Python y Node se han actualizado para admitir de forma nativa salida estructurada.
Proporcionar un esquema o formato de respuesta a una herramienta es tan fácil como proporcionar un objeto Pydantic o Zod. El SDK de OpenAI puede convertir tipos de datos a esquemas JSON compatibles, deserializar automáticamente respuestas JSON en estructuras de datos tipificadas y analizar rechazos.
Además, el soporte nativo de salida estructurada también está disponible para Response_Format.

Otros casos de uso

Los desarrolladores utilizan con frecuencia los modelos de OpenAI para generar datos estructurados para una variedad de casos de uso.
Algunos otros ejemplos incluyen:
-Generar dinámicamente una interfaz de usuario basada en la intención del usuario.
Los desarrolladores pueden utilizar resultados estructurados para crear código o aplicaciones de generación de UI.
Usando el mismo formato de respuesta, se pueden generar diferentes UI en función de la entrada del usuario.
Por ejemplo, cree una "Interfaz de inicio de sesión del jardinero":
Se genera con el siguiente código:
{
  "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" }]
}
- Separar las respuestas finales del razonamiento de apoyo o comentarios adicionales.
Proporcionar al modelo un campo de cadena de pensamiento separado puede mejorar la calidad final de la respuesta.
preguntar:
Salida estructurada:
{
  "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."
}
- Extraer datos estructurados de datos no estructurados.
Por ejemplo, indique al modelo que extraiga cosas como tareas pendientes, fechas límite y tareas de las notas de la reunión.
preguntar:
Salida estructurada:
{
  "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"
    }
  ]
}
Salida estructurada segura
La seguridad es una prioridad absoluta para OpenAI: la nueva función de salida estructurada cumplirá con las políticas de seguridad existentes de OpenAI y aún permitirá que los modelos rechacen solicitudes inseguras.
Para facilitar el desarrollo, hay un nuevo valor de cadena de rechazo en las respuestas de API que permite a los desarrolladores detectar mediante programación si un modelo genera rechazos en lugar de resultados que coinciden con el esquema.
Cuando la respuesta no contiene un rechazo y la respuesta del modelo no se interrumpe prematuramente (como lo indica Finish_reason), la respuesta del modelo producirá de manera confiable un JSON válido que coincida con el esquema proporcionado.
Referencias: