Quand on dit quâun agent peut "utiliser un outil", on dirait quâil clique sur un bouton ou lance un programme.
Mais Ă lâintĂ©rieur, ça fonctionne autrement. Lâagent ne peut pas ouvrir un fichier, envoyer un email ou appeler une API tout seul.
Il travaille uniquement avec du texte.
Alors comment un agent interagit avec le monde réel ?
Comment un modĂšle texte peut :
- Obtenir des données depuis une base
- Envoyer une requĂȘte Ă un serveur
- Ăcrire un rĂ©sultat dans un fichier
La réponse est le tool calling.
Le modĂšle nâexĂ©cute pas les actions lui-mĂȘme. Il demande au systĂšme de les exĂ©cuter.
Il décide quand un outil est nécessaire.
Et le systÚme autour exécute.
Ce quâest vraiment un outil

Un outil est une action dont lâagent peut demander lâexĂ©cution.
Ăa peut ĂȘtre :
- Obtenir des données depuis une API
- Trouver des informations dans une base
- Lire un fichier
- Envoyer un message
- Ăcrire un rĂ©sultat
Pour le modĂšle, câest une autre option de rĂ©ponse.
Au lieu dâĂ©crire du texte, il peut dire :
"Pour avancer, jâai besoin que cette action soit exĂ©cutĂ©e."
Et préciser :
- Quel outil utiliser
- Avec quels paramĂštres
Par exemple :
{
"tool": "get_user_data",
"parameters": {
"user_id": 123
}
}
Ă ce moment, le modĂšle nâexĂ©cute pas lâaction lui-mĂȘme. Il propose seulement de lâexĂ©cuter.
Si le systĂšme autorise lâaction, il exĂ©cute lâoutil et renvoie le rĂ©sultat (DonnĂ©e, Statut ou Erreur) au modĂšle.
AprĂšs ça, lâagent dĂ©cide quoi faire ensuite.
Comment le modĂšle sait quels outils existent
Le modĂšle ne cherche pas des outils tout seul.
On lui indique Ă lâavance quelles actions sont disponibles.
Avant de commencer, le systĂšme envoie au modĂšle une liste dâoutils quâil peut utiliser.
Chaque outil a :
- Nom - comment il sâappelle
- Description - ce quâil fait
- ParamÚtres - quelles données il demande
Par exemple :
{
"name": "get_user_data",
"description": "RécupÚre les informations utilisateur par ID",
"parameters": {
"user_id": "number"
}
}
Pour le modĂšle, câest un ensemble dâactions possibles Ă choisir au bon moment.
Il nâinvente pas de nouveaux outils.
Il choisit parmi ceux qui sont autorisés.
Câest pour ça quâun agent ne peut pas appeler nâimporte quelle API.
Seulement celles qui lui ont été données.
Comment lâagent choisit un outil
Ă nâimporte quel moment, lâagent peut avoir plusieurs options dâaction.
Il peut :
- Ăcrire une rĂ©ponse
- Utiliser un outil
- Ou terminer la tĂąche
Pour choisir, il regarde :
- Lâobjectif actuel
- Les données disponibles
- Le résultat des étapes précédentes
Et il se pose une question simple :
"Quâest-ce qui mâaide Ă avancer vers le rĂ©sultat, maintenant ?"
Si la rĂ©ponse ne suffit pas, il faut peut-ĂȘtre appeler un outil pour obtenir de nouvelles donnĂ©es.
Si les données sont déjà suffisantes, il peut continuer sans outil.
Si la tĂąche est terminĂ©e, il peut arrĂȘter.
Ce nâest pas un script rigide.
Câest un choix que lâagent fait Ă chaque boucle.
Câest exactement pour ça quâil peut utiliser diffĂ©rents outils selon la situation, et pas dans un ordre fixe prĂ©dĂ©fini.
Ce qui se passe aprĂšs un appel dâoutil
Quand lâagent choisit un outil et demande son exĂ©cution, le systĂšme autour prend la main.
Il :
- Vérifie si cet outil est autorisé
- ExĂ©cute lâaction
- RécupÚre le résultat
Ăa peut ĂȘtre :
- Des données depuis une API
- Le contenu dâun fichier
- Un statut dâexĂ©cution
- Ou une erreur
Ensuite, le résultat est renvoyé au modÚle sous forme de texte.
Pour lâagent, câest une nouvelle information quâil peut utiliser.
Il analyse le résultat :
- A-t-il reçu les données nécessaires ?
- Sâest-il rapprochĂ© de lâobjectif ?
- Faut-il une étape supplémentaire ?
Et sur cette base, il décide :
- Dâutiliser un autre outil
- De continuer sans outil
- Ou de terminer la tĂąche
Câest ainsi que chaque appel dâoutil devient une partie de la boucle dâaction.
En code, cela ressemble à ça
Imagine que lâagent veut obtenir des donnĂ©es utilisateur. Il ne peut pas appeler une fonction tout seul. Il peut seulement demander au systĂšme de le faire, sous forme de requĂȘte texte :
# Le modÚle décide :
# "Pour avancer, j'ai besoin des données utilisateur"
model_output = {
"tool": "get_user_data",
"parameters": {
"user_id": 123
}
}
Le modĂšle nâexĂ©cute rien. Il dit seulement : "Sâil te plaĂźt, exĂ©cute cet outil."
Cette requĂȘte est ensuite reçue par le systĂšme autour de lâagent :
def get_user_data(user_id: int):
return {"id": user_id, "name": "Anna"}
TOOLS = {
"get_user_data": get_user_data
}
Le systÚme vérifie :
- si cet outil existe
- si son utilisation est autorisée
Et seulement aprÚs, il exécute :
tool_name = model_output["tool"]
params = model_output["parameters"]
result = TOOLS[tool_name](**params)
AprÚs cela, le résultat est renvoyé au modÚle sous forme de texte :
tool_result = f"User data: {result}"
Et maintenant, lâagent peut dĂ©cider de :
- utiliser ces données
- appeler un autre outil
- ou terminer la tĂąche
Dans cet exemple, nous avons créé model_output manuellement.
Dans un agent rĂ©el, il est gĂ©nĂ©rĂ© par le modĂšle de langage lui-mĂȘme. Il analyse la tĂąche, dĂ©cide quâun outil est nĂ©cessaire, puis forme automatiquement la mĂȘme requĂȘte.
Exemple complet dâimplĂ©mentation avec LLM connectĂ©e
Analogie de la vie réelle
Imagine que tu prépares le dßner.
Tu as :
- un frigo
- une cuisiniĂšre
- un couteau
- un micro-ondes
Ce sont tous les outils que tu peux utiliser.
Tu ne peux pas :
- utiliser un four sâil nây en a pas
- ou prendre un blender sâil nâest pas dans la cuisine
Maintenant, tu veux faire une soupe.
Tu penses :
Quâest-ce qui mâaide tout de suite ?
Tu peux :
- ouvrir le frigo
- allumer la cuisiniĂšre
- ou prendre un couteau
Tu choisis un outil, tu lâutilises, puis tu regardes ce qui a changĂ©.
Ensuite, tu choisis le suivant.
Et ainsi de suite, jusquâĂ ce que le plat soit prĂȘt.
Câest pareil pour lâagent.
Il reçoit une liste dâoutils disponibles.
Il ne peut pas en inventer de nouveaux, seulement choisir parmi ceux qui existent.
à chaque étape, il décide :
quel outil aide à avancer vers le résultat
Il lâutilise et continue.
En bref
Le tool calling est la maniÚre dont un agent interagit avec le monde réel.
Le modĂšle nâexĂ©cute pas les actions lui-mĂȘme. Il demande au systĂšme de les exĂ©cuter en son nom.
Le systĂšme lui donne la liste des outils disponibles. Le modĂšle choisit le bon outil au bon moment. Le systĂšme vĂ©rifie les permissions, exĂ©cute lâaction et renvoie le rĂ©sultat.
Et sur cette base, lâagent dĂ©cide quoi faire ensuite.
FAQ
Q : Est-ce que lâagent exĂ©cute des actions tout seul ?
A : Non. Le modĂšle nâexĂ©cute pas les actions lui-mĂȘme. Il demande seulement au systĂšme dâexĂ©cuter un outil en son nom.
Q : Quâest-ce que le tool calling ?
A : Câest une façon pour le modĂšle de demander une action, par exemple obtenir des donnĂ©es ou Ă©crire un rĂ©sultat, afin dâavancer vers lâobjectif.
Q : Comment lâagent sait quels outils il peut utiliser ?
A : Avant de commencer, le systĂšme fournit au modĂšle une liste dâoutils disponibles dans laquelle il peut choisir Ă chaque Ă©tape.
Et ensuite
Maintenant, tu comprends les bases du tool calling.
Mais dans le travail réel, des questions plus difficiles arrivent :
Comment contrĂŽler quels outils lâagent peut utiliser ?
Que faire si un outil est coûteux et un autre risqué ?
Comment donner Ă lâagent accĂšs aux donnĂ©es mais interdire la suppression ?
Ce ne sont plus des bases.
Câest la rĂ©alitĂ© de la production.