Delen via


Gestructureerde uitvoer in Azure Databricks

Belangrijk

Deze functie bevindt zich in de openbare preview en wordt ondersteund op beide Foundation Model-API's met betalen per token en ingerichte doorvoereindpunten.

In dit artikel worden gestructureerde uitvoer beschreven in Azure Databricks en hoe u deze kunt gebruiken als onderdeel van uw generatieve AI-toepassingswerkstromen. Gestructureerde uitvoer is openAI-compatibel en is alleen beschikbaar tijdens het model dat fungeert als onderdeel van Foundation Model-API's.

Wat zijn gestructureerde uitvoer?

Gestructureerde uitvoer biedt een manier om gestructureerde gegevens te genereren in de vorm van JSON-objecten op basis van uw invoergegevens. U kunt ervoor kiezen om tekst, ongestructureerde JSON-objecten en JSON-objecten te genereren die voldoen aan een specifiek JSON-schema. Gestructureerde uitvoer wordt ondersteund voor chatmodellen die worden geleverd met behulp van foundationmodel-API's betalen per token en ingerichte doorvoereindpunten.

Databricks raadt aan gestructureerde uitvoer te gebruiken voor de volgende scenario's:

  • Gegevens extraheren uit grote hoeveelheden documenten. Bijvoorbeeld het identificeren en classificeren van feedback over productbeoordeling als negatief, positief of neutraal.
  • Batchdeductietaken waarvoor uitvoer in een opgegeven indeling moet zijn.
  • Gegevensverwerking, zoals het omzetten van ongestructureerde gegevens in gestructureerde gegevens.

Gestructureerde uitvoer gebruiken

Geef uw gestructureerde uitvoer op met behulp van response_format uw chataanvraag. Zie naslaginformatie over de REST API van het Foundation-model.

Hier volgt een voorbeeld van gegevensextractie van onderzoeksdocumenten naar een specifiek 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))

Hier volgt een voorbeeld van JSON-extractie, maar het JSON-schema is niet vooraf bekend.

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-API's ondersteunen gestructureerde uitvoer die door OpenAI wordt geaccepteerd. Het gebruik van een eenvoudiger JSON-schema voor JSON-schemadefinities resulteert echter in een hogere kwaliteit JSON-generatie. Ter bevordering van het genereren van hogere kwaliteit ondersteunen Foundation Model-API's alleen een subset van JSON-schemaspecificaties.

De volgende definitiesleutels voor functie-aanroepen worden niet ondersteund:

  • Reguliere expressies met behulp van pattern.
  • Complexe geneste of schema-samenstelling en validatie met: anyOf, oneOf, allOf, , prefixItemsof $ref.
  • Lijsten met typen, met uitzondering van het speciale geval waarbij [type, “null”] één type in de lijst een geldig JSON-type is en het andere is "null"

Tokengebruik

Promptinjectie en andere technieken worden gebruikt om de kwaliteit van gestructureerde uitvoer te verbeteren. Dit heeft gevolgen voor het aantal invoer- en uitvoertokens dat door het model wordt gebruikt, wat op zijn beurt gevolgen heeft voor de facturering.

Beperkingen

  • Het maximum aantal sleutels dat is opgegeven in het JSON-schema is 64.
  • Basismodel-API's dwingen geen lengte- of groottebeperkingen af voor objecten en matrices.
    • Dit omvat trefwoorden zoals maxProperties, minPropertiesen maxLength.
  • Sterk geneste JSON-schema's resulteren in het genereren van lagere kwaliteit. Probeer indien mogelijk het JSON-schema plat te maken voor betere resultaten.