Human-in-the-loop (validation humaine)
IA / LLM 🟡 MidDéfinition
Point d'arrêt où l'agent suspend son exécution et attend une décision humaine : approuver une action irréversible, corriger un plan, fournir une information. Dans LangGraph, interrupt() met le graphe en pause, l'état est sauvé par le checkpointer, et Command({ résume }) reprend sur le même thread_id. Dans Claude Code, ce sont les demandes de permission avant chaque commande sensible.
Analogie
Le bon de commande qu'un stagiaire doit faire signer avant de passer un achat au-dessus de 500 €.
Exemple de code
import { interrupt, Command } from '@langchain/langgraph';
const refund = async (state: State) => {
const decision = interrupt({ // pause : l'état est persisté
question: `Rembourser ${state.amount} € à ${state.customer} ?`,
});
if (decision !== 'approve') return { status: 'refused' };
await payments.refund(state.orderId, state.amount);
return { status: 'refunded' };
};
// 1er appel : s'arrête et renvoie __interrupt__
const r1 = await graph.invoke({ orderId }, { configurable: { thread_id: orderId } });
// Plus tard, après clic d'un humain : reprise sur le MÊME thread_id
const r2 = await graph.invoke(new Command({ resume: 'approve' }), { configurable: { thread_id: orderId } });
Cas d'usage
Paiements, envois d'e-mails, suppressions, déploiements : toute action coûteuse à annuler.
Anti-pattern
Demander confirmation pour tout, y compris les lectures : l'humain finit par tout valider sans regarder.
Termes liés
Sources
Fiche mise à jour le 2026-09-27