Output strutturati in Azure Databricks

Importante

Questa funzionalità è disponibile in anteprima pubblica ed è supportata in entrambe le API del modello foundation con pagamento in base al token e negli endpoint di velocità effettiva con provisioning.

Questo articolo descrive gli output strutturati in Azure Databricks e come usarli come parte dei flussi di lavoro generati dell'applicazione di intelligenza artificiale. Gli output strutturati sono compatibili con OpenAI ed è disponibile solo durante la gestione del modello come parte delle API del modello di base.

Che cosa sono gli output strutturati?

Gli output strutturati consentono di generare dati strutturati sotto forma di oggetti JSON dai dati di input. È possibile scegliere di generare testo, oggetti JSON non strutturati e oggetti JSON conformi a uno schema JSON specifico. Gli output strutturati sono supportati per i modelli di chat serviti usando le API modello di base con pagamento in base al token e gli endpoint di velocità effettiva con provisioning.

Databricks consiglia di usare output strutturati per gli scenari seguenti:

  • Estrazione di dati da grandi quantità di documenti. Ad esempio, identificare e classificare il feedback della revisione del prodotto come negativo, positivo o neutro.
  • Attività di inferenza batch che richiedono che gli output siano in un formato specificato.
  • Elaborazione dei dati, ad esempio la trasformazione di dati non strutturati in dati strutturati.

Usare output strutturati

Specificare gli output strutturati usando response_format nella richiesta di chat. Vedere Informazioni di riferimento sulle API REST del modello Di base.

Di seguito è riportato un esempio di estrazione di dati di documenti di ricerca in uno schema JSON specifico.

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

Di seguito è riportato un esempio di estrazione JSON, ma lo schema JSON non è noto prima della mano.

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

Schema JSON

Le API del modello foundation supportano su larga scala output strutturati accettati da OpenAI. Tuttavia, l'uso di uno schema JSON più semplice per le definizioni dello schema JSON comporta una generazione JSON di qualità superiore. Per promuovere una generazione di qualità superiore, le API del modello base supportano solo un sottoinsieme di specifiche dello schema JSON.

Le seguenti chiavi di definizione delle chiamate di funzione non sono supportate:

  • Espressioni regolari utilizzando pattern.
  • Composizione e convalida di schemi annidati complessi usando: anyOf, oneOf, allOf, prefixItems o $ref.
  • Elenchi di tipi ad eccezione del caso speciale di [type, “null”] in cui un tipo nell'elenco è un tipo JSON valido e l'altro è "null"

Utilizzo dei token

L'inserimento di richieste e altre tecniche vengono usate per migliorare la qualità degli output strutturati. In questo modo si influisce sul numero di token di input e output utilizzati dal modello, con conseguenti implicazioni per la fatturazione.

Limiti

  • Il numero massimo di chiavi specificato nello schema JSON è 64.
  • Le API del modello base non applicano vincoli di lunghezza o dimensioni per oggetti e matrici.
    • Sono incluse parole chiave come maxProperties, minProperties e maxLength.
  • Gli schemi JSON fortemente annidati generano una generazione di qualità inferiore. Se possibile, provare a rendere flat lo schema JSON per ottenere risultati migliori.