FrameworksAgents.com Logo

Tool calling agent IA : guide pratique

Guidecalendar_todayPublié le 8 juin 2026schedule11 min de lecturetool callingfunction calling agent

Comprenez comment un agent IA choisit, appelle et sécurise ses outils avec ReAct, JSON Schema et garde-fous de production.

Introduction

Le tool calling transforme un LLM en agent capable d'agir au lieu de seulement décrire une action. Le modèle peut sélectionner un outil, construire des arguments, déléguer l'exécution à votre runtime, puis exploiter le résultat dans sa réponse suivante. Pour un développeur, c'est la couche qui relie prompt, logique métier et APIs réelles. Dans ce guide, vous allez voir comment fonctionne cette boucle, quand utiliser ReAct, Plan-and-Execute ou MRKL, comment définir un tool fiable avec JSON Schema, et quelles pratiques rendent un agent utile sans le rendre dangereux ni opaque.

Résumé rapide

  • Un tool calling agent IA décide quand répondre directement et quand déléguer une action à un outil externe.
  • La boucle minimale est simple : intention, sélection d'outil, arguments, exécution runtime, observation, décision suivante.
  • ReAct est adapté aux tâches exploratoires, Plan-and-Execute aux missions structurées, MRKL au routage entre spécialistes.
  • La robustesse dépend surtout du schéma d'entrée, de la validation, des permissions et des logs.

Pourquoi le tool calling change vraiment un agent

Sans outils, un agent reste enfermé dans son contexte et dans ses probabilités de génération. Il peut expliquer comment appeler une API, proposer une requête SQL ou résumer un workflow, mais il ne peut ni récupérer un état réel ni déclencher une action fiable. Le tool calling ajoute une frontière explicite entre raisonnement et capacité d'exécution. Le modèle ne prétend plus avoir déjà fait l'action : il demande l'appel d'un tool, attend une observation, puis continue.

Cette séparation change l'architecture. Vous ne concevez plus seulement un prompt ; vous concevez un protocole entre un LLM et un environnement contrôlé. C'est pour cela qu'un tutoriel comme Créer son premier agent IA bascule vite vers la notion d'outils : dès qu'un agent doit consulter des données fraîches, écrire dans un système ou enchaîner plusieurs étapes, le texte seul ne suffit plus.

Le gain principal n'est pas une intelligence magique. Il est plus concret : données à jour, actions vérifiables, traçabilité des résultats et baisse des hallucinations sur les faits opérationnels. Si l'agent lit réellement un ticket, interroge une base ou déclenche un job, vous savez d'où vient l'information affichée à l'utilisateur.

Le tool calling force aussi un meilleur découpage des responsabilités. Le modèle choisit une intention structurée ; votre application valide les paramètres, contrôle les permissions, applique les timeouts et exécute l'action réelle. Ce découpage est ce qui permet ensuite d'ajouter planification, mémoire, supervision ou reprise sur erreur sans perdre en sécurité.

Comment fonctionne la boucle sélection → appel → observation

Dans la plupart des stacks, la boucle d'un agent avec tools suit toujours les mêmes étapes :

  1. Lire la demande et le contexte : instruction utilisateur, mémoire utile, état courant, liste des tools exposés.
  2. Choisir entre réponse directe et tool call : le modèle décide s'il a déjà assez d'information ou s'il doit déléguer.
  3. Construire les arguments : il remplit les champs attendus par l'outil, idéalement sous contrainte d'un schéma strict.
  4. Exécuter côté runtime : votre code valide, journalise, applique retries/timeouts, puis appelle l'API ou la fonction réelle.
  5. Renvoyer une observation : la sortie de l'outil revient au modèle sous forme structurée ou texte court.
  6. Décider de la suite : répondre, appeler un autre tool, réviser le plan ou demander une confirmation.

Le point clé est souvent mal compris : le modèle n'exécute pas l'outil. Il produit une intention d'appel ; le runtime exécute. Cette différence évite deux erreurs classiques : croire qu'un appel a eu lieu alors qu'il s'agit d'un simple texte, et faire confiance à des arguments jamais validés.

Voici un flux minimal :

Utilisateur → LLM
LLM → tool_call(name="search_docs", arguments={"query":"quota API"})
Runtime → valide et exécute search_docs
Runtime → observation: "3 documents trouvés"
LLM → tool_call(name="read_doc", arguments={"id":"doc_2"})
Runtime → exécute read_doc
Runtime → observation: "La limite est 100 requêtes/min"
LLM → réponse finale

Exemple d'intention structurée :

{
  "decision": "tool_call",
  "tool": "search_docs",
  "arguments": {
    "query": "quota API"
  }
}

