Freigeben über


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 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.