Strukturierte AI_COMPLETE-Ausgaben¶
Mit AI_COMPLETE können Sie ein JSON-Schema oder SQL-Typliteral bereitstellen, dem Vervollständigungsantworten folgen müssen, wodurch eine strukturierte Ausgabe erzeugt wird. Eine strukturierte Ausgabe reduziert den Bedarf an Nachbearbeitungen in Ihren AI-Datenpipelines und ermöglicht eine nahtlose Integration in Systeme, die deterministische Antworten erfordern. AI_COMPLETE überprüft jedes generierte Token anhand Ihrer strukturierten Ausgabedefinition, um sicherzustellen, dass die Antwort mit Ihrer Typstruktur übereinstimmt.
Jedes von AI_COMPLETE unterstützte Modell unterstützt eine strukturierte Ausgabe, aber die leistungsstärksten Modelle erzeugen in der Regel Antworten von höherer Qualität.
Verwenden von AI_COMPLETE mit Typliteralen¶
Typliterale ermöglichen es Ihnen, eine strukturierte Ausgabe für AI_COMPLETE mit SQL-Typen zu definieren, wobei die Vorteile der integrierten Zuordnungen von Snowflake zwischen SQL- und JSON-Typen genutzt werden. Beginnen Sie Ihr Typliteral mit dem Schlüsselwort TYPE, und verwenden Sie ein SQL OBJECT als Typ auf der obersten Ebene. Die Eigenschaften Ihres Objekts der obersten Ebene können ein beliebiger SQL-Typ mit einer unterstützten Zuordnung zu JSON sein.
Bemerkung
Typliterale werden nur für die Version der Texteingabeaufforderungen mit Einzelzeichenfolgen von AI_COMPLETE unterstützt. Weitere Informationen dazu finden Sie unter AI_COMPLETE (Einzelne Zeichenfolge).
Das folgende Beispiel verwendet ein Typliteral, um eine strukturierte Ausgabe für eine Eingabeaufforderung zu erzeugen. Die Aufforderung enthält sowohl Anweisungen für das Modell als auch die zu verarbeitenden Daten. Das Typliteral response_format erzeugt die Antwort des Modells als JSON-Objekt mit einer note auf der obersten Ebene, das ein Array von date, address, items_count und price mit Preisen enthält.
Im Folgenden sehen Sie eine vollständige Antwort auf diese Abfrage:
Hinweise zu Typliteralen und Einschränkungen¶
Die Angabe eines strukturierten Ausgabeschemas als Typliteral folgt diesen Regeln:
Die Typen STRING und VARCHAR werden JSON-Zeichenfolgen zugeordnet.
Bei VARCHAR-Typen kann nicht garantiert werden, dass sie eine Ausgabe in einer bestimmten Länge erzeugen.
FIXED-Typen ohne Dezimalstellenzahl werden JSON-Ganzzahlen (Integer) zugeordnet. Alle anderen numerischen Typen werden JSON-Zahlen zugeordnet.
Für Typliterale gibt es Einschränkungen hinsichtlich unterstützter Typen:
Das leere Objekt OBJECT() ist nicht als Typliteral zulässig.
Nicht alle SQL-Typen verfügen über eine Zuordnung für die strukturierte Ausgabe. Dazu zählen unter anderem:
VARIANT
MAP
Die Verwendung eines nicht unterstützten Datentyps erzeugt einen Fehler.
Verwenden von AI_COMPLETE mit JSON-Schemas¶
Verwenden Sie für mehr Kontrolle über die strukturierte Ausgabe ein JSON-Schema als Wert für response_format. Das angegebene JSON-Schema definiert die Struktur, die Datentypen und die Einschränkungen, denen der generierte Text entsprechen muss, einschließlich der erforderlichen Felder.
Für einfache Aufgaben müssen Sie keine Details zum Ausgabeformat angeben oder das Modell sogar anweisen, „in JSON zu reagieren“. Bei komplexeren Aufgaben kann durch Auffordern des Modells in JSON zu reagieren die Genauigkeit verbessert werden; siehe Optimierung der JSON-Einhaltungsgenauigkeit.
Die folgenden Beispiele zeigen die Syntax eines AI_COMPLETE-Funktionsaufruf, der ein JSON-Schema verwendet, um das strukturierte Ausgabeformat anzugeben. Das Schema definiert ein Objekt auf oberster Ebene, properties, mit einer property_name-Eigenschaft vom Typ Zeichenfolge. Dieses Feld ist in der Antwort erforderlich.
Wichtig
Für OpenAI (GPT)-Modelle gelten die folgenden Anforderungen:
Das Feld additionalProperties muss in jedem Knoten des Schemas auf
falsegesetzt sein.Das Feld required muss enthalten sein und die Namen jeder Eigenschaft im Schema enthalten.
Andere Modelle benötigen diese Felder nicht, aber Sie können sie trotzdem einschließen, sodass Sie kein anderes Schema für OpenAI-Modelle benötigen.
SQL-Beispiele¶
Das folgende Beispiel ist eine vollständigere Demonstration der Verwendung von AI_COMPLETE mit einer einzigen Zeichenfolgeneingabe.
Antwort:
Das folgende Beispiel zeigt, wie Sie mit dem Argument response_format ein JSON-Schema für die Antwort angeben und mit dem Argument show_details Inferenz-Metadaten zurückgeben.
Antwort:
Python-Beispiel¶
Bemerkung
Die strukturierte Ausgabe wird in snowflake-ml-python ab Version 1.8.0 unterstützt.
Das folgende Beispiel zeigt, wie Sie das Argument response_format verwenden, um ein JSON-Schema für die Antwort anzugeben.
Antwort:
Pydantic-Beispiel¶
Pydantic ist eine Bibliothek zur Datenvalidierung und Verwaltung von Einstellungen für Python. Dieses Beispiel verwendet Pydantic, um ein Schema für das Antwortformat zu definieren. Der Code führt diese Schritte aus:
Verwendet Pydantic zur Definition eines Schemas
Konvertiert das Pydantic-Modell in ein JSON-Schema unter Verwendung der Methode
model_json_schemaÜbergibt das JSON-Schema als Argument
response_formatan die Funktioncomplete
Bemerkung
Dieses Beispiel soll in einem Snowsight Python-Arbeitsblatt ausgeführt werden, das bereits eine Verbindung zu Snowflake hat. Wenn Sie die Anwendung in einer anderen Umgebung ausführen möchten, müssen Sie möglicherweise unter eine Verbindung zu Snowflake mit dem Snowflake Connector für Python herstellen.
Antwort:
REST API-Beispiel¶
Sie können den Snowflake Cortex LLM REST API verwenden, um COMPLETE mit dem LLM Ihrer Wahl aufzurufen. Nachfolgend finden Sie ein Beispiel für die Bereitstellung eines Schemas unter Verwendung des Cortex LLM REST API:
Antwort:
Erstellen Sie eine JSON-Schemadefinition¶
Um die bestmögliche Genauigkeit von strukturierten COMPLETE-Ausgaben zu erhalten, befolgen Sie diese Richtlinien:
Verwenden Sie das Feld „erforderlich“ im Schema, um erforderliche Felder anzugeben. COMPLETE gibt einen Fehler aus, wenn ein erforderliches Feld nicht extrahiert werden kann.
Im folgenden Beispiel weist das Schema COMPLETE an, die im Dokument erwähnten Personen zu finden. Das Feld
peopleist als erforderlich gekennzeichnet, um sicherzustellen, dass die Personen identifiziert werden.Antwort:
Stellen Sie detaillierte Beschreibungen der zu extrahierenden Felder zur Verfügung, damit das Modell diese genauer identifizieren kann. Das folgende Schema enthält zum Beispiel eine Beschreibung der einzelnen Felder von
people:name,age, undisAdult.
Verwenden einer JSON-Referenz¶
Schemareferenzen lösen praktische Probleme bei der Verwendung von strukturierten Cortex COMPLETE-Ausgaben. Mit Referenzen, dargestellt durch $ref, können Sie gängige Objekte wie Adressen oder Preise einmal definieren und sie dann im gesamten Schema wiederverwenden. Wenn Sie die Validierungslogik aktualisieren oder ein Feld hinzufügen müssen, können Sie diese an einem Ort ändern und nicht an mehreren Stellen.
Die Verwendung von Referenzen reduziert den Codierungsaufwand, reduziert Fehler durch inkonsistente Implementierungen und erleichtert die Codeüberprüfung. Referenzierte Komponenten sorgen für klarere Hierarchien, die die Beziehungen zwischen den Entitäten in Ihrem Datenmodell besser darstellen. Da Projekte immer komplexer werden, hilft Ihnen dieser modulare Ansatz, technische Daten zu verwalten und gleichzeitig die Integrität des Schemas zu wahren.
Bibliotheken von Drittanbietern wie Pydantic unterstützen den Referenzmechanismus nativ in Python, was die Verwendung von Schemas in Ihrem Code vereinfacht.
Die folgenden Richtlinien gelten für die Verwendung von Referenzen in JSON-Schema:
Beschränkungen des Umfangs: Der Mechanismus
$refist nur auf das Schema des Benutzers beschränkt; externe Schemareferenzen (wie HTTP URLs) werden nicht unterstützt.Platzierung von Definitionen: Objektdefinitionen sollten auf der obersten Ebene des Schemas platziert werden, und zwar unter dem Schlüssel Definitionen oder
$defs.Durchsetzung: Während die JSON-Schema-Spezifikation die Verwendung des Schlüssels
$defsfür Definitionen empfiehlt, setzt der Validierungsmechanismus von Snowflake diese Struktur strikt durch. Dies ist ein Beispiel für ein gültiges$defs-Objekt:
Beispiel mit JSON-Referenz¶
Dieses SQL-Beispiel demonstriert die Verwendung von Referenzen in einem JSON-Schema.
Antwort:
Optimierung der JSON-Einhaltungsgenauigkeit¶
Strukturierte COMPLETE-Ausgaben benötigt in der Regel keine Eingabeaufforderung; es versteht bereits, dass seine Antwort dem von Ihnen angegebenen Schema entsprechen sollte. Die Komplexität der Aufgabe kann jedoch die Möglichkeit von LLMs, einem JSON-Antwortformat zu folgen, erheblich beeinflussen. Je komplexer die Aufgabe ist, desto mehr können Sie die Genauigkeit der Ergebnisse verbessern, indem Sie eine Eingabeaufforderung angeben.
Einfache Aufgaben wie z. B. Textklassifizierung, Entitäten-Extraktion, Paraphrasierung und Zusammenfassungsaufgaben, die keine komplexen Schlussfolgerungen erfordern, benötigen in der Regel keine zusätzliche Eingabeaufforderung. Bei kleineren Modellen mit geringerer Intelligenz verbessert die Verwendung von strukturierten Ausgaben die Genauigkeit von JSON erheblich, da sie jeden Text ignoriert, den das Modell ohne Bezug zum bereitgestellten Schema liefert.
Zu den Aufgaben mittlerer Komplexität gehören alle einfachen Aufgaben, bei denen das Modell um zusätzliche Argumente gebeten wird, z. B. um die Begründung einer Klassifizierungsentscheidung bereitzustellen. Für diese Anwendungsfälle empfehlen wir, in der Eingabeaufforderung „In JSON antworten“ hinzuzufügen, um die Leistung zu optimieren.
Komplexe schlussfolgernde Aufgaben fordern die Modelle auf, offenere, mehrdeutige Aufgaben zu erfüllen, wie z. B. die Beurteilung und Bewertung der Qualität eines Anrufs auf der Grundlage der Relevanz, Professionalität und Treue der Antworten. Für diese Anwendungsfälle empfehlen wir die Verwendung der leistungsstärksten Modelle wie
claude-3-5-sonnetvon Anthropic odermistral-large2von Mistral AI und das Hinzufügen von „In JSON antworten“ und Details über das Schema, das Sie generieren möchten, in der Eingabeaufforderung.
Um möglichst konsistente Ergebnisse zu erhalten, setzen Sie die Option temperature auf 0, wenn Sie COMPLETE aufrufen, unabhängig von der Aufgabe oder dem Modell.
Tipp
Um mit möglichen Fehlern, die ein Modell auslöst, umzugehen, verwenden Sie TRY_COMPLETE und nicht COMPLETE.
Hinweise zu Kosten¶
Strukturierte Cortex COMPLETE-Ausgaben verursacht Rechenkosten auf der Grundlage der Anzahl der verarbeiteten Token, aber keine zusätzlichen Rechenkosten für den Overhead der Überprüfung jedes Tokens anhand des bereitgestellten JSON-Schemas. Die Anzahl der verarbeiteten (und abgerechneten) Token steigt jedoch mit der Komplexität des Schemas. Im Allgemeinen gilt: Je größer und komplexer das gelieferte Schema ist, desto mehr Eingabe- und Ausgabe-Token werden verbraucht. Stark strukturierte Antworten mit tiefer Verschachtelung (z. B. hierarchische Daten) verbrauchen eine größere Anzahl von Token als einfachere Schemata.
Einschränkungen¶
Sie können keine Leerzeichen in den Schlüsseln des Schemas verwenden.
Die zulässigen Zeichen für Eigenschaftsnamen sind Buchstaben, Ziffern, Bindestriche und Unterstriche. Die Namen dürfen maximal 64 Zeichen lang sein.
Sie können externe Schemata nicht über
$refoder$dynamicRefansprechen.
Die folgenden Einschränkungs-Schlüsselwörter werden nicht unterstützt. Die Verwendung eines nicht unterstützten Einschränkungs-Schlüsselworts führt zu einem Fehler.
Typ |
Schlüsselwörter |
|---|---|
Ganzzahl |
|
number |
|
string |
|
Array |
|
Objekt |
|
Diese Beschränkungenkönnten in zukünftigen Releases aufgehoben werden.
Fehlerbedingungen¶
Situation |
Beispiel-Nachricht |
HTTP-Statuscode |
|---|---|---|
Validierung der Anfrage fehlgeschlagen. Die Abfrage wurde abgebrochen, da das Modell nicht in der Lage war, eine gültige Antwort zu erzeugen. Dies kann durch eine fehlerhafte Anfrage verursacht werden. |
|
400 |
Validierung des Eingabeschemas fehlgeschlagen. Die Abfrage wurde abgebrochen, da das Modell nicht in der Lage war, eine gültige Antwort zu erzeugen. Dies kann durch das Fehlen erforderlicher Eigenschaften in der Nutzlast der Anfrage oder durch die Verwendung nicht unterstützter Features des JSON-Schemas, wie z. B. Einschränkungen, oder durch die unsachgemäße Verwendung des $ref-Mechanismus verursacht werden (z. B. durch das Verlassen des Schemas |
|
400 |
Validierung der Modellausgabe fehlgeschlagen. Das Modell konnte keine Antwort erzeugen, die dem Schema entsprach. |
|
422 |