Cette boucle devient plus intéressante dès qu'elle s'insère dans un workflow plus large. Dans un système simple, elle tourne une ou deux fois. Dans une architecture plus mature, elle est encadrée par de la planification, du routage et de la mémoire. Si vous travaillez déjà sur un guide de planification d'agent, retenez que le planning ne remplace pas les tools : il détermine surtout quand et dans quel ordre les appeler.

ReAct, Plan-and-Execute et MRKL : quel pattern choisir ?

Le tool calling ne correspond pas à une seule forme d'orchestration.

  • ReAct alterne observation, raisonnement intermédiaire et action. Il convient aux tâches exploratoires : support, recherche documentaire, analyse de logs.
  • Plan-and-Execute sépare le plan global de l'exécution détaillée. Il fonctionne bien pour les missions longues, budgétées ou validées par étapes.
  • MRKL route la demande vers le bon spécialiste : SQL, recherche, navigateur, outil métier, exécuteur de code.

Le résumé utile est simple : ReAct optimise l'exploration, Plan-and-Execute optimise l'organisation, MRKL optimise le routage. En pratique, les systèmes sérieux combinent souvent les trois. Un agent peut planifier, router chaque sous-tâche, puis résoudre les détails en boucle courte.

Définir un tool fiable avec JSON Schema

Un bon tool est simple à choisir, difficile à mal utiliser et facile à diagnostiquer. Le point de départ est un contrat d'entrée strict. Plus votre schéma est précis, moins le modèle doit deviner.

{
  "name": "get_ticket",
  "description": "Récupère un ticket de support par identifiant et retourne son état, sa priorité et son résumé.",
  "input_schema": {
    "type": "object",
    "properties": {
      "ticket_id": {
        "type": "string",
        "description": "Identifiant unique du ticket, par exemple SUP-1842"
      },
      "include_comments": {
        "type": "boolean",
        "description": "Inclure ou non les trois derniers commentaires"
      }
    },
    "required": ["ticket_id"],
    "additionalProperties": false
  }
}

Ce schéma apporte déjà quatre bénéfices concrets : nom d'action clair, paramètres visibles, champs obligatoires explicites et rejet des propriétés inattendues.

Exemple de function calling côté application

Voici une mécanique minimale avec le SDK OpenAI : définition du tool, génération d'appel et exécution runtime.

from openai import OpenAI
import json

client = OpenAI()

def get_ticket(ticket_id: str, include_comments: bool = False):
    return {
        "ticket_id": ticket_id,
        "status": "open",
        "priority": "high",
        "summary": "Erreur de synchronisation CRM",
        "comments": ["client impacté"] if include_comments else []
    }

tools = [{
    "type": "function",
    "function": {
        "name": "get_ticket",
        "description": "Récupère un ticket de support par identifiant.",
        "parameters": {
            "type": "object",
            "properties": {
                "ticket_id": {"type": "string"},
                "include_comments": {"type": "boolean"}
            },
            "required": ["ticket_id"],
            "additionalProperties": False
        }
    }
}]

response = client.responses.create(
    model="gpt-4.1",
    input="Lis le ticket SUP-1842 et résume la priorité.",
    tools=tools
)

for item in response.output:
    if item.type == "function_call" and item.name == "get_ticket":
        args = json.loads(item.arguments)
        result = get_ticket(**args)
        print(result)

Le SDK change d'un fournisseur à l'autre, mais la discipline reste la même : le modèle propose un appel structuré, l'application valide, exécute, puis renvoie une observation propre.

Comparaison neutre de l'ergonomie tool calling

CritèreOpenAIAnthropicLangChain
Définition des toolsDéclarations structurées proches du function callingDéclarations centrées sur input_schemaAbstractions Python au-dessus des fournisseurs
Modèle mentalAppel d'outil intégré au flux de réponsesAlternance messages / blocs d'outil très expliciteCouche d'orchestration configurable
Validation côté appIndispensable, généralement simple à brancherIndispensable, avec schémas très visiblesDépend de vos wrappers et de votre chaîne
Point fortDémarrage rapide pour un petit catalogueContrats d'entrée lisiblesBon support des chaînes multi-outils
Limite fréquenteTendance à surcharger le promptDemande des observations propresPeut devenir abstrait si le besoin est simple

Ce tableau ne dit pas qui « gagne ». Il montre surtout où se situe l'effort : primitives natives chez OpenAI et Anthropic, couche d'orchestration plus large chez LangChain.

Exemple concret

Prenons un cas reproductible : un agent support doit répondre à la question « le ticket SUP-1842 est-il prioritaire et faut-il prévenir l'équipe CRM ? ». L'agent dispose de trois tools : get_ticket, get_account_health et post_slack_message.

Le déroulé minimal peut être le suivant :

  1. l'utilisateur demande un état de situation ;
  2. l'agent appelle get_ticket(ticket_id="SUP-1842") ;
  3. le runtime retourne un ticket ouvert, priorité haute, impact CRM ;
  4. l'agent appelle get_account_health(account_id="ACME-42") pour vérifier si d'autres incidents sont liés ;
  5. si le compte est déjà dégradé, l'agent propose un message Slack de coordination ;
  6. l'envoi effectif n'a lieu qu'après confirmation humaine.

