Tool calling (function calling)
IA / LLM 🟡 MidDéfinition
Le modèle reçoit des définitions d'outils (name, description, input_schema JSON Schema) et, quand il en a besoin, répond par un bloc tool_use avec les arguments au lieu de texte (stop_reason: tool_use). Le code exécute la fonction et renvoie un bloc tool_result (tool_use_id, content, is_error). Chez OpenAI, même idée avec type: function et des items function_call / function_call_output.
Analogie
Un assistant qui, au lieu de deviner la météo, vous tend un formulaire rempli « appelle le service météo avec ville=Paris ».
Exemple de code
const tools: Anthropic.Tool[] = [{
name: 'get_order',
description: 'Retourne le statut d\'une commande à partir de son numéro.',
input_schema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] },
}];
let res = await client.messages.create({ model: 'claude-sonnet-5', max_tokens: 500, tools, messages });
if (res.stop_reason === 'tool_use') {
const call = res.content.find(b => b.type === 'tool_use')!;
const result = await db.orders.findById((call.input as { id: string }).id); // exécution côté serveur
messages.push({ role: 'assistant', content: res.content },
{ role: 'user', content: [{ type: 'tool_result', tool_use_id: call.id, content: JSON.stringify(result) }] });
res = await client.messages.create({ model: 'claude-sonnet-5', max_tokens: 500, tools, messages });
}
Cas d'usage
Connecter le modèle à une base, une API métier, un calculateur : la base de tout agent.
Anti-pattern
Exécuter les arguments sans validation (chemin de fichier, requête SQL) : traiter tool_use comme une entrée utilisateur.
Termes liés
Sources
Fiche mise à jour le 2026-09-27