Votre premier agent IA utilisant des outils avec LangChain
Créez un petit agent mathématique LangChain en Python : initialisez un modèle de chat, enregistrez des outils, laissez le LLM choisir quelle fonction appeler, et observez l’utilisation de plusieurs outils en succession.
Un petit exercice en Python + LangChain permet de créer un agent de type calculatrice qui peut invoquer des fonctions d’addition, de soustraction, de multiplication, de division ou de calcul de racine carrée selon les besoins.
L’arithmétique n’est qu’un élément secondaire. La leçon importante réside dans l’observation d’un LLM qui reçoit des fonctions appelables et choisit quelle fonction invoquer à quel moment.
Exemples de questions que l’agent finalisé peut résoudre :
Multipliez 25 par 4. Calculez la racine carrée de 144, puis multipliez ce résultat par 5.
Au lieu de programmer séquentiellement les calculs, plusieurs fonctions sont enregistrées. Le modèle choisit parmi elles en fonction des instructions fournies par l’utilisateur.
1. Initialiser le modèle
Commencez par construire le modèle de conversation :
from langchain.chat_models import init_chat_model
model = init_chat_model("openai:gpt-4o-mini")
Rien d’approchant un agent n’existe pour l’instant — seulement un modèle de texte capable de lire et d’écrire.
2. Enregistrer les fonctions appelables
Les agents deviennent utiles lorsqu’ils vont au-delà de la simple génération de texte et peuvent appeler des fonctions d’application.
Définissez cinq assistants minimaux :
from langchain.tools import tool
import math
@tool
def add(a: float, b: float) -> float:
"""Add two numbers."""
return a + b
@tool
def subtract(a: float, b: float) -> float:
"""Subtract two numbers."""
return a - b
@tool
def multiply(a: float, b: float) -> float:
"""Multiply two numbers."""
return a * b
@tool
def divide(a: float, b: float) -> float:
"""Divide two numbers."""
if b == 0:
raise ValueError("Cannot divide by zero.")
return a / b
@tool
def square_root(a: float) -> float:
"""Calculate the square root of a number."""
if a < 0:
raise ValueError("Cannot calculate square root of a negative number.")
return math.sqrt(a)
L’ajout du tag @tool permet de présenter chaque fonction sous une forme compréhensible par le moteur d’exécution de l’agent.
Deux éléments guident le modèle :
- Les paramètres annotés indiquent les types d’arguments attendus.
a: float
b: float
- Les documents de description fournissent des explications en langage courant que le modèle lit pour déterminer la pertinence.
Dans le cadre des outils d’agent, la description narrative d’une fonction fait partie de l’interface de contrôle, et non d’une simple décoration.
"""Multiply two numbers."""
3. Connecter l’agent
Attachez les assistants au modèle :
from langchain.agents import create_agent
agent = create_agent(
model=model,
tools=[
add,
subtract,
multiply,
divide,
square_root
],
)
Désormais, le modèle de chat peut fonctionner en tant qu’agent plutôt que simplement comme un répondant ponctuel.
Les étapes typiques incluent :
- Analyser l’intention de l’utilisateur
En termes généraux :
User
↓
Agent
↓
Should I use a tool?
↓
Choose tool
↓
Execute tool
↓
Get result
↓
Final response
Les questions à plusieurs étapes peuvent répéter ce cycle.
4. Exécuter une exécution
Un simple enveloppe suffit pour la faire fonctionner :
def run_agent(question: str):
"""Run the agent and print the execution trace."""
print(f"User: {question}")
result = agent.invoke({
"message": [("user", question)],
})
print("Agent:", result)
Appeler avec une question simple :
run_agent("What is 25 multiplied by 4?")
On remarque qu’il n’y a aucune instruction indiquant « appeler multiply ».
Seul le catalogue des assistants a été fourni.
Compte tenu de la formulation et de la description de chaque assistant, le modèle en déduit que la multiplication est appropriée.
5. Chaîner plus d’un assistant
Essayer une demande composée :
run_agent(
"Calculate the square root of 144 and multiply the result by 5."
)
Deux opérations sont nécessaires.
Le suivi conceptuel ressemble à ceci :
User:
Calculate √144 × 5
↓
Agent chooses square_root
↓
square_root(144)
↓
12
↓
Agent chooses multiply
↓
multiply(12, 5)
↓
60
↓
Final answer
Cette boucle — choisir, appeler, observer, choisir à nouveau — constitue l’essence des agents utilisant des outils.
Le code d’application n’a pas besoin d’enregistrer à l’avance l’ordre complet des opérations.
Le modèle peut déduire l’étape suivante à partir des outils restants et de l’état de la conversation.
6. Contraste avec un simple LLM
Sans outils, un modèle pourrait inventer « La réponse est 60 » sous forme de texte.
Avec des outils enregistrés, il peut confier les tâches numériques à de vraies fonctions.
Le transfert du contrôle
Parcours uniquement textuel : Utilisateur → modèle → chaîne de réponse
contre :
Tool-using agent
User
↓
LLM
↓
Choose tool
↓
Execute code
↓
Observe result
↓
LLM
↓
Answer
Le modèle n’a plus besoin d’effectuer lui-même chaque calcul.
Il propose quelle action doit être exécutée en premier ; l’application décide quelles actions existent et comment elles s’exécutent.
7. La frontière à protéger
La calculatrice est un jouet pédagogique.
L’idée fondamentale réside dans la séparation entre le jugement du modèle et l’autorité d’application.
La compréhension du langage naturel et le choix des actions conviennent bien aux LLM.
L’exécution de ces actions doit se faire en Python, sous votre contrôle.
Le modèle peut conclure qu’une telle séparation est nécessaire.
Votre processus gère l’implémentation de cette séparation ainsi que ses effets secondaires.
Remplacez les outils mathématiques simplifiés par des opérations propres au domaine, telles que :
get_customer()
search_transactions()
create_report()
send_email()
query_database()
get_weather()
create_ticket()
et le même schéma d’orchestration commence alors à ressembler aux conceptions d’agents en environnement de production.
Résumé de l’exercice
Quelques modules ont permis de créer un agent capable de :
- Interpréter des questions libres
- Sélectionner parmi plusieurs outils disponibles
- Lier correctement les arguments
- Combiner ces outils au cours d’une même session
- Reprendre les résultats des outils dans le raisonnement ultérieur
En bref : un LLM qui sélectionne et exécute des actions, et non un modèle qui ne produit que du texte.