Appel de fonction sur Azure Databricks
Important
Cette fonctionnalité est disponible en préversion publique et est prise en charge uniquement sur les points de terminaison de paiement par jeton des API Foundation Model.
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. - Convertir des données non structurées en données structurées. Comme l’identification et la classification des commentaires des avis sur les produits comme négatives, positives ou neutres.
Modèles pris en charge
L’appel de fonction sur Databricks prend en charge les modèles d’API de modèle de fondation payants par jeton suivants :
Important
DBRX est fourni sous la licence Databricks Open Model, Copyright © Databricks, Inc. Tous droits réservés. Les clients sont responsables de la conformité aux licences de modèles applicables, notamment aux règles de bon usage Databricks.
Llama 3 est concédé sous licence de la communauté LLAMA 3, 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.
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-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 :
- L’appel de fonction n’est pas pris en charge sur les points de terminaison de débit approvisionnés des API Foundation Model.
- 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.
Exemple de notebook
Consultez le bloc-notes suivant pour des exemples détaillés d’appel de fonctions
Bloc-notes d’exemple d’appel de fonction
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour