Function Calling (Tool Use)
L’appel de fonctions, ou utilisation d’outils, permet à un modèle de langage de demander l’exécution d’une fonction externe à l’aide d’arguments JSON, que l’application exécute puis renvoie.
L’appel de fonctions, également appelé appel d’outils ou utilisation d’outils, est la capacité d’un grand modèle de langage (LLM) à répondre en demandant l’exécution d’une fonction externe plutôt qu’en produisant du texte brut. L’application décrit chaque outil disponible à l’aide d’un nom, d’un objectif et d’un schéma JSON pour ses arguments. Lorsqu’une requête nécessite des données à jour ou une action, le modèle répond en indiquant le nom de l’outil et ses arguments JSON ; l’application exécute la fonction et le modèle rédige sa réponse à partir du résultat. Le modèle n’exécute jamais rien lui-même. Le Toolformer de Meta a montré en février 2023 qu’un modèle pouvait apprendre à insérer des appels d’API dans son propre texte, et OpenAI a ajouté l’appel de fonctions à son API le 13 juin 2023, avec des modèles affinés pour détecter quand une fonction est nécessaire et formater des arguments correspondant à sa signature. Tous les grands fournisseurs de modèles le prennent désormais en charge, et les modèles ouverts l’apprennent grâce à leur ajustement sur instructions et à leurs modèles de conversation.
Fonctionnement de l’appel de fonctions#
Un appel d’outil est un aller-retour entre le modèle et l’application, répété jusqu’à ce que le modèle dispose des informations nécessaires :
Le code ci-dessous simule les deux côtés d’un aller-retour au format du guide sur l’appel de fonctions d’OpenAI ; la réponse du modèle est écrite directement pour que le code s’exécute sans clé API.
import json
from jsonschema import validate
# La définition de l’outil envoyée avec la requête : un nom, une fonction et un schéma JSON pour les arguments
tool = {
"type": "function",
"name": "get_order_status",
"description": "Look up the shipping status of an order by its number.",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string", "pattern": "^[0-9]+$"}},
"required": ["order_id"],
},
}
# La sortie du modèle est un appel de fonction dont les arguments arrivent sous forme de chaîne JSON
call = {"type": "function_call", "call_id": "call_1", "name": "get_order_status", "arguments": '{"order_id": "4417"}'}
args = json.loads(call["arguments"])
validate(args, tool["parameters"]) # Lève une exception avant toute exécution si les arguments ne respectent pas le schéma
# L’application exécute sa propre fonction et renvoie le résultat sous le même call_id
orders = {"4417": "Shipped, arriving Thursday"}
print({"type": "function_call_output", "call_id": call["call_id"], "output": orders[args["order_id"]]})Il affiche {'type': 'function_call_output', 'call_id': 'call_1', 'output': 'Shipped, arriving Thursday'}, l’élément que l’application ajoute à la conversation avant de rappeler le modèle. Si tu définis "strict": true sur un outil, l’API applique le décodage contraint, de sorte que les arguments générés par le modèle respectent toujours le schéma.
Choisir et enchaîner les outils#
Les modèles peuvent émettre plusieurs appels indépendants au cours d’un même tour, par exemple pour vérifier deux commandes à la fois, et une application peut imposer un outil précis, en exiger un ou interdire les outils pendant un tour. Enchaîner des appels d’un tour à l’autre, où chaque résultat détermine l’appel suivant, est la boucle qui transforme un modèle en agent IA exécuté dans un environnement d’agent. Le Berkeley Function Calling Leaderboard évalue ces compétences : choisir la bonne fonction, renseigner ses arguments, effectuer des appels en parallèle et sur plusieurs tours, et refuser lorsqu’aucun outil ne convient. Comme les résultats des outils sont renvoyés au modèle en entrée, une page Web ou un document récupéré par un outil peut contenir une injection de prompt ; les applications accordent donc aux outils le minimum de privilèges nécessaire et demandent l’approbation d’une personne avant les achats, les suppressions ou l’envoi de messages.
Les modèles de vision se prêtent naturellement à être utilisés comme outils, car leur sortie est déjà structurée. Dans Ultralytics YOLO, Results.summary() renvoie chaque objet détecté par un modèle YOLO26 sous forme de dictionnaire contenant le nom de la classe, son indice, la confiance et les coordonnées de la boîte ; une liste que json.dumps convertit directement en résultat d’outil, afin qu’un modèle de conversation ou un modèle vision-langage (VLM) puisse compter et localiser des objets dans une photo en appelant le mode predict.
Appel de fonction et notions connexes#
- Agents d’utilisation de l’ordinateur : Ils utilisent des logiciels au moyen de captures d’écran, de clics et de frappes au clavier, ce qui couvre les applications sans API. Un appel de fonction atteint le même résultat avec une seule requête structurée lorsqu’une API existe.
- Sorties structurées : Cette approche contraint la réponse finale d’un modèle à respecter un schéma, par exemple pour extraire des champs d’une facture. L’appel de fonction utilise les mêmes schémas pour demander une action et attend un résultat en retour.
- Génération augmentée par récupération (RAG) : Ajoute les documents récupérés au prompt. Un outil de recherche peut mettre en œuvre la RAG, et la RAG agentique permet au modèle de décider quand effectuer une recherche et quoi rechercher.
- Model Context Protocol (MCP) : Un protocole ouvert, introduit par Anthropic en novembre 2024, qui permet aux applications de découvrir les outils fournis par des programmes externes. Le modèle invoque toujours un outil MCP au moyen d’un appel de fonction.










