Claude Tool Use : Code Execution, Text Editor et Web Search
By Learnia Team
Claude Tool Use : Code Execution, Text Editor et Web Search
📅 Dernière mise à jour : 10 mars 2026 — Couvre les built-in tools, le function calling et les patterns avancés.
🔗 Article pilier : API Claude : Guide Complet
Qu'est-ce que le Tool Use ?
Le Tool Use (ou function calling) est la capacité de Claude à utiliser des outils externes pendant une conversation. Au lieu de simplement répondre avec du texte, Claude peut :
- →Décider qu'un outil est nécessaire pour répondre
- →Générer les paramètres d'appel de l'outil au format JSON
- →Recevoir le résultat de l'exécution de l'outil
- →Utiliser ce résultat pour formuler une réponse complète
Le Flux Tool Use
Utilisateur → Claude (réfléchit) → Appel d'outil (JSON)
↓
Votre code exécute l'outil
↓
Résultat → Claude (utilise le résultat) → Réponse finale
Outils Intégrés (Built-in Tools)
Claude dispose de trois outils intégrés qui ne nécessitent aucune implémentation de votre part.
1. Code Execution (Sandbox Python)
L'outil Code Execution permet à Claude d'exécuter du code Python dans un environnement sandbox sécurisé. Idéal pour les calculs, l'analyse de données et la génération de graphiques.
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
tools=[{
"type": "code_execution"
}],
messages=[{
"role": "user",
"content": "Calcule la moyenne, médiane et écart-type de ces données : [23, 45, 67, 12, 89, 34, 56, 78, 91, 43]"
}]
)
Cas d'usage : Calculs mathématiques, analyse statistique, génération de graphiques matplotlib, manipulation de données pandas.
Limites : Sandbox isolée, pas d'accès réseau, pas de persistance entre appels, bibliothèques limitées (numpy, pandas, matplotlib disponibles).
2. Text Editor
L'outil Text Editor permet à Claude de lire, créer et modifier des fichiers. Utilisé principalement dans Claude Code et les agents de développement.
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
tools=[{
"type": "text_editor_20250429",
"name": "text_editor"
}],
messages=[{
"role": "user",
"content": "Lis le fichier config.json et modifie le port de 3000 à 8080."
}]
)
Commandes disponibles :
| Commande | Description |
|---|---|
view | Lire le contenu d'un fichier |
create | Créer un nouveau fichier |
str_replace | Remplacer du texte dans un fichier |
insert | Insérer du texte à une ligne donnée |
3. Web Search
L'outil Web Search permet à Claude de rechercher des informations actualisées sur le web.
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
tools=[{
"type": "web_search"
}],
messages=[{
"role": "user",
"content": "Quelles sont les dernières nouvelles sur l'IA en mars 2026 ?"
}]
)
Cas d'usage : Informations actualisées, vérification de faits, recherche de documentation, prix et disponibilité de produits.
Outils Custom (Function Calling)
Les outils custom vous permettent de connecter Claude à n'importe quelle API ou fonction de votre application.
Définir un Outil Custom
import anthropic
import json
client = anthropic.Anthropic()
# Définition de l'outil
tools = [{
"name": "get_weather",
"description": "Récupère la météo actuelle pour une ville donnée. Utilise cet outil quand l'utilisateur demande la météo.",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Le nom de la ville (ex: 'Paris', 'Lyon')"
},
"units": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "Unité de température"
}
},
"required": ["city"]
}
}]
# Première requête
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=[{
"role": "user",
"content": "Quel temps fait-il à Paris ?"
}]
)
Le Cycle Complet Tool Use
Le Tool Use fonctionne en boucle. Voici le pattern complet :
def run_tool_loop(user_message, tools, tool_handlers):
"""Exécute une boucle tool use complète."""
messages = [{"role": "user", "content": user_message}]
while True:
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
tools=tools,
messages=messages
)
# Si Claude a fini (pas d'appel d'outil)
if response.stop_reason == "end_turn":
return response.content[0].text
# Traiter les appels d'outils
messages.append({"role": "assistant", "content": response.content})
tool_results = []
for block in response.content:
if block.type == "tool_use":
# Exécuter l'outil
handler = tool_handlers[block.name]
result = handler(**block.input)
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": json.dumps(result)
})
messages.append({"role": "user", "content": tool_results})
# Handlers d'outils
def get_weather(city, units="celsius"):
# Appel à une vraie API météo
return {"city": city, "temp": 18, "condition": "Ensoleillé"}
# Exécution
result = run_tool_loop(
"Quel temps fait-il à Paris et Lyon ?",
tools=tools,
tool_handlers={"get_weather": get_weather}
)
Outils en Parallèle
Claude peut appeler plusieurs outils simultanément quand il a besoin de plusieurs informations indépendantes :
# Claude peut générer plusieurs tool_use blocks dans une seule réponse :
# [
# {"type": "tool_use", "name": "get_weather", "input": {"city": "Paris"}},
# {"type": "tool_use", "name": "get_weather", "input": {"city": "Lyon"}}
# ]
Patterns Avancés
Forcer l'Utilisation d'un Outil
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
tool_choice={"type": "tool", "name": "get_weather"}, # Force cet outil
messages=[{"role": "user", "content": "Paris"}]
)
Valeur tool_choice | Comportement |
|---|---|
{"type": "auto"} | Claude décide (par défaut) |
{"type": "any"} | Claude DOIT utiliser un outil (n'importe lequel) |
{"type": "tool", "name": "..."} | Claude DOIT utiliser cet outil spécifique |
{"type": "none"} | Claude NE PEUT PAS utiliser d'outil |
Extraction Structurée via Tool Use
Un pattern puissant : utiliser le Tool Use pour forcer Claude à retourner des données structurées.
tools = [{
"name": "extract_contact",
"description": "Extrait les informations de contact d'un texte.",
"input_schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"email": {"type": "string"},
"phone": {"type": "string"},
"company": {"type": "string"}
},
"required": ["name"]
}
}]
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
tool_choice={"type": "tool", "name": "extract_contact"},
messages=[{
"role": "user",
"content": "Marie Dupont est directrice chez TechCorp. Contactez-la à marie@techcorp.fr ou au 06 12 34 56 78."
}]
)
# Résultat structuré garanti :
# {"name": "Marie Dupont", "email": "marie@techcorp.fr", "phone": "06 12 34 56 78", "company": "TechCorp"}
Bonnes Pratiques
Écrire de Bonnes Descriptions d'Outils
La description d'un outil est critique — c'est ce que Claude utilise pour décider quand et comment l'utiliser.
| ❌ Mauvaise description | ✅ Bonne description |
|---|---|
| "Cherche des données" | "Recherche des produits dans la base de données par nom, catégorie ou fourchette de prix. Retourne les 10 premiers résultats triés par pertinence." |
| "Envoie un email" | "Envoie un email via le serveur SMTP configuré. Utilise cet outil uniquement quand l'utilisateur demande explicitement d'envoyer un message." |
Checklist des Bonnes Pratiques
- →Descriptions détaillées — Expliquez quand et pourquoi utiliser l'outil
- →Paramètres documentés — Chaque paramètre doit avoir une description claire
- →Validation côté serveur — Ne faites jamais confiance aux paramètres sans validation
- →Gestion des erreurs — Retournez des messages d'erreur clairs dans les tool_results
- →Limite le nombre d'outils — 10-20 outils maximum pour une performance optimale
- →Noms explicites —
search_productsplutôt quesearchousp
Erreurs Courantes
| Erreur | Cause | Solution |
|---|---|---|
| Claude n'utilise pas l'outil | Description insuffisante | Améliorez la description avec des exemples |
| Paramètres incorrects | Schéma ambigu | Ajoutez des description et enum aux propriétés |
| Boucle infinie | Pas de condition d'arrêt | Limitez le nombre d'itérations dans votre boucle |
tool_use_id manquant | Résultat mal formaté | Chaque tool_result doit référencer le bon tool_use_id |
Pour aller plus loin
- →Agent-Computer Interface (ACI) : concevoir des outils pour agents — Principes de conception d'outils optimisés pour les agents IA
- →MCP avancé : transports et patterns — Explorez les patterns avancés du Model Context Protocol
Module 0 — Prompting Fundamentals
Build your first effective prompts from scratch with hands-on exercises.
Weekly AI Insights
Tools, techniques & news — curated for AI practitioners. Free, no spam.
Free, no spam. Unsubscribe anytime.
→Related Articles
FAQ
Qu'est-ce que le Tool Use dans Claude ?+
Le Tool Use permet à Claude d'appeler des fonctions ou outils externes pendant une conversation. Claude décide quand utiliser un outil, génère les paramètres corrects, et utilise le résultat pour formuler sa réponse.
Quels sont les outils intégrés (built-in) de Claude ?+
Claude dispose de trois outils intégrés : Code Execution (exécuter du code Python dans une sandbox), Text Editor (lire et modifier des fichiers), et Web Search (rechercher sur le web en temps réel).
Comment définir un outil custom pour Claude ?+
Définissez un outil avec un nom, une description et un schéma JSON des paramètres dans le champ 'tools' de votre requête API. Claude appellera l'outil quand nécessaire et vous retournez le résultat via un message tool_result.
Claude peut-il utiliser plusieurs outils dans une même réponse ?+
Oui, Claude peut appeler plusieurs outils en parallèle ou séquentiellement dans une même conversation. Il peut aussi chaîner les résultats d'un outil comme entrée d'un autre.