JSONArray Grundlegende Konzepte
JSONArray
ist eine Array-Struktur zur Speicherung mehrerer JSON-Objekte. Jedes Element kann ein JSON-Objekt, ein Array oder ein Basisdatentyp (z. B. String, Zahl usw.) sein. In der Dify In der JSONArray
Sie umfasst hauptsächlich das Parsen und Generieren von JSON-Daten.
Alle von Dify unterstützten Array-Strukturen: String, Number, Boolean, Integer,Objekt, Array, Enum, anyOf
guanxi
- JSON-Schema JSON-Schema ist eine Spezifikation für die Beschreibung und Validierung des JSON-Datenformats. Es definiert die Struktur von JSON-Daten, einschließlich Datentypen, Attributen, erforderlichen Feldern usw. JSON-Schema selbst ist auch ein JSON-Objekt, das bestimmte Schlüsselwörter verwendet, um die Organisation der Daten und Einschränkungen zu beschreiben.
- JSONArray JSONArray ist eine Struktur für JSON-Daten, die eine geordnete Liste von Werten darstellt. Diese Liste kann mehrere JSON-Objekte, Arrays oder Basisdatentypen enthalten.JSONArray wird mit der mittleren Klammer formatiert
[]
Eingepackt.
Validierung und BeschreibungJSON Schema: JSON Schema kann verwendet werden, um JSON Daten zu validieren, die JSONArray enthalten. Sie können zum Beispiel ein Feld in einem JSON-Schema als Array-Typ definieren und festlegen, dass jedes Element in diesem Array ein JSON-Objekt eines bestimmten Formats sein muss. Dieser Ansatz stellt sicher, dass jedes Element im JSONArray bei der Verarbeitung der Daten der erwarteten Struktur und dem erwarteten Typ entspricht.
typisches BeispielAngenommen, wir haben die folgenden JSON-Daten:
{ "Benutzer": [ {"Name": "Alice", "Alter": 30}, {"Name": "Bob", "Alter": 25}, {"Benutzer": [ {"Name": "Bob", "Alter": 25} ] }
Wenn Sie strukturierte JSON-Daten in Dify definieren müssen, können Sie ein JSON-Schema verwenden, um sie zu beschreiben JSONArray
Struktur. Das entsprechende JSON-Schema kann sein:
{ "Typ": "Objekt", "Eigenschaften": { "properties": { "users": { "type": "array", "item": { "items": { "type": "object", "properties": { "type": "array", "items": { "properties": { "name": { "type": "string" }, "age": { "type": "integer" }, "properties": { "age": { "type": "integer" } }, "required": ["name": ["name": "string" }, "age": { "type": "integer" } "erforderlich": ["name", "alter"] } } }, "erforderlich": ["Name", "Alter"] } "required": ["users"] }
In diesem Beispiel besagt das JSON-Schema ausdrücklich, dass die Benutzer
Feld ist ein JSONArray, und jedes Objekt darin muss eine Name
im Gesang antworten Alter
Attribute.
Die Frage stellt sich also erneut:Wie finden Sie heraus, was in der Region vor sich geht? Dify Verwenden Sie JSON-Schema in LLM, damit die LLM-Ausgabe einem strukturierten Format folgt.
Modelle, die die JSON-Schema-Funktionalität in Dify unterstützen
o1-2024-12-17
und spätergpt-4o-mini-2024-07-18
und spätergpt-4o-2024-08-06
und später
Weitere Informationen über die strukturierten Ausgabemöglichkeiten der OpenAI-Modellfamilie finden Sie in der Strukturierte Ausgabe.
Hinweis: Sowohl json_schema als auch Funktionsaufrufe können strukturierte Daten erzeugen.json_schema wird nur zur Strukturierung der Daten für den Inhalt verwendet.Funktionsaufrufe sind nützlicher, wenn es darum geht, Daten, Werkzeuge und Funktionen aufzurufen und Antworten zu generieren. So verwendet das mit dem "Smart Assistant" verbundene Werkzeug in Dify den Funktionsaufruf.
Volltext: Konfigurieren der strukturierten JSON-Schema-Ausgabe in Dify Tools
Der folgende Verwendungspfad spezifiziert die strukturierte LLM-Ausgabe:
- Verbindet den LLM mit Werkzeugen, Funktionen, Daten usw. im System; wird in der Funktionsdefinition festgelegt
streng: wahr
Wenn Sie diese Funktion aktivieren, wird sichergestellt, dass die von LLM für einen Funktionsaufruf generierten Parameter genau dem JSON-Schema entsprechen, das Sie in der Funktionsdefinition angeben. - Der LLM antwortet dem Benutzer mit einer Ausgabe in einem strukturierten Inhaltsformat, wie es im JSON-Schema definiert ist.
Im folgenden Abschnitt wird beschrieben, wie Sie die JSON-Schema-Funktion in Dify aktivieren und verwenden können.
1. öffnen Sie das JSON-Schema
Stellen Sie den LLM in Ihrer Anwendung auf ein Modell um, das wie oben beschrieben die Ausgabe von JSON-Schemata unterstützt, und aktivieren Sie dann das Formular Setup, um JSON-Schema
und füllen Sie die JSON-Schema-Vorlage aus; schalten Sie auch die response_format
und wechseln Sie in die Spalte json_schema
Format.
Der vom LLM erzeugte Inhalt unterstützt die folgenden Formate für die Ausgabe:
- Text. Ausgabe im Textformat
2 Definieren Sie die JSON-Schema-Vorlage.
Sie können sich auf das folgende JSON-Schema-Format beziehen und den Inhalt der Vorlage definieren:
{
"name": "template_schema", "description".
"description": "Eine generische Vorlage für JSON Schema",
"schema": {
"type": "object", "properties": { "name": "template_schema", "strict":true, "schema": {
"properties": {
"field1": {
"type": "string", "description": {
"description": "Beschreibung von Feld1"
}, "field1": { "type": "string", "description": "Beschreibung von field1
"field2": {
"description": "Beschreibung von feld2"
}, "field2": { "type": "number", "description": "Beschreibung von field2" }, "description": "Beschreibung von field2" }
"field3": {
"items": {
"type": "string"
}
}, "items": { "type": "string" }
"feld4": {
"type": "object", "description": "Beschreibung von field4", {
"description": "Beschreibung von field4",
"properties": {
"subfield1": {
"type": "string", "description": { "subfield1": {
"description": "Beschreibung von subfield1"
}
}, "required": ["subfield1"], "description": "Beschreibung von subfield1" }
"required": ["subfield1"], "additionalProperties".
"additionalProperties":false
}
}, "required": ["field1", "field1"], "additionalProperties":false }
"erforderlich": ["field1", "field2", "field3", "field4"], "additionalProperties":false } }, "additionalProperties":false }
"additionalProperties":false
}
}
Schritt-für-Schritt-Anleitung:
- Definieren Sie grundlegende Informationen:
- aufstellen
Name
Schema: Geben Sie Ihrem Schema einen beschreibenden Namen. - erhöhen.
Beschreibung
Schema: Eine kurze Beschreibung der Verwendung von Schema. - aufstellen
Streng
: true: Strict-Modus sicherstellen.
- einrichten.
Schema
Objekt:
- aufstellen
Typ: "Objekt"
Root Level: Gibt die Wurzelebene als Objekttyp an. - erhöhen.
Eigenschaften
Objekt: Dient zur Definition aller Felder.
- Definieren Sie die Felder:
- Erstellen Sie ein Objekt für jedes Feld, das
Typ
im Gesang antwortenBeschreibung
. - Gängige Typen:
String
,Nummer
,boolean
,Array
,Objekt
. - Für Arrays verwenden Sie die
Artikel
Definiert den Elementtyp. - Für Objekte, rekursive Definitionen
Eigenschaften
.
- Festlegung von Beschränkungen:
- Auf jeder Ebene hinzufügen
erforderlich
Array mit allen erforderlichen Feldern. - Einstellung der
additionalProperties: false
.
- Besondere Handhabung des Feldes:
- ausnutzen
enum
Optionale Werte begrenzen. - ausnutzen
$ref
Implementierung von rekursiven Strukturen.
typisches Beispiel
1. die Argumentationskette (konventionell)
Beispiel einer JSON-Schemadatei
{
"name": "math_reasoning", "description".
"description": "Aufzeichnungsschritte und endgültige Antwort für mathematisches Denken", "strict":true, { "name".
"strict":true, "schema": { "name": "math_reasoning
"schema": {
"type": "object", "properties": {
"properties": {
"steps": {
"type": "array", "description": {
"description": "Array von Argumentationsschritten", "items": {
"items": {
"type": "object", "properties": { "properties": {
"properties": {
"explanation": {
"type": "string", "description": {
"description": "Erläuterung des Argumentationsschritts"
}, "output": { "explanation": { "type": "string", "description": "Erläuterung des Argumentationsschritts
"output": {
"type": "string", "description": "Erläuterung des Argumentationsschritts" }, "output": {
"description": "Ausgabe des Argumentationsschritts"
}
}, "required": ["explanation", "description": "Ausgabe des Argumentationsschritts" }
"required": ["explanation", "output"], "additionalProperties":falseProperties":falseProperties
"additionalProperties":false
}
}, "final_answer".
"final_answer": {
"type": "string", "description".
"description": "Die endgültige Antwort auf das mathematische Problem"
}
}, "additionalProperties":false, "description": "Die endgültige Antwort auf das mathematische Problem" }
"required": ["steps", "final_answer"]
}
}
Hinweis auf das Stichwort
Sie sind ein hilfsbereiter Mathenachhilfelehrer. Sie erhalten ein mathematisches Problem, und Ihr Ziel ist es, eine schrittweise Lösung zusammen mit einer endgültigen Antwort auszugeben.
Sie erhalten ein mathematisches Problem, und Ihr Ziel ist es, eine schrittweise Lösung und eine endgültige Antwort auszugeben.
Geben Sie für jeden Schritt einfach die Ausgabe als Gleichung an und verwenden Sie das Erklärungsfeld, um die Argumentation zu erläutern.
UI-Generator (rekursiver Root-Modus)
{
"name": "ui", "description": "Dynamisch generierte Benutzeroberfläche", {
"description": "Dynamisch generierte Benutzeroberfläche", "strict":true, { "name": "ui",
"strict":true, { "schema": {
"schema": {
"type": "object", "properties": { "type": "object", "properties": {
"properties": {
"type": {
"type": "string", "description".
"enum": ["div", "button", "header", "section", "field", "form"]
},
"label": {
"type": "string", "description": {
"description": "Die Bezeichnung der UI-Komponente, die für Schaltflächen oder Formularfelder verwendet wird"
"children": {
"type": "array", "description": "Die Bezeichnung der UI-Komponente, die für Schaltflächen oder Formularfelder verwendet wird" }, "children": {
"description": "Verschachtelte UI-Komponenten", "items": {
"items": {
"$ref": "#"
}
}, "attributes": { "$ref": "#" }
"attributes": {
"type": "array", "description": "UI-Komponente, geeignet für jedes Element", "attributes": {
"description": "Beliebige Attribute für die UI-Komponente, geeignet für jedes Element", "items": {
"items": {
"type": "object", "properties": {
"properties": {
"name": {
"type": "string", "description".
"description": "Der Name des Attributs, zum Beispiel onClick oder className"
}, "value": { "name": { "type": "string", "description": "Der Name des Attributs, z. B. onClick oder className
"value": {
"type": "string", "description": "Der Name des Attributs, zum Beispiel onClick oder className" }, "value": {
"description": "Der Wert des Attributs"
}
}, "additionalProperties":false, "description": "Der Wert des Attributs" }
"erforderlich": ["Name", "Wert"]
}
}
}, "required": ["label", "attributes"] }
"required": ["type", "label", "children", "attributes"], "additionalProperties":false, "required": ["name", "value"] } }, "additionalProperties":false
"additionalProperties":false
}
}
Stichwort Wortverweis:
Sie sind ein UI-Generator, der die Benutzereingaben in eine Benutzeroberfläche umwandelt.
Beispiel für eine Wirkung:
auf etw. aufmerksam machen
- Bitte stellen Sie sicher, dass die Eingabeaufforderungen der Anwendung Anweisungen enthalten, wie mit Situationen umzugehen ist, in denen die Benutzereingabe keine gültige Antwort ergibt.
- Das Modell wird immer versuchen, dem vorgegebenen Muster zu folgen, und kann den LLM zu Halluzinationen veranlassen, wenn die Eingabe in keinem Zusammenhang mit dem vorgegebenen Muster steht.
- Wenn LLM feststellt, dass die Eingabe nicht mit der Aufgabe kompatibel ist, können Sie die Sprache in die Eingabeaufforderung aufnehmen, um die Rückgabe von leeren Parametern oder eines bestimmten Satzes festzulegen.
- Alle Felder müssen
erforderlich
Weitere Informationen finden Sie unterhier (literarisch). - additionalProperties: false muss immer im Objekt gesetzt werden
- Das Root-Level-Objekt des Schemas muss ein Objekt sein
- Strukturierte Datenausgabeverfahren für große Modelle: Eine ausgewählte Liste von LLM JSON-Ressourcen