Partager via


Sorties structurées sur Azure Databricks

Important

Cette fonctionnalité est disponible en préversion publique et est prise en charge à la fois sur les API du modèle Foundation et sur les points de terminaison de débit approvisionnés.

Cet article décrit les sorties structurées sur Azure Databricks et explique comment les utiliser dans le cadre de vos flux de travail d’application IA génératives. Les sorties structurées sont compatibles avec OpenAI et sont disponibles uniquement pendant le modèle servant dans le cadre des API Foundation Model.

Qu’est-ce que les sorties structurées ?

Les sorties structurées permettent de générer des données structurées sous la forme d’objets JSON à partir de vos données d’entrée. Vous pouvez choisir de générer du texte, des objets JSON non structurés et des objets JSON qui adhèrent à un schéma JSON spécifique. Les sorties structurées sont prises en charge pour les modèles de conversation servis à l’aide des API De modèle Foundation et des points de terminaison de débit approvisionnés.

Databricks recommande d’utiliser des sorties structurées pour les scénarios suivants :

  • Extraction de données à partir de grandes quantités de documents. Par exemple, l’identification et la classification des commentaires de révision de produit comme négatives, positives ou neutres.
  • Tâches d’inférence par lots qui nécessitent des sorties dans un format spécifié.
  • Traitement des données, comme transformer des données non structurées en données structurées.

Utiliser des sorties structurées

Spécifiez vos sorties structurées à l’aide response_format de votre demande de conversation. Consultez la référence de l’API REST du modèle Foundation.

Voici un exemple d’extraction de données de documents de recherche dans un schéma JSON spécifique.

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

Voici un exemple d’extraction JSON, mais le schéma JSON n’est pas connu avant la main.

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

Schéma JSON

Les API Foundation Model prennent largement en charge les sorties structurées acceptées par OpenAI. Toutefois, l’utilisation d’un schéma JSON plus simple pour les définitions de schéma JSON entraîne une génération JSON de qualité supérieure. Pour promouvoir une génération de qualité supérieure, les API du modèle de base ne prennent en charge qu’un sous-ensemble des spécifications du schéma JSON.

Les clés de définition d’appel de fonction suivantes ne sont pas prises en charge :

  • Expressions régulières utilisant pattern.
  • Composition et validation complexes imbriquées ou de schéma à l’aide de : anyOf, oneOf, allOf, prefixItems ou $ref.
  • Listes de types à l’exception du cas spécial de [type, “null”] où un type dans la liste est un type JSON valide et l’autre est "null"

Utilisation d’un jeton

L’injection rapide et d’autres techniques sont utilisées pour améliorer la qualité des sorties structurées. Cela a un impact sur le nombre de jetons d’entrée et de sortie consommés par le modèle, ce qui entraîne des implications de facturation.

Limites

  • Le nombre maximal de clés spécifié dans le schéma JSON est de 64.
  • Les API du model de base n’imposent pas de contraintes de longueur ou de taille pour les objets et les tableaux.
    • Cela inclut des mots clés tels que maxProperties, minProperties et maxLength.
  • Les schémas JSON fortement imbriqués entraînent une génération de qualité inférieure. Si possible, essayez d’aplatir le schéma JSON pour obtenir de meilleurs résultats.