Une observation structurée suffisante pour alimenter la suite peut ressembler à ceci :

{
  "ticket_id": "SUP-1842",
  "status": "open",
  "priority": "high",
  "system": "crm_sync",
  "customer_impact": true
}

Réponse finale attendue de l'agent : « Le ticket SUP-1842 est ouvert et prioritaire, avec impact client. Je recommande de prévenir l'équipe CRM. Voulez-vous que je prépare le message Slack ? »

Cet exemple montre trois points pratiques. D'abord, le tool calling ne remplace pas la logique produit : c'est votre runtime qui décide qu'un envoi Slack reste une action confirmée. Ensuite, l'agent gagne en précision parce qu'il travaille sur des observations réelles, pas sur des suppositions. Enfin, la qualité de la réponse dépend directement de la clarté des outils exposés, sujet détaillé dans Function calling et tool use : équiper un agent IA d'outils.

Bonnes pratiques

Les erreurs les plus fréquentes sont prévisibles. Beaucoup d'équipes exposent trop d'outils, rédigent des descriptions vagues, acceptent des arguments incomplets ou retournent des sorties impossibles à parser. Résultat : sélection incohérente, retries inutiles et débogage pénible.

Pour éviter cela, gardez quelques règles simples :

  • réduisez le catalogue visible à la tâche courante ;
  • interdisez les propriétés inattendues avec additionalProperties: false ;
  • normalisez les erreurs avec un format stable ;
  • rendez les actions à effet de bord idempotentes ;
  • mesurez la sélection d'outil avant d'ajouter de nouveaux modules.

Ajoutez aussi une discipline d'observabilité dès le premier prototype. Pour chaque appel, conservez l'outil choisi, les arguments validés, le temps d'exécution, le statut final et la raison d'un éventuel refus. Ces traces servent autant au debugging qu'à l'amélioration du catalogue de tools. Quand un agent hésite souvent entre deux actions, le problème vient rarement du modèle seul : il vient d'un contrat trop large, de descriptions qui se recouvrent ou d'une sortie runtime trop pauvre pour guider le tour suivant.

Sur les opérations sensibles, ajoutez un palier de confirmation. Lire un ticket ou une page de documentation peut être automatique ; envoyer un email, créer une facture ou supprimer une ressource ne devrait pas l'être par défaut. Si vous voulez passer de la théorie à l'implémentation, vous pouvez ensuite explorer Créer vos propres tools pour agents avec OpenClaw pour transformer ces contrats en skills actionnables.

Questions fréquentes

Comment créer un tool pour agent IA ?

Commencez par une seule action clairement nommée, avec peu de paramètres et un schéma strict. Un bon function calling agent n'a pas besoin d'un gros catalogue au départ : il a besoin d'un contrat lisible, d'une validation runtime et d'une sortie structurée que l'agent peut réutiliser sans ambiguïté.

Quelle différence entre tool calling et function calling ?

Dans la pratique, les deux termes sont proches. Function calling insiste sur le format structuré de l'appel, alors que tool calling couvre plus largement la sélection d'outil, l'exécution, l'observation et le routage. Pour un développeur, la vraie question est surtout : qui décide, qui exécute et comment le résultat revient dans la boucle.

Quand utiliser ReAct plutôt que Plan-and-Execute ?

Utilisez ReAct agent quand la tâche exige de l'exploration progressive : chercher, lire, comparer, ajuster. Préférez Plan-and-Execute quand la mission est longue, séquencée et budgétée. Le premier maximise l'adaptation en temps réel ; le second améliore la prévisibilité, le contrôle du coût et la lisibilité de l'orchestration.

Comment éviter les mauvais choix d'outil ?

La meilleure tool selection strategy consiste à réduire l'ambiguïté. Limitez les tools visibles, rédigez des descriptions nettement distinctes, retournez des erreurs explicites et observez les confusions dans vos logs. Quand deux outils sont souvent intervertis, ce n'est pas un problème de modèle en premier lieu : c'est souvent un problème de contrat.

Articles liés

Le tool calling devient utile dès qu'un agent doit interagir avec des données ou des systèmes réels, pas seulement générer du texte. Commencez avec peu d'outils, un schéma strict et des logs lisibles, puis ajoutez planification et routage seulement quand les usages le justifient. La prochaine étape logique est d'implémenter un premier tool exécutable puis de mesurer comment l'agent le sélectionne en situation réelle.

Restez informé sur les agents IA

Nouveaux tutoriels, comparatifs et guides pratiques directement dans votre boîte mail.

homeAccueilcodeFrameworkssmart_toyAgentsmenu_bookTutorielsTwitter