Boucle agentique

IA / LLM 🟡 Mid

Dé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.
#ia#agents#api#interview

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre