Nachricht

Genau und 0 Fehler, geben Sie den Preis ein und es wird kaputt gehen! Die offizielle Ankündigungs-API von OpenAI unterstützt strukturierte Ausgabe, die JSON-Genauigkeit beträgt 100 %

2024-08-07

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



  Neuer Weisheitsbericht

Herausgeber: Redaktion
[Einführung in die neue Weisheit] Gute Nachrichten für Programmierer! Die neu eingeführte Modell-API von OpenAI unterstützt vollständig die strukturierte Ausgabe, die Übereinstimmungsrate des JSON-Schemas liegt bei bis zu 100 % und die Kosten werden sofort um die Hälfte reduziert.
Zerbrechen Sie sich immer noch den Kopf, um an eine Reihe von Aufforderungswörtern zu denken, und haben Sie Kopfschmerzen aufgrund der unterschiedlichen Ausgabeergebnisse nach einer einzigen Operation?
OpenAI hörte endlich die Stimme der Massen und stellte Entwicklern das lang erwartete Feature Nr. 1 zur Verfügung.
OpenAI gab heute die Einführung neuer Funktionen bekannt und die ChatGPT-API unterstützt jetzt die strukturierte JSON-Ausgabe.
JSON (JavaScript Object Notation) ist der Industriestandard für Datei- und Datenaustauschformate, da es sowohl für Menschen leicht zu lesen als auch für Maschinen leicht zu analysieren ist.
Allerdings arbeitet LLM oft gegen JSON und erzeugt oft Halluzinationen, indem es entweder Antworten erzeugt, die den Anweisungen nur teilweise folgen, oder eine Menge „himmlischer Bücher“ generiert, die überhaupt nicht vollständig analysiert werden können.
Dies erfordert, dass Entwickler mehrere Open-Source-Tools verwenden, verschiedene Eingabeaufforderungen ausprobieren oder Anforderungen wiederholen, um die gewünschte Ausgabe zu generieren, was zeit- und arbeitsintensiv ist.
Die heute veröffentlichte Funktion für strukturierte Ausgabe löst die oben genannten heiklen Probleme und stellt sicher, dass die vom Modell generierte Ausgabe mit dem in JSON angegebenen Schema übereinstimmt.
Die strukturierte Ausgabefunktion war schon immer die von Entwicklern am häufigsten geforderte Funktion. Ultraman erklärte in seinem Tweet auch, dass diese Version als Reaktion auf Anfragen von Benutzern veröffentlicht wurde.
Die von OpenAI veröffentlichten neuen Funktionen haben tatsächlich die Herzen vieler Entwickler getroffen, und alle sind sich einig: „Das ist eine große Sache.“
Viele Menschen hinterließen Nachrichten, in denen sie ihr Lob zum Ausdruck brachten und „Ausgezeichnet!“ riefen.
Einige sind glücklich und andere traurig. Dieses Update von OpenAI hat die Befürchtung ausgelöst, dass es Startups verschlingen wird.
Für gewöhnlichere Benutzer stellt sich jedoch die Frage, wann GPT-5 veröffentlicht wird. Was das JSON-Schema betrifft: „Was ist das?“
Denn ohne die Neuigkeiten zu GPT-5 könnte der DevDay von OpenAI in diesem Herbst viel ruhiger verlaufen als im letzten Jahr.

Stellen Sie ganz einfach die Konsistenz des Schemas sicher

Bei der strukturierten Ausgabe müssen Sie nur ein JSON-Schema definieren, und die KI wird nicht mehr „vorsätzlich“ sein und die Daten gehorsam gemäß den Anweisungen ausgeben.
Darüber hinaus macht die neue Funktion die KI nicht nur gehorsamer, sondern verbessert auch die Zuverlässigkeit der Ausgabeinhalte erheblich.
Bei der Tracking-Bewertung komplexer JSON-Schemas erhielt das neue Modell gpt-4o-2024-08-06 mit strukturierter Ausgabe eine perfekte Punktzahl von 100 %. Im Vergleich dazu erreichte gpt-4-0613 weniger als 40 %.
Tatsächlich wurde die JSON-Schema-Funktion letztes Jahr am DevDay von OpenAI gestartet.
Jetzt hat OpenAI diese Funktionalität in der API erweitert und stellt so sicher, dass die vom Modell generierte Ausgabe genau mit dem vom Entwickler bereitgestellten JSON-Schema übereinstimmt.
Die Generierung strukturierter Daten aus unstrukturierten Eingaben ist einer der Kernanwendungsfälle künstlicher Intelligenz in heutigen Anwendungen.
Entwickler nutzen die OpenAI-API, um leistungsstarke Assistenten zu erstellen, die über Funktionsaufrufe Daten abrufen und Fragen beantworten, strukturierte Daten für die Dateneingabe extrahieren und mehrstufige Agenten-Workflows erstellen können, die es LLM ermöglichen, Maßnahmen zu ergreifen.

Technische Grundlagen

OpenAI verfolgt einen zweigleisigen Ansatz, um die Übereinstimmung zwischen Modellausgabe und JSON-Schema zu verbessern.
Obwohl sich die Modellleistung erheblich verbessert hat und in Benchmark-Tests eine Genauigkeit von 93 % erreicht wurde, bleibt die inhärente Unsicherheit bestehen.
Um die Stabilität der von Entwicklern erstellten Anwendungen sicherzustellen, bietet OpenAI eine Methode mit höherer Genauigkeit, um die Ausgabe des Modells einzuschränken und so eine 100-prozentige Zuverlässigkeit zu erreichen.

Einschränkungsdekodierung

OpenAI verwendet eine Technik namens „Constrained Sampling“ oder „Constrained Decoding“. Standardmäßig generiert das Modell völlig uneingeschränkte Ausgaben und wählt möglicherweise jedes beliebige Token aus dem Vokabular als nächste Ausgabe aus.
Diese Flexibilität kann zu Fehlern führen, wie zum Beispiel dem willkürlichen Einfügen ungültiger Zeichen beim Generieren von gültigem JSON.
Um solche Fehler zu vermeiden, verwendet OpenAI eine dynamische Einschränkungsdekodierungsmethode, um sicherzustellen, dass das generierte Ausgabetoken immer dem bereitgestellten Schema entspricht.
Um dies zu erreichen, konvertiert OpenAI das bereitgestellte JSON-Schema in eine kontextfreie Grammatik (CFG).
Für jedes JSON-Schema berechnet OpenAI eine Syntax, die das Schema darstellt und beim Sampling effizient auf die vorverarbeiteten Komponenten zugreift.
Dieser Ansatz macht die generierte Ausgabe nicht nur genauer, sondern reduziert auch unnötige Verzögerungen. Die erste Anfrage nach einem neuen Schema erfordert möglicherweise zusätzliche Verarbeitungszeit, nachfolgende Anfragen werden jedoch durch den Caching-Mechanismus schnell beantwortet.

Optionen

Zusätzlich zur CFG-Methode verwenden andere Methoden normalerweise Finite-State-Maschinen (FSM) oder reguläre Ausdrücke zur Einschränkungsdekodierung.
Diese Methoden verfügen jedoch nur über begrenzte Möglichkeiten zur dynamischen Aktualisierung gültiger Token. Insbesondere bei komplexen verschachtelten oder rekursiven Datenstrukturen ist FSM oft schwierig zu handhaben.
Die CFG-Methode von OpenAI eignet sich gut für die Darstellung komplexer Schemata. Beispielsweise ist ein JSON-Schema, das rekursive Schemata unterstützt, auf der OpenAI-API implementiert, kann jedoch nicht über FSM-Methoden ausgedrückt werden.

Sparen Sie die Hälfte der Inputkosten

Eine strukturierte Ausgabe ist für alle Modelle verfügbar, die Funktionsaufrufe unterstützen, einschließlich der neuesten GPT-4o- und GPT-4o-mini-Modelle sowie fein abgestimmter Modelle.
Diese Funktion ist auf der Chat Completions API, der Assistants API und der Batch API verfügbar und mit der visuellen Eingabe kompatibel.
Im Vergleich zur Version gpt-4o-2024-05-13 ist die Version gpt-4o-2024-08-06 außerdem kostengünstiger. Entwickler können 50 % der Kosten auf der Eingabeseite einsparen (2,50 $/1 Mio. Token). , wodurch 33 % der Kosten am Ausgabeende eingespart werden (10,00 $/1 Mio. Token).

So verwenden Sie strukturierte Ausgabe

Es gibt zwei Formen, mit denen eine strukturierte Ausgabe in die API eingeführt werden kann:

Funktionsaufruf

