Strukturierte Ausgaben für Azure Databricks
Wichtig
Dieses Feature befindet sich in der öffentlichen Vorschau und wird sowohl für Foundation-Modell-APIs per Token als auch für bereitgestellte Durchsatzendpunkte unterstützt.
In diesem Artikel werden strukturierte Ausgaben für Azure Databricks und deren Verwendung als Teil Ihrer generativen KI-Anwendungsworkflows beschrieben. Strukturierte Ausgaben sind openAI-kompatibel und stehen nur während des Modells als Teil von Foundation Model-APIs zur Verfügung.
Was sind strukturierte Ausgaben?
Strukturierte Ausgaben bieten eine Möglichkeit, strukturierte Daten in Form von JSON-Objekten aus Ihren Eingabedaten zu generieren. Sie können text-, unstrukturierte JSON-Objekte und JSON-Objekte generieren, die einem bestimmten JSON-Schema entsprechen. Strukturierte Ausgaben werden für Chatmodelle unterstützt, die mithilfe von Foundation-Modell-APIs per Token und bereitgestellten Durchsatzendpunkten bereitgestellt werden.
Databricks empfiehlt die Verwendung strukturierter Ausgaben für die folgenden Szenarien:
- Extrahieren von Daten aus großen Dokumentenmengen. Beispiel: Identifizieren und Klassifizieren von Feedback zur Produktüberprüfung als negativ, positiv oder neutral.
- Batch-Ableitungsaufgaben, für die Ausgaben in einem angegebenen Format erforderlich sind.
- Datenverarbeitung, z. B. das Umwandeln unstrukturierter Daten in strukturierte Daten.
Verwenden von strukturierten Ausgaben
Geben Sie Ihre strukturierten Ausgaben in response_format
Ihrer Chatanfrage an. Siehe Foundation-Modell-REST-API-Referenz.
Im Folgenden sehen Sie ein Beispiel für die Datenextraktion von Forschungspapieren zu einem bestimmten JSON-Schema.
import os
import json
from openai import OpenAI
DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')
client = OpenAI(
api_key=DATABRICKS_TOKEN,
base_url=DATABRICKS_BASE_URL
)
response_format = {
"type": "json_schema",
"json_schema": {
"name": "research_paper_extraction",
"schema": {
"type": "object",
"properties": {
"title": { "type": "string" },
"authors": {
"type": "array",
"items": { "type": "string" }
},
"abstract": { "type": "string" },
"keywords": {
"type": "array",
"items": { "type": "string" }
}
},
},
"strict": True
}
}
messages = [{
"role": "system",
"content": "You are an expert at structured data extraction. You will be given unstructured text from a research paper and should convert it into the given structure."
},
{
"role": "user",
"content": "..."
}]
response = client.chat.completions.create(
model="databricks-meta-llama-3-1-70b-instruct",
messages=messages,
response_format=response_format
)
print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))
Im Folgenden sehen Sie ein Beispiel für die JSON-Extraktion, aber das JSON-Schema ist vor der Hand nicht bekannt.
import os
import json
from openai import OpenAI
DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')
client = OpenAI(
api_key=DATABRICKS_TOKEN,
base_url=DATABRICKS_BASE_URL
)
response_format = {
"type": "json_object",
}
messages = [
{
"role": "user",
"content": "Extract the name, size, price, and color from this product description as a JSON object:\n<description>\nThe SmartHome Mini is a compact smart home assistant available in black or white for only $49.99. It's 5 inches wide.\n</description>"
}]
response = client.chat.completions.create(
model="databricks-meta-llama-3-1-70b-instruct",
messages=messages,
response_format=response_format
)
print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))
JSON-Schema
Foundation Model-APIs unterstützen allgemein strukturierte Ausgaben, die von OpenAI akzeptiert werden. Die Verwendung eines einfacheren JSON-Schemas für JSON-Schemadefinitionen führt jedoch zu einer höheren Qualität der JSON-Generierung. Um die Generierung höherer Qualität zu fördern, unterstützen Foundation Model-APIs nur eine Teilmenge der JSON-Schemaspezifikationen.
Die folgenden Funktionsaufrufdefinitionsschlüssel werden nicht unterstützt:
- Reguläre Ausdrücke, die
pattern
nutzen. - Komplexe geschachtelte oder Schemakomposition und -validierung mit:
anyOf
,oneOf
,allOf
,prefixItems
oder$ref
. - Listen von Typen mit Ausnahme des Sonderfalls
[type, “null”]
, in dem ein Typ in der Liste ein gültiger JSON-Typ und der andere"null"
ist
Verwendung von Token
Prompt Injection und andere Techniken werden verwendet, um die Qualität strukturierter Ausgaben zu verbessern. Dies wirkt sich auf die Anzahl der vom Modell verbrauchten Eingabe- und Ausgabetoken aus, was wiederum zu Abrechnungsauswirkungen führt.
Begrenzungen
- Die maximale Anzahl der im JSON-Schema angegebenen Schlüssel ist
64
. - Foundation-Modell-APIs erzwingen keine Längen- oder Größenbeschränkungen für Objekte und Arrays.
- Dazu gehören Schlüsselwörter wie
maxProperties
,minProperties
undmaxLength
.
- Dazu gehören Schlüsselwörter wie
- Stark geschachtelte JSON-Schemas führen zu einer niedrigeren Qualitätsgenerierung. Versuchen Sie nach Möglichkeit, das JSON-Schema abzuflachen, um bessere Ergebnisse zu erzielen.