Aller au contenu

Extrait gratuit · Sans compte · Sans clé API

Un outil déclaré n’est pas encore un outil exécuté.

Écrivez un outil LangChain, validez ses arguments et voyez exactement quand votre code s’exécute. Un premier mécanisme utile pour comprendre les agents.

Une leçon de la formation · Accès gratuit

Créer un tool avec Zod — exemple BMI

Regardez la démonstration, puis essayez l’exemple expliqué ci-dessous à votre rythme.

Chargement de la vidéo…

Le résultat que vous allez obtenir

Un outil additionne deux nombres. Vous observez un compteur : il reste à zéro quand l’outil est déclaré, puis passe à un quand vous appelez invoke. Une entrée invalide est rejetée avant d’exécuter votre fonction.

Cet exemple est volontairement local : aucun modèle, aucun secret et aucun appel payant. Il ne simule pas une décision réelle d’un LLM. Vous isolez la partie que votre application doit maîtriser : l’exécution.

Les trois moments à distinguer

  1. Déclaration : vous décrivez une fonction, son nom et ses arguments attendus.
  2. Sélection : dans un agent, le modèle peut demander un appel avec des arguments. Cette étape n’est pas exécutée dans notre exemple local.
  3. Exécution : votre application appelle l’outil, reçoit le résultat et peut le renvoyer au modèle.

Chargement du schéma…

bindTools sert à rendre les outils disponibles au modèle. Pour un outil exécuté par votre application, cette déclaration ne remplace pas l’exécution. Certains fournisseurs proposent aussi des outils exécutés chez eux : c’est un autre mécanisme.

Préparez votre dossier

Vous avez besoin de Node.js 22 ou ultérieur, de npm et d’un terminal. Créez un dossier vide, puis téléchargez les trois fichiers ci-dessous dans ce dossier. Le nom du programme est tool-demo.mts ; conservez cette extension.

npm ci
npm start

Le verrou de dépendances rend l’installation reproductible. Cet exemple utilise @langchain/core 1.2.14. Vous pouvez consulter le programme complet.

Lisez le cœur du programme

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

Le schéma décrit les entrées autorisées. La fonction fournit le calcul. invoke déclenche la validation puis l’exécution. Ici, les arguments sont écrits à la main pour rendre le comportement reproductible.

Dans un agent complet, vous récupéreriez les appels demandés par le modèle, vérifieriez quels outils sont autorisés, les exécuteriez puis restitueriez leurs résultats. Un outil qui paie, écrit ou supprime demanderait des protections adaptées ; un schéma valide ne suffit pas à autoriser une action.

Vérifiez votre résultat

Avant invoke : 0 exécution
Résultat : 5
Après invoke : 1 exécution
Entrée invalide : rejetée avant exécution

Si vous n’obtenez pas ces quatre lignes, vérifiez la version de Node.js, l’installation et les noms des fichiers. Aucune clé API ne résoudra une erreur de cet exemple : il n’appelle pas de modèle.

À vous de jouer

Remplacez les arguments par a: 8 et b: 4. Avant de lancer le programme, prédisez le résultat. Puis essayez a: "8" : pourquoi la fonction ne devrait-elle pas s’exécuter ? Adaptez les assertions du programme si vous changez les nombres.

Votre checkpoint : vous savez expliquer la différence entre décrire une capacité et l’exécuter, ainsi que le rôle du schéma d’entrée.

Pour aller plus loin

Le mécanisme des outils est documenté dans la documentation officielle LangChain. Le cours poursuit avec leur composition, les agents ReAct, les graphes et l’évaluation des exécutions.

Continuer jusqu’à une application complète

La formation relie appels LLM, outils, graphes, contexte, évaluation et projet final. Découvrez le programme et les prérequis avant de choisir.

Découvrir la formation →