Le pattern d’utilisation d’outils : le pont vers le monde extérieur

IA
Agents
LLM
Patterns
Découvrez comment équiper vos agents d’outils pour qu’ils puissent interagir avec le monde extérieur : météo, bourse, et plus encore.
Date de publication

21 mai 2025

Après avoir exploré le pattern de réflexion, nous aurions pu croire que nos agents étaient imbattables. Un agent capable de réfléchir sur sa propre production, quoi de mieux ? 🤔

Pourtant, le pattern de réflexion a une faiblesse majeure. Que se passe-t-il si vous demandez à cet agent le prix actuel de l’action NVIDIA ? Ou la température d’hier à Madrid ? Comme vous le savez, l’information encodée dans les poids d’un LLM ne suffit pas à fournir des réponses précises, fraîches et spécifiques au contexte.

C’est pourquoi nous devons équiper notre agent de moyens d’accéder au monde extérieur 🌍. C’est ici qu’interviennent les Outils (Tools). Fondamentalement, les outils sont des fonctions que le LLM peut appeler pour renforcer ses capacités. C’est le cœur du deuxième pattern : le Tool Pattern.

Le Tool Use Pattern

Le Tool Use Pattern

Vous pouvez trouver le code de toute la série sur GitHub !


Le pattern d’utilisation d’outils en bref

Le Tool Use Pattern permet à un agent d’exécuter des actions concrètes en appelant des fonctions ou des APIs externes. Au lieu de se limiter à générer du texte, l’agent peut :
- Rechercher des informations fraîches et véridiques.
- Effectuer des calculs complexes ou des opérations de données.
- Interagir avec des services tiers (météo, bourse, GitHub, etc.).

Dans ce post, vous apprendrez comment fonctionnent les outils et comment les construire de zéro en utilisant Python et les LLM de Groq.


Implémentation de zéro : construire un outil

Commençons par les bases. Regardez cette fonction extrêmement simple :

Fonction simple

Fonction simple

La question est : comment rendre cette fonction disponible pour un LLM ?

Un System Prompt qui fonctionne

Pour que le LLM soit conscient de cette fonction, nous devons lui fournir des informations pertinentes dans le contexte : nom de la fonction, arguments, description, etc. Regardez le System Prompt suivant :

System Prompt

System Prompt

Ce prompt force le LLM à se comporter comme un modèle de “function calling” qui, à partir d’une liste de signatures de fonctions entre des balises XML, sélectionnera celle à utiliser.

Balises XML

Balises XML

Testons en pratique avec une question simple : “Quelle est la température actuelle à Madrid en Celsius ?”

Requête et réponse de l’LLM

Requête et réponse de l’LLM

Après avoir exécuté ce code, nous voyons que le LLM génère l’appel à l’outil :

Appel généré

Appel généré

C’est une avancée ! Nous n’avons pas encore la réponse finale, mais nous savons comment l’obtenir. Il nous suffit de :
1. Parser la sortie du LLM (supprimer les balises XML).
2. Charger la sortie sous forme de dictionnaire Python.

L’implémentation de ces étapes est disponible dans ce module Python. Une fois les arguments en place, exécuter la fonction devient facile :

Exécution de la fonction

Exécution de la fonction

Le résultat est exactement ce qu’on attendait : {"temperature": 25, "unit": "celsius"}. Enfin, nous ajoutons ce résultat à l’historique du chat pour que le LLM puisse répondre à l’utilisateur :

Réponse finale de l’agent

Réponse finale de l’agent

Et voilà comment un outil fonctionne sous le capot !


Le décorateur d’outils

Automatiser la transformation de n’importe quelle fonction en outil est essentiel. C’est là qu’intervient le décorateur d’outils (tool decorator), qui transforme une fonction Python en un objet Tool. Vous pouvez voir l’implémentation du tool_decorator ici.

Pour voir le décorateur en action, construisons un outil qui interagit avec Hacker News :

Décorateur d’outil Hacker News

Décorateur d’outil Hacker News

Le bloc de code ci-dessus transforme la fonction fetch_top_hacker_news_stories en un Tool. Sous le capot, la classe Tool génère automatiquement la signature de la fonction (vous pouvez voir comment ici).

Maintenant que nous avons notre outil, lançons l’agent :

Lancement de l’agent

Lancement de l’agent

Et voilà ! Un outil pleinement fonctionnel 🛠️ :

Résultat final de l’outil

Résultat final de l’outil

Pourquoi ça marche si bien ?

  • Accès au monde réel : Dépasse les limites de connaissances statiques du modèle.
  • Actions concrètes : Permet de passer de la réflexion à l’exécution.
  • Extensibilité : N’importe quelle API ou fonction locale devient une capacité pour l’agent.

Prochaines étapes

Dans le prochain post de cette série, nous aborderons le Planning Pattern, la technique ReAct et comment implémenter des heuristiques de raisonnement pour nos agents.

Ressources

Retour au sommet