Boucle agentique
IA / LLM 🟡 MidDéfinition
Cycle appel modèle → si stop_reason vaut tool_use, exécuter les outils demandés → renvoyer tous les tool_result dans un seul message utilisateur → rappeler le modèle, jusqu'à end_turn ou un plafond d'itérations. Les appels d'outils parallèles d'un même tour s'exécutent ensemble ; une erreur d'outil se renvoie avec is_error: true plutôt que d'être avalée.
Analogie
Un jeu de ping-pong : le modèle demande, le code exécute, le modèle relit, jusqu'à ce qu'il dise « terminé ».
Exemple de code
async function runAgent(messages: Anthropic.MessageParam[], maxTurns = 10) {
for (let turn = 0; turn < maxTurns; turn++) {
const res = await client.messages.create({ model: 'claude-sonnet-5', max_tokens: 2048, tools, messages });
messages.push({ role: 'assistant', content: res.content });
if (res.stop_reason !== 'tool_use') return res; // fin naturelle
const calls = res.content.filter(b => b.type === 'tool_use');
const results = await Promise.all(calls.map(async c => { // outils en parallèle
try { return { type: 'tool_result' as const, tool_use_id: c.id, content: await exec(c.name, c.input) }; }
catch (e) { return { type: 'tool_result' as const, tool_use_id: c.id, content: String(e), is_error: true }; }
}));
messages.push({ role: 'user', content: results }); // UN seul message
}
throw new Error('Plafond de tours atteint');
}
Cas d'usage
Cœur de tout agent maison ; les SDK proposent un tool runner qui l'implémente pour vous.
Anti-pattern
Boucle sans plafond ni budget : un outil qui échoue en silence fait tourner l'agent indéfiniment.
Termes liés
Sources
Fiche mise à jour le 2026-09-27