Le déclic : décrire une fonction ne la lance pas
Vous pouvez donner au modèle une description parfaite de votre outil : cela ne signifie pas que votre fonction s’est exécutée. Cette distinction évite de chercher une erreur dans le prompt quand le problème se trouve dans le code de l’application.
Nous allons déclarer un outil d’addition, puis l’appeler nous-mêmes. Vous verrez exactement quand le calcul a lieu. Aucun modèle ni clé API : cet exemple isole l’exécution, il ne prétend pas reproduire le choix d’un outil par un LLM.
Préparer l’exemple
Installez Node.js 22 ou plus récent. Téléchargez le dossier des exemples, décompressez-le et ouvrez un terminal dans ce dossier.
npm ci
npm run toolsVersions verrouillées : @langchain/core 1.2.14, Zod 4.4.3 et tsx 4.22.4. Le programme complet est tool-demo.mts. L’installation télécharge des dépendances ; le programme n’appelle aucun fournisseur de modèles.
Trois rôles, trois responsabilités
Chargement du schéma…
Dans notre démonstration, nous fournissons les arguments à la main. Dans un agent, le modèle pourrait demander un appel ; votre application déciderait ensuite s’il est autorisé et l’exécuterait. Le schéma vérifie une forme de données, il ne remplace pas cette autorisation.
Voici le cœur du programme, après les imports de tool et de Zod :
let executions = 0;
const addition = tool(
({ a, b }) => {
executions += 1;
return String(a + b);
},
{
name: "addition",
description: "Additionne deux nombres.",
schema: z.object({ a: z.number(), b: z.number() }),
},
);
const result = await addition.invoke({ a: 2, b: 3 });tool associe votre fonction à sa description et à son schéma. invoke déclenche la validation puis la fonction. Le compteur rend cette exécution visible, même si votre outil ne produit aucun log.
Ce que vous devez observer
Avant invoke : 0 exécution
Résultat : 5
Après invoke : 1 exécution
Entrée invalide : rejetée avant exécutionLa dernière ligne vient d’un second appel avec une chaîne à la place d’un nombre. Le programme vérifie que le compteur n’augmente pas : l’entrée a été rejetée avant le calcul.
À vous : remplacez 2 et 3 par 8 et 4, adaptez l’assertion du résultat, puis relancez. Ensuite, essayez a: "8". Prédisez le comportement avant de lire le message d’erreur.
Quand le brancher à un modèle ?
Lorsque ce mécanisme fonctionne, vous pouvez rendre l’outil disponible avec bindTools, recevoir une demande du modèle et la traiter. Tous les modèles ne prennent pas en charge les mêmes outils. Certains outils sont exécutés chez le fournisseur ; ce guide concerne ceux que votre application exécute.
Avant un outil qui écrit, paie ou supprime, ajoutez les droits, limites et éventuelles validations humaines nécessaires. Un argument techniquement valide peut encore décrire une action interdite.
Votre repère : vous savez expliquer qui décrit, qui demande et qui exécute. Le premier graphe LangGraph vous aidera à organiser ces étapes.
Pour vérifier les APIs : documentation officielle des outils LangChain. Les versions de ce dossier sont verrouillées ; une mise à jour exige de rejouer ses exemples.