Eine strukturierte Ausgabe über Tools kann durch die Einstellung strict: true in der Funktionsdefinition erreicht werden.
Diese Funktion ist auf allen Modellen mit unterstützten Werkzeugen verfügbar, einschließlich aller Modelle gpt-4-0613 und gpt-3.5-turbo-0613 und höher.
Wenn die strukturierte Ausgabe aktiviert ist, stimmt die Modellausgabe mit der bereitgestellten Werkzeugdefinition überein.
Beispielanfrage:
Beispielausgabe:
{
  "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"
}

Neue Optionen für den Parameter „response_format“.

Entwickler können jetzt über die neue Option json_schema von Response_format auswählen, ob eine formatierte Ausgabe erforderlich sein soll.
Diese Funktion ist nützlich, wenn das Modell keine Tools aufruft, sondern strukturiert auf den Benutzer reagiert.
Diese Funktion ist für die neuesten GPT-4o-Modelle verfügbar: gpt-4o-2024-08-06 und gpt-4o-mini-2024-07-18, die heute veröffentlicht wurden.
Wenn „response_format“ auf strict:true festgelegt ist, stimmt die Modellausgabe mit dem bereitgestellten Schema überein.
Beispielanfrage:
Beispielausgabe:
{
  "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"
}
Entwickler können mithilfe einer strukturierten Ausgabe Schritt für Schritt Antworten generieren, um die gewünschte Ausgabe zu steuern.
Laut OpenAI müssen Entwickler fehlerhafte Antworten nicht validieren oder erneut versuchen, und die Funktion ermöglicht einfachere Eingabeaufforderungen.

Native SDK-Unterstützung

Laut OpenAI wurden die Python- und Node-SDKs aktualisiert, um strukturierte Ausgaben nativ zu unterstützen.
Das Bereitstellen eines Schemas oder Antwortformats für ein Tool ist so einfach wie das Bereitstellen eines Pydantic- oder Zod-Objekts. Das SDK von OpenAI kann Datentypen in unterstützte JSON-Schemas konvertieren, JSON-Antworten automatisch in typisierte Datenstrukturen deserialisieren und Ablehnungen analysieren.
Darüber hinaus ist auch native Unterstützung für die strukturierte Ausgabe für „response_format“ verfügbar.

Andere Anwendungsfälle

Entwickler verwenden häufig die Modelle von OpenAI, um strukturierte Daten für eine Vielzahl von Anwendungsfällen zu generieren.
Einige andere Beispiele sind:
- Benutzeroberfläche dynamisch basierend auf der Benutzerabsicht generieren
Entwickler können strukturierte Ausgaben verwenden, um Code- oder UI-Generierungsanwendungen zu erstellen.
Mit demselben Antwortformat können basierend auf Benutzereingaben unterschiedliche Benutzeroberflächen generiert werden.
Erstellen Sie beispielsweise eine „Gardener's Login-Schnittstelle“:
Es wird mit folgendem Code generiert:
{
  "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" }]
}
- Trennen Sie abschließende Antworten von unterstützenden Begründungen oder zusätzlichen Kommentaren
Die Bereitstellung eines separaten Gedankenkettenfelds für das Modell kann die endgültige Qualität der Antwort verbessern.
fragen:
Strukturierte Ausgabe:
{
  "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."
}
- Extrahieren Sie strukturierte Daten aus unstrukturierten Daten
Weisen Sie das Modell beispielsweise an, Dinge wie Aufgaben, Fristen und Aufgaben aus Besprechungsnotizen zu extrahieren.
fragen:
Strukturierte Ausgabe:
{
  "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"
    }
  ]
}
Sichere strukturierte Ausgabe
Sicherheit hat für OpenAI höchste Priorität – die neue strukturierte Ausgabefunktion wird den bestehenden Sicherheitsrichtlinien von OpenAI entsprechen und es Modellen weiterhin ermöglichen, unsichere Anfragen abzulehnen.
Um die Entwicklung zu vereinfachen, gibt es einen neuen Ablehnungszeichenfolgenwert für API-Antworten, mit dem Entwickler programmgesteuert erkennen können, ob ein Modell Ablehnungen anstelle einer Ausgabe generiert, die dem Schema entspricht.
Wenn die Antwort keine Ablehnung enthält und die Antwort des Modells nicht vorzeitig unterbrochen wird (wie durch „finish_reason“ angegeben), erzeugt die Antwort des Modells zuverlässig gültiges JSON, das dem bereitgestellten Schema entspricht.
Verweise: