Appel de fonction sur Azure Databricks
Important
Cette fonctionnalité est disponible dans Aperçu public et est prise en charge à la fois sur les API du modèle de base en paiement par jeton et sur les points de terminaison de débit réservé.
Cet article décrit l’appel de fonction et comment l’utiliser dans le cadre des flux de travail de votre application d’IA générative. L’appel de fonction Databricks compatible avec OpenAI n’est disponible que pendant la mise en service du modèle dans le cadre des API du modèle de base.
Qu’est-ce que l’appel de fonction
L’appel de fonction vous permet de contrôler la sortie des grands modèles de langage (LLM, Large Language Model) , afin qu’ils génèrent des réponses structurées de manière plus fiable. Lorsque vous utilisez un appel de fonction, vous décrivez les fonctions dans l’appel d’API en décrivant les arguments de la fonction à l’aide d’un schéma JSON. Le LLM lui-même n’appelle pas ces fonctions, mais il crée plutôt un objet JSON que les utilisateurs peuvent employer pour appeler les fonctions dans leur code.
Pour l’appel de fonction sur Databricks, la séquence de base des étapes est la suivante :
- Appelez le modèle en utilisant la requête soumise et un ensemble de fonctions définies dans le paramètre
tools
. - Le modèle détermine s’il faut appeler ou non les fonctions définies. Lorsque la fonction est appelée, le contenu est un objet JSON de chaînes qui adhère à votre schéma personnalisé.
- Analysez les chaînes en JSON dans votre code et appelez votre fonction avec les arguments fournis s’ils existent.
- Appelez à nouveau le modèle en ajoutant la réponse structurée en tant que nouveau message. La structure de la réponse est définie par les fonctions que vous avez précédemment fournies dans
tools
. À partir de là, le modèle récapitule les résultats et envoie ce résumé à l’utilisateur.
Quand utiliser l’appel de fonction
Voici des exemples d’utilisation de l’appel de fonction :
- Créer des assistants capables de répondre aux questions en appelant d’autres API. Par exemple, vous pouvez définir des fonctions telles que
send_email(to: string, body: string)
oucurrent_weather(location: string, unit: 'celsius' | 'fahrenheit')
. - Définir et utiliser des appels d’API basés sur le langage naturel. Comme prendre l’énoncé, « Qui sont mes meilleurs clients ? » et en faire un appel d’API nommé
get_customers(min_revenue: int, created_before: string, limit: int)
et appeler cette API.
Pour les tâches d’inférence par lots ou de traitement des données, telles que la conversion de données non structurées en données structurées. Databricks recommande d’utiliser des sorties structurées.
Modèles pris en charge
Le tableau suivant répertorie les modèles pris en charge et la fonctionnalité de service de modèle qui rend chaque modèle disponible.
- Pour les modèles mis à disposition par les API Foundation Model, consultez les limites des API Foundation Model pour la disponibilité de la région.
- Pour les modèles mis à disposition par des modèles externes, consultez Disponibilité de la région pour la disponibilité de la région.
Important
À compter du 11 décembre 2024, Meta-Llama-3.3-70B-Instruct remplace la prise en charge de Meta-Llama-3.1-70B-Instruct dans les points de terminaison de paiement par jeton des API de modèle de base.
Important
Meta Llama 3.3 est concédé sous licence LLAMA 3.3 Community License, Copyright © Meta Platforms, Inc. Tous les droits réservés. Les clients sont responsables de leur conformité aux termes de cette licence et de la Llama 3.3 Acceptable Use Policy.
Meta Llama 3.1 est concédé sous Licence de la communauté LLAMA 3.1, Copyright © Meta Platforms, Inc. Tous droits réservés. Les clients sont tenus de d’assurer de leur conformité vis-à-vis des licences de modèle applicables.
Modèle | Disponible à l’aide de la fonctionnalité de service de modèle | Notes |
---|---|---|
Meta-Llama-3.3-70B-Instruct | API Foundation Model | Pris en charge sur les charges de travail de paiement par jeton et de débit provisionné. |
Meta-Llama-3.1-405B-Instruct | API Foundation Model | Pris en charge sur les charges de travail de paiement par jeton et de débit provisionné. |
Meta-Llama-3.1-8B-Instruct | API Foundation Model | Pris en charge uniquement sur les charges de travail de débit approvisionnées. |
gpt-4o | Modèles externes | |
gpt-4o-2024-08-06 | Modèles externes | |
gpt-4o-2024-05-13 | Modèles externes | |
gpt-4o-mini | Modèles externes |
Utilisation de l’appel de fonction
Pour utiliser l’appel de fonction avec votre application d’IA générative, vous devez fournir les parameters
de fonction et une description
.
Le comportement par défaut pour tool_choice
est "auto"
. Cela permet au modèle de décider quelles fonctions appeler et s’il doit les appeler.
Vous pouvez personnaliser le comportement par défaut en fonction de votre cas d’utilisation. Les options suivantes vous sont proposées :
- Définissez
tool_choice: "required"
. Dans ce scénario, le modèle appelle toujours une ou plusieurs fonctions. Le modèle sélectionne quelle fonction ou quelles fonctions appeler. - Définissez
tool_choice: {"type": "function", "function": {"name": "my_function"}}
. Dans ce scénario, le modèle appelle uniquement une fonction spécifique. - Définissez
tool_choice: "none"
pour désactiver l’appel de fonction et faire en sorte que le modèle génère uniquement un message destiné à l’utilisateur.
L’exemple suivant est un exemple à tour unique utilisant le Kit de développement logiciel (SDK, Software Development Kit) d’OpenAI et son paramètre tools
. Pour plus d’informations sur la syntaxe, veuillez consulter Tâche de conversation.
Important
Pendant la Préversion publique, l’appel de fonction sur Databricks est optimisé pour l’appel de fonction à tour unique.
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
)
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": [
"celsius",
"fahrenheit"
]
}
}
}
}
}
]
messages = [{"role": "user", "content": "What is the current temperature of Chicago?"}]
response = client.chat.completions.create(
model="databricks-meta-llama-3-3-70b-instruct",
messages=messages,
tools=tools,
tool_choice="auto",
)
print(json.dumps(response.choices[0].message.model_dump()['tool_calls'], indent=2))
Schéma JSON
Les API du modèle de base prennent largement en charge les définitions de fonctions acceptées par OpenAI. Cependant, l’utilisation d’un schéma JSON plus simple pour les définitions d’appels de fonction entraîne une génération JSON d’appel de fonction 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"
Par ailleurs, les limites suivantes s’appliquent :
- Le nombre maximal de clés spécifié dans le schéma JSON est de
16
. - 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îneront une génération de qualité inférieure. Si possible, essayez d’aplatir le schéma JSON pour obtenir de meilleurs résultats.
Utilisation d’un jeton
L’injection de prompt et d’autres techniques sont utilisées pour améliorer la qualité des appels d’outils. 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. Plus vous utilisez d’outils, plus vos jetons d’entrée augmentent.
Limites
Les limitations suivantes s’appliquent à l’appel de fonctions pendant la Préversion publique :
- La solution d’appel de fonction actuelle est optimisée pour les appels de fonction à tour unique. L’appel de fonction à plusieurs tours est pris en charge pendant la préversion, mais est en cours de développement.
- L’appel de fonction parallèle n’est pas pris en charge.
- Le nombre maximal de fonctions pouvant être définies dans
tools
est de 32 fonctions. - Pour la prise en charge du débit provisionné, l’appel de fonction n’est pris en charge que sur les nouveaux points de terminaison. Vous ne pouvez pas ajouter d’appel de fonction aux points de terminaison créés précédemment.
Exemple de notebook
Consultez le bloc-notes suivant pour des exemples détaillés d’appel de fonctions