Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 fonctionnent avec les modèles OpenAI qui prennent en charge des modèles structurés.
Que sont 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 utilisés avec les API de modèles fondamentaux à paiement par jeton et les 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 des avis sur les produits comme négatifs, positifs 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 les sorties structurées
Spécifiez vos sorties structurées dans votre requête de conversation en utilisant response_format
. Consulter Référence de l’API REST du modèle de base.
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-3-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 préalablement.
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-3-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 de modèle de base 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 meilleure qualité. Pour promouvoir une génération de meilleure qualité, les API de modèle de base ne prennent en charge qu’un sous-ensemble des spécifications de 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 des jetons
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 sur la 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
etmaxLength
.
- Cela inclut des mots clés tels que
- 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.