Strukturierte Ausgaben in Azure Databricks

Strukturierte Ausgaben auf Azure Databricks ermöglichen es Ihnen, Antworten in einem definierten JSON-Format als Teil Ihrer KI-Anwendungsworkflows zu generieren. Sie arbeiten mit jedem unterstützten Chatmodell über ein Feld response_format . Sie verwenden dasselbe Anfrageformat, unabhängig vom zugrunde liegenden Modellanbieter. Azure Databricks übernimmt jede anbieterspezifische Übersetzung für Sie, sodass Sie das native strukturierte Ausgabeformat eines Anbieters nicht verwenden müssen.

Tipp

Genie Code (Agent-Modus) kann dies für Sie tun. Probieren Sie diese Beispielaufforderung aus:

Query the databricks-gpt-oss-20b model with a JSON schema response format to extract title, authors, abstract, and keywords from a research paper description. Note: this model returns content as a list of blocks; extract the block with type "text" and parse it.

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 mit Bezahlung 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 Sie strukturierte Ausgaben

Geben Sie Ihre strukturierten Ausgaben in Ihrer Chatanfrage mit response_format 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-gpt-oss-20b",
    messages=messages,
    response_format=response_format
)

print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))

Im Folgenden ist ein Beispiel für die JSON-Extraktion dargestellt, aber das JSON-Schema ist im Voraus 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-gpt-oss-20b",
    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 Verschachtelung oder Schemakomposition und -validierung unter Verwendung von: 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

Strukturierte Ausgaben mit Anthropic Claude-Modellen

Das folgende Beispiel extrahiert Daten in ein spezifisches JSON-Schema mithilfe eines Claude-Modells. Die einzige Änderung gegenüber den vorherigen Beispielen ist der Wert model .

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-claude-sonnet-4-5",
    messages=messages,
    response_format=response_format
)

print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))

Claude-Modelle haben zusätzliche Einschränkungen für strukturierte Ausgaben. Siehe den Abschnitt Einschränkungen.

Verwendung von Token

Prompteinschleusung 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 und maxLength.
  • 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.

Anthropic Claude-Modelle haben folgende zusätzliche Einschränkungen für strukturierte Ausgaben:

  • Es wird nur der strukturierte json_schema Ausgabetyp unterstützt. json_object wird nicht unterstützt. Für uneingeschränkte Ausgabe lassen Sie response_format.
  • Strukturierte Ausgaben werden beim Streaming nicht unterstützt. Setzen stream Sie auf false wenn Sie ein response_format.
  • Der Parameter response_format für Claude-strukturierte Ausgaben kann nicht mit tools oder tool_choicekombiniert werden.