Partager via


Appel de fonction sur Azure Databricks

Cet article décrit l’appel de fonction et comment l’utiliser dans le cadre des workflows de vos applications d’IA générative. L’appel de fonction Databricks compatible avec OpenAI est disponible uniquement pendant la mise en service de modèles dans le cadre des API Foundation Model et des points de terminaison de mise en service qui mettent en service des modèles externes.

En quoi consiste l’appel de fonction ?

L’appel de fonction vous permet de contrôler la sortie des LLM, 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 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 permettant aux utilisateurs d’appeler les fonctions dans leur code.

Pour l’appel de fonction sur Databricks, la séquence de base des étapes est la suivante :

  1. Appelez le modèle à l’aide de la requête envoyée et d’un ensemble de fonctions définies dans le paramètre tools.
  2. 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é.
  3. Analysez les chaînes en JSON dans votre code et appelez votre fonction avec les arguments fournis, le cas échéant.
  4. Rappelez 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. Ensuite, le modèle résume les résultats et envoie ce résumé à l’utilisateur.

Quand utiliser l’appel de fonction

Voici des exemples de cas d’utilisation de l’appel de fonction :

  • Créer des assistants capables de répondre à des questions en appelant d’autres API. Par exemple, vous pouvez définir des fonctions telles que send_email(to: string, body: string) ou current_weather(location: string, unit: 'celsius' | 'fahrenheit').
  • Définissez et utilisez des appels d’API basés sur le langage naturel. Par exemple, vous pouvez 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), puis appeler cette API.

Pour les tâches d’inférence ou de traitement des données par lots, comme 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 mise en service de modèles mettant à disposition chaque modèle. Consultez les licences de développeur de modèles applicables et les termes de ces modèles.

Importante

  • Meta-Llama-3.1-405B-Instruct sera mis hors service, comme indiqué ci-dessous. Consultez les modèles supprimés pour le modèle de remplacement recommandé et pour obtenir des conseils sur la migration pendant la dépréciation.

    • À compter du 15 février 2026, ce modèle ne sera pas disponible pour les charges de travail au paiement par jeton.
    • À compter du 15 mai 2026, ce modèle n’est pas disponible pour les charges de travail de débit approvisionnées.
  • À 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 Foundation Model.

Modèle Mise à disposition à l’aide de la fonctionnalité de mise en service de modèles Notes
Claude-Sonnet-4.5 API Foundation Model Prise en charge sur les points de terminaison de paiement par jeton.
Claude-Haiku-4.5 API Foundation Model Prise en charge sur les points de terminaison de paiement par jeton.
Qwen3-Next 80B A3B Instruct (bêta) API Foundation Model Prise en charge sur les points de terminaison de paiement par jeton.
GPT OSS 20B API Foundation Model Prise en charge sur les points de terminaison de paiement par jeton et à débit provisionné.
GPT OSS 120B API Foundation Model Prise en charge sur les points de terminaison de paiement par jeton et à débit provisionné.
Gemma-3-12B API Foundation Model Prise en charge sur les points de terminaison de paiement par jeton et à débit provisionné.
Claude-Sonnet-4 API Foundation Model Prise en charge sur les points de terminaison de paiement par jeton.
Claude-Opus-4.5 API Foundation Model Prise en charge sur les points de terminaison de paiement par jeton.
Claude-Opus-4.1 API Foundation Model Prise en charge sur les points de terminaison de paiement par jeton.
claude-3-7-Sonnet API Foundation Model Prise en charge sur les points de terminaison de paiement par jeton.
Meta-Llama-4-Maverick API Foundation Model Prise en charge sur les charges de travail de paiement par jeton et à débit provisionné.
Meta-Llama-3.3-70B-Instruct API Foundation Model Prise en charge sur les charges de travail de paiement par jeton et à débit provisionné.
Meta-Llama-3.1-405B-Instruct API Foundation Model Prise en charge sur les charges de travail de paiement par jeton et à débit provisionné.
Meta-Llama-3.1-8B-Instruct API Foundation Model Prise en charge sur les charges de travail de paiement par jeton et à débit provisionné.
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
claude-3-5-sonnet-latest Modèles externes Fournisseur de modèles anthropices
claude-3-5-haiku-latest Modèles externes Fournisseur de modèles anthropices
claude-3-5-opus-latest Modèles externes Fournisseur de modèles anthropices
claude-3-5-sonnet-20241022 Modèles externes Fournisseur de modèles anthropices. Ce modèle prend en charge l’appel d’outil à l’aide d’Utilisation informatique (bêta).
claude-3-5-haiku-20241022 Modèles externes Fournisseur de modèles anthropices
claude-3-5-sonnet-20240620 Modèles externes Fournisseur de modèles anthropices
claude-3-haiku-20240307 Modèles externes Fournisseur de modèles anthropices
claude-3-opus-20240229 Modèles externes Fournisseur de modèles anthropices
claude-3-sonnet-20240229 Modèles externes Fournisseur de modèles anthropices
claude-3-5-sonnet-20241022-v2:0 Modèles externes Fournisseur du modèle Bedrock Anthropic. Ce modèle prend en charge l’appel d’outil à l’aide d’Utilisation informatique (bêta).
claude-3-5-haiku-20241022-v1:0 Modèles externes Fournisseur de modèles Bedrock Anthropic
claude-3-5-sonnet-20240620-v1:0 Modèles externes Fournisseur de modèles Bedrock Anthropic
claude-3-sonnet-20240229-v1:0 Modèles externes Fournisseur de modèles Bedrock Anthropic
claude-3-opus-20240229-v1:0 Modèles externes Fournisseur de modèles Bedrock Anthropic

Utilisez 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". Ainsi, le modèle peut décider des fonctions à appeler et s’il doit les appeler.

Vous pouvez personnaliser le comportement par défaut en fonction de votre cas d’utilisation. Voici les options qui s’offrent à vous :

  • Définissez tool_choice: "required". Dans ce scénario, le modèle appelle toujours une ou plusieurs fonctions. Le modèle sélectionne la ou les 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 à un tour utilise le kit de développement logiciel (SDK) d’OpenAI et son paramètre tools. Pour plus d’informations sur la syntaxe, consultez l’API Chat Completions.

Importante

Pendant la préversion publique, l’appel de fonction sur Databricks est optimisé pour l’appel de fonction à un tour.

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

Ce paramètre prend également en charge l’utilisation de l’ordinateur (bêta) pour les modèles Claude.

Schéma JSON

Les API Foundation Model 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 Foundation Model 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 utilisant 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"

De plus, les limitations suivantes s’appliquent :

  • Le nombre maximal de clés spécifié dans le schéma JSON est de 16.
  • Les API Foundation Model n’imposent pas de contraintes de longueur ou de taille pour les objets et les tableaux.
    • Cela inclut des mots clés comme 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.

Utilisation d’un jeton

L’injection d’invite et d’autres techniques permettent d’améliorer la qualité des appels d’outil. Cela impacte 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 sont nombreux.

Limitations

Les limitations suivantes s’appliquent à l’appel de fonction pendant la préversion publique :

  • Pour les fonctions multitours appelant Databricks, vous recommandez les modèles Claude pris en charge.
  • Si vous utilisez Llama 4 Maverick, 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.
  • 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

Voir le notebook suivant pour des exemples détaillés d’appels de fonction

Notebook d’exemples d’appels de fonction

Obtenir le notebook