Be Software Architecture Wise
Be Wise Apps

Read in English · Leer en español · Auf Deutsch lesen

Section 12.4 sur 12.8 · Avancé · 32 min de lecture

Agents, utilisation d’outils et orchestration

Leçon vidéo

5 min · narré en anglais, avec sous-titres
Écouter seulement (audio)
Lire la transcription

Jusqu’ici, le modèle a produit du texte. Beaucoup de systèmes utiles doivent aussi agir : consulter une commande, émettre un remboursement, lancer un test. Cette leçon explique comment le faire en toute sécurité.

Imaginez un nouvel assistant compétent, à son premier jour. Il peut lire les dossiers que vous lui confiez et proposer quoi faire. Mais il n’a aucune clé à lui. Pour consulter quelque chose ou envoyer un remboursement, il remplit un bon de demande. Un responsable vérifie le bon, l’exécute et lui rend le résultat. Vous lui donnez une limite de temps et une règle selon laquelle tout ce qui coûte cher exige une signature. Un agent fonctionne de la même manière : le modèle propose des actions, et un logiciel ordinaire les vérifie et les exécute.

Avec l’appel d’outils, le modèle peut répondre par une demande structurée d’utilisation d’un outil, au lieu de prose. La tâche de l’utilisateur va donc à un appel du modèle, qui renvoie une réponse finale ou un appel d’outil. Chaque appel d’outil est validé dans le code : par rapport à son schéma, aux règles métier et aux droits propres de l’utilisateur. S’il est autorisé, le code exécute l’outil, avec un délai d’expiration et une clé d’idempotence. Le résultat est ajouté au contexte comme observation, les limites d’étapes, de temps et de tokens sont vérifiées, et la boucle recommence. Raisonner, agir, observer : c’est cette boucle qui fait un agent. Les outils de lecture, comme la consultation des commandes, peuvent s’exécuter librement. Les outils d’écriture, comme la proposition d’un remboursement, passent par une approbation humaine quand ils comptent. Tout ce qui se trouve hors du bloc du modèle est un logiciel ordinaire. Le modèle ne fait que proposer, et c’est de là que viennent la fiabilité et la sûreté d’un agent.

Les workflows font passer modèles et outils par des chemins de code prédéfinis ; les agents laissent le modèle diriger son propre processus. Commencez simplement. Le chaînage de prompts exécute des étapes fixes : extraire la réclamation, la classer, puis rédiger une réponse. Le routage classe l’entrée et l’envoie à son propre gestionnaire, comme les commandes en retard ou les questions sur les allergènes. La parallélisation exécute des vérifications indépendantes en même temps, ou fait voter plusieurs fois sur une même question. Avec l’orchestrateur et les workers, un modèle découpe une tâche en sous-tâches à l’exécution. Et avec l’évaluateur et l’optimiseur, un appel rédige et un autre vérifie. Le coût et les défaillances d’un workflow sont prévisibles : n’utilisez donc un agent autonome que lorsque les étapes ne peuvent pas être connues à l’avance.

Sans standard, chaque assistant aurait besoin de sa propre intégration avec chaque système. Le Model Context Protocol, ou MCP, remplace cela par un seul protocole ouvert. Une application hôte exécute un client MCP par connexion. Chaque client dialogue avec un serveur MCP. Ici, un serveur local encapsule des fichiers, et des serveurs distants encapsulent un service de tickets et le service de commandes. Les serveurs offrent des outils, des ressources et des prompts, et les serveurs distants autorisent les clients avec OAuth. Un serveur peut lire vos données et agir pour vous : traitez-le donc comme une dépendance. Approuvez et épinglez les serveurs autorisés, donnez à chacun le moindre privilège, et souvenez-vous que les résultats des outils peuvent transporter des instructions injectées.

Suivons un remboursement. Un client écrit que sa commande est arrivée sans les deux limonades. L’agent s’exécute avec des limites de huit étapes, trente secondes et vingt mille tokens. D’abord, le modèle appelle un outil de lecture pour obtenir les articles de la commande. Le code vérifie que la commande appartient au client connecté, puis renvoie deux limonades à deux livres vingt chacune. Ensuite, le modèle propose un remboursement, mais ne fournit aucun montant. Le service de remboursement calcule quatre livres quarante et applique la politique dans le code, y compris la limite automatique de quinze livres. Le client confirme. Puis la réponse dépasse le délai d’expiration. L’orchestrateur fait une nouvelle tentative avec la même clé d’idempotence, et le service renvoie le résultat d’origine. Le client est donc remboursé une fois, et non deux. Si la réclamation avait été de vingt-deux livres, le service aurait répondu qu’elle exigeait une approbation, et le dossier serait parti vers un conseiller humain avec les éléments justificatifs. Gardez les exécutions courtes. Avec quatre-vingt-quinze pour cent d’étapes justes, une exécution de trois étapes réussit environ quatre-vingt-six pour cent du temps, et une exécution de vingt étapes seulement trente-six environ.

Les agents échouent de façons nouvelles : ils tournent en boucle, s’égarent ou revendiquent un succès qu’ils n’ont pas obtenu. Plafonnez donc les étapes, le temps et les tokens, et arrêtez-vous quand le même appel ne cesse de se répéter. Validez chaque appel d’outil dans le code, et exécutez les outils avec les droits de la personne que l’agent sert, et non avec un compte de service puissant. Rendez chaque écriture idempotente, et enregistrez un point de reprise après chaque étape, afin qu’un plantage reprenne l’exécution au lieu de la répéter. Exigez une approbation humaine pour les effets de bord lourds de conséquences, en montrant l’action exacte et ses éléments justificatifs. Et tracez chaque appel de modèle et chaque appel d’outil, isolez dans une sandbox tout code écrit par l’agent, et gardez un moyen rapide de le désactiver.

La section complète traite aussi de la mémoire et de l’état, ainsi que du débat sur les systèmes multi-agents. Ensuite, dans la section douze point cinq, nous verrons comment tester quelque chose de probabiliste. À très vite.

Ce qu’il faut savoir

De la réponse à l’action

Les systèmes des sections précédentes produisent du texte. Beaucoup de systèmes utiles doivent aussi agir : consulter une commande, chercher dans une base de connaissances, émettre un remboursement, réserver une table, lancer une suite de tests. L’appel d’outils (tool calling), souvent appelé function calling, en est le mécanisme. L’application décrit les outils disponibles, chacun avec un nom, une description et un JSON Schema pour ses paramètres. Au lieu de répondre en prose, le modèle peut renvoyer une demande structurée d’appel d’un ou plusieurs de ces outils avec des arguments précis. C’est l’application, et non le modèle, qui décide d’exécuter ou non l’appel, l’exécute et renvoie le résultat au modèle, qui poursuit alors. Le modèle ne touche jamais lui-même une base de données ou une API ; chaque effet dans le monde passe par du code que vous avez écrit.

Un agent est un système dans lequel le modèle choisit ses actions de manière répétée : il appelle un outil, lit le résultat, décide de la suite et continue jusqu’à ce que l’objectif soit atteint ou qu’une limite l’arrête. L’autonomie est un continuum. À une extrémité, du code appelle le modèle une fois pour remplir un formulaire ; à l’autre, un modèle planifie et exécute une longue tâche avec des dizaines d’appels d’outils et peu de supervision. Sur le plan architectural, le point important est que chaque pas vers l’autonomie fait passer des décisions d’un code déterministe et vérifiable à un composant probabiliste, ce qui augmente la flexibilité et diminue la prévisibilité, la testabilité et le contrôle. Ce compromis doit être fait délibérément, aussi tard et aussi peu que le problème l’exige.

{
  "name": "get_order_status",
  "description": "Look up the current status of one order placed by the signed-in customer. Use when the customer asks where an order is. Returns status, estimated arrival and courier position. Changes nothing.",
  "input_schema": {
    "type": "object",
    "properties": {
      "order_id": {
        "type": "string",
        "pattern": "^ORD-[0-9]{6}$",
        "description": "Order number, for example ORD-104233"
      }
    },
    "required": ["order_id"],
    "additionalProperties": false
  }
}
Une définition d’outil sous la forme générale qu’acceptent la plupart des API de modèles (les noms de champs varient légèrement selon le fournisseur). La description est écrite pour le modèle ; le schéma est appliqué par le code.

La boucle de l’agent : raisonner, agir, observer

La boucle qui sous-tend presque tous les agents a été décrite par Shunyu Yao et ses collègues dans ReAct: Synergizing Reasoning and Acting in Language Models (2022). ReAct entrelace le raisonnement (le modèle écrit ce qu’il cherche à faire), les actions (il appelle un outil) et les observations (le résultat de l’outil est ajouté à son contexte), de sorte que chaque étape s’appuie sur ce que la précédente a trouvé. Avant ReAct, les modèles soit raisonnaient sans accès aux faits, et hallucinaient, soit agissaient sans raisonner, et erraient. Les interfaces d’appel d’outils et les modèles de raisonnement actuels intègrent cette boucle, mais c’est toujours autour de sa structure qu’il faut concevoir.

En code, la boucle est courte. Construire le contexte (instructions, objectif, historique, définitions d’outils, résultats obtenus jusque-là) ; appeler le modèle ; s’il renvoie une réponse finale, s’arrêter ; s’il renvoie des appels d’outils, valider chacun par rapport à son schéma et aux règles métier, vérifier que l’utilisateur y a droit, l’exécuter avec un délai d’expiration (timeout), ajouter le résultat (ou un message d’erreur clair) au contexte, vérifier les limites et recommencer. Le diagramme ci-dessous montre où le code déterministe entoure le modèle. Tout ce qui se trouve hors du bloc du modèle est un logiciel ordinaire qui peut être testé, revu et appliqué ; c’est de là que viennent la fiabilité et la sûreté d’un agent.

Une boucle d’agent avec des outils

Boucle d’agent : le modèle choisit les appels d’outils, du code déterministe les valide et les exécute dans des limites, et les résultats sont réinjectés jusqu’à la réponse finale du modèleboucle agent (votre code)Util.tâcheréponseAppel modèleréponse/appel outilappel outilValider, autoriserschéma, règles, droitsautoriséExécuter outiltimeout, clé d’idempotencerésultatAjouter observationau contexteétape suiv.Limitesétapes, temps, tokensLecturecommandes, rech.Approbation hum.si effets de bordÉcritureproposer rembt
Le modèle ne fait que proposer ; le code valide, autorise, exécute, applique les limites et réinjecte les résultats, et les effets de bord passent par une approbation humaine quand ils comptent.

Workflows et agents

Dans Building effective agents (décembre 2024), Erik Schluntz et Barry Zhang, d’Anthropic, ont établi une distinction devenue depuis du vocabulaire courant. Les workflows orchestrent les modèles et les outils selon des chemins de code prédéfinis ; les agents laissent le modèle diriger son propre processus et son utilisation des outils. Ils ont décrit un petit ensemble de patrons de workflow, tous construits à partir d’un LLM augmenté (un modèle doté de récupération, d’outils et de mémoire), et ont conseillé de commencer par la conception la plus simple qui fonctionne, souvent un seul appel bien formulé avec récupération, et de n’ajouter un comportement agentique que lorsqu’il améliore les résultats de façon démontrable.

Ce conseil rejoint la position générale de ce cours sur la simplicité. Un workflow a une forme connue : son coût, sa latence et ses modes de défaillance peuvent être prévus et ses étapes testées une à une. Un agent peut traiter des tâches ouvertes dont les étapes ne peuvent pas être connues à l’avance, comme enquêter sur un bug inconnu ou étudier une question à travers de nombreuses sources, au prix d’un coût variable, de tests plus difficiles et de davantage de façons de mal tourner. Beaucoup de systèmes présentés comme des agents seraient meilleurs sous forme de workflows, et beaucoup de bons agents contiennent des workflows.

Patrons de workflow et agents autonomes

PatronComment ça marcheExemple de la livraison de repasÀ utiliser quand
Chaînage de promptsUne suite fixe d’appels au modèle, chacun utilisant la sortie du précédent, avec des vérifications dans le code entre les étapesExtraire la réclamation, puis la classer, puis rédiger une réponse dans la langue du clientLa tâche se découpe nettement en étapes fixes ; chaque étape est plus facile que l’ensemble
RoutageClasser l’entrée, puis l’envoyer à un prompt, un modèle ou un gestionnaire spécialiséCommande en retard, article manquant, question sur les allergènes et problème de compte vont chacun à leur propre gestionnaireLes entrées se répartissent en catégories distinctes qui demandent des traitements différents
ParallélisationExécuter des appels en même temps : le sectionnement découpe une tâche en parties indépendantes ; le vote exécute plusieurs fois la même tâche et combine les résultatsVérifier en parallèle une nouvelle carte pour les allergènes, les erreurs de prix et les articles interdits ; voter trois fois pour savoir si un avis est injurieuxLes parties sont indépendantes, ou plusieurs avis augmentent la confiance
Orchestrateur-workersUn modèle découpe la tâche en sous-tâches à l’exécution, les délègue à des appels workers, puis combine les résultatsChercher pourquoi les délais de livraison d’une ville ont augmenté : examiner la météo, les effectifs et les retards des restaurantsLes sous-tâches ne peuvent pas être connues à l’avance
Évaluateur-optimiseurUn appel produit un résultat, un autre l’évalue selon des critères et renvoie un retour, en boucleRédiger un e-mail d’intégration pour un restaurant ; un second appel vérifie le ton et la conformité à la politique et demande des modificationsDes critères d’évaluation clairs existent et l’itération aide de façon mesurable
Agent autonomeLe modèle planifie et agit en boucle avec des outils jusqu’à ce que la tâche soit terminée ou qu’il soit arrêtéRésoudre un dossier de support complexe impliquant commandes, paiements et livreursTâches ouvertes aux étapes imprévisibles, dans un environnement où les erreurs restent contenues

Concevoir des outils pour les modèles

Les outils sont une interface dont l’utilisateur est un modèle, et ils méritent le soin accordé à toute API. Schluntz et Zhang parlent d’interface agent-ordinateur. Donnez à chaque outil un objectif clair, ainsi qu’un nom et une description qui disent quand l’utiliser, quand ne pas l’utiliser et ce qu’il renvoie ; les modèles choisissent les outils surtout d’après leur description. Gardez des paramètres peu nombreux et typés, utilisez des énumérations plutôt que du texte libre et rejetez les champs inconnus. Rendez les erreurs difficiles à commettre, par exemple en exigeant des identifiants absolus plutôt que des positions dans une liste. Renvoyez des résultats concis et pertinents, car chaque token d’un résultat d’outil est payé et occupe la fenêtre de contexte ; paginez et résumez les résultats volumineux. Renvoyez des erreurs sur lesquelles le modèle peut agir (commande introuvable ; demandez au client de vérifier le numéro) plutôt que des traces de pile.

Séparez la lecture de l’écriture. Les outils de lecture peuvent généralement s’exécuter librement ; les outils d’écriture modifient le monde et exigent validation, autorisation, idempotence et parfois approbation. Gardez petit le nombre d’outils disponibles à un instant donné, car de grands ensembles d’outils embrouillent les modèles et élargissent la surface d’attaque ; routez vers un sous-ensemble, ou chargez les définitions d’outils à la demande. Demandez une sortie structurée chaque fois que du code consommera le résultat : beaucoup d’API peuvent contraindre la génération à un JSON Schema, ce qui élimine les échecs d’analyse mais pas les valeurs erronées ; la validation du contenu reste donc nécessaire.

Le Model Context Protocol

Sans cela, chaque assistant qui veut atteindre chaque source de données ou chaque outil aurait besoin d’une intégration sur mesure pour chaque paire : N applications fois M systèmes. Le Model Context Protocol (MCP), présenté par Anthropic comme un standard ouvert en novembre 2024, remplace cela par un seul protocole, comme le Language Server Protocol l’a fait pour les éditeurs de code. Une application hôte (un assistant conversationnel, un IDE, un agent) exécute un client MCP par connexion à un serveur MCP. Les serveurs exposent des outils (des fonctions que le modèle peut appeler), des ressources (des données que l’application peut charger dans le contexte) et des prompts (des modèles réutilisables). Les messages utilisent JSON-RPC 2.0, via l’entrée et la sortie standard pour les serveurs locaux ou via HTTP pour les serveurs distants, et les serveurs distants utilisent une autorisation fondée sur OAuth.

L’adoption a été rapide. En décembre 2025, Anthropic faisait état de plus de 10 000 serveurs MCP publics actifs et d’une prise en charge dans des produits comme ChatGPT, Cursor, Gemini, Microsoft Copilot et Visual Studio Code. Le 9 décembre 2025, Anthropic a fait don de MCP à l’Agentic AI Foundation, nouvellement créée, un fonds dédié au sein de la Linux Foundation cofondé par Anthropic, Block et OpenAI : le protocole est donc désormais gouverné dans un cadre neutre vis-à-vis des fournisseurs. La spécification est versionnée par date. La révision 2026-07-28 a rendu le protocole de base sans état, afin que les serveurs distants puissent fonctionner derrière des équilibreurs de charge ordinaires sans sessions persistantes ; elle a ajouté la prise en charge d’extensions facultatives et sorti les tâches de longue durée du cœur pour les placer dans une extension officielle ; elle a renforcé l’autorisation ; et elle a déprécié d’anciennes fonctionnalités (roots, sampling et logging) avec une période de transition d’au moins un an. Pour la communication entre agents indépendants, plutôt qu’entre une application et ses outils, Google a présenté le protocole Agent2Agent (A2A) en avril 2025 ; il a été confié à la Linux Foundation en juin 2025 et, en août 2026, ses promoteurs ont annoncé qu’il rejoindrait lui aussi l’Agentic AI Foundation.

Sur le plan architectural, un serveur MCP est une dépendance qui peut lire vos données et agir en votre nom : traitez-le comme tel. Approuvez et épinglez les serveurs autorisés, dans le cadre de la sécurité de la chaîne d’approvisionnement ; préférez les serveurs exploités par vous ou par un fournisseur de confiance ; donnez aux identifiants de chaque serveur le moindre privilège dont ses outils ont besoin ; souvenez-vous que les descriptions et les résultats des outils entrent dans le contexte du modèle et peuvent transporter des instructions injectées ; et faites passer le trafic MCP distant par la même passerelle et les mêmes contrôles de journalisation et de politique que le reste du trafic vers les modèles. Le protocole normalise la tuyauterie ; il ne décide pas de ce qu’un agent devrait être autorisé à faire.

Hôtes, clients et serveurs MCP

Model Context Protocol : une application hôte exécute un client par serveur ; les serveurs exposent outils, ressources et prompts, devant fichiers locaux et systèmes distantsApplication hôte (assistant, IDE, agent)Intégration modèlechoisit les outilsClient MCPServeur fich.[local, stdio]Fich. locauxClient MCPServeur tickets[distant, HTTP]SaaS de ticketsClient MCPServ. commandes[distant, HTTP]CommandesJSON-RPCServeurs : outils, ressources et promptsServeurs distants : clients autorisés par OAuth
Un hôte peut se connecter à de nombreux serveurs par un seul protocole ; chaque serveur encapsule une source de données ou un système et décide de ce qu’il expose.

Mémoire et état

Les modèles sont sans état : la mémoire d’un agent est donc tout ce que le système environnant stocke et replace dans le contexte. La mémoire à court terme est la conversation et les résultats des appels d’outils effectués jusque-là. Elle grandit à chaque étape, ce qui augmente le coût et la latence et finit par dépasser la fenêtre ; les agents de longue durée la gèrent donc : ils suppriment ou raccourcissent les anciens résultats d’outils, résument les tours précédents (compaction) et tiennent un plan courant ou un fichier de notes que le modèle met à jour. La mémoire à long terme est l’information conservée d’une session à l’autre, comme les préférences alimentaires d’un client ou des faits qu’un assistant a appris sur un projet, stockée dans une base de données et récupérée quand elle est pertinente, ce qui en fait un petit système RAG, avec les mêmes questions de pertinence, de fraîcheur et de contrôle d’accès.

L’état d’exécution est ce qui compte le plus pour la fiabilité. Si un agent est à mi-chemin d’une tâche de vingt étapes quand son processus redémarre, il doit reprendre, et non recommencer en répétant des effets de bord. Persistez l’état après chaque étape (le contexte, le plan, les appels d’outils terminés et leurs résultats) sous forme de point de reprise, ou exécutez l’agent sur un moteur d’exécution durable qui s’en charge pour vous, comme on exécute les processus métier de longue durée et les sagas. La mémoire est aussi une donnée à caractère personnel : décidez de ce qui est mémorisé, pour combien de temps, si les utilisateurs peuvent le consulter et le supprimer, et tenez la mémoire d’un client hors du contexte d’un autre (voir protection de la vie privée dès la conception).

Systèmes multi-agents

Un système multi-agents répartit le travail entre plusieurs agents pilotés par des modèles, en général un agent principal qui planifie et délègue à des sous-agents, chacun avec ses propres instructions, ses outils et sa fenêtre de contexte, et dont l’agent principal combine les résultats. Les avantages sont le parallélisme, la spécialisation et, surtout, la séparation des contextes : chaque sous-agent peut explorer une grande quantité de matériau et ne renvoyer qu’un court résumé. Anthropic a indiqué en juin 2025 que son système de recherche multi-agents surpassait nettement un agent unique dans son évaluation de recherche interne, mais aussi que de tels systèmes consommaient environ 15 fois plus de tokens que des conversations ordinaires, et qu’ils convenaient mieux à des tâches larges et parallélisables qu’à des tâches fortement couplées comme la plupart des tâches de programmation.

Les praticiens ne s’accordent pas sur le degré à atteindre. Le même mois, Walden Yan, de Cognition, soutenait dans Don’t Build Multi-Agents que des sous-agents travaillant à partir d’un contexte partiel font des hypothèses contradictoires, et recommandait par défaut un agent à fil unique avec une gestion soignée du contexte. Les deux positions s’accordent sur la cause profonde : la coordination entre agents est une communication avec pertes entre des composants qui ne partagent pas d’état. C’est le problème central des systèmes distribués, et les mêmes conseils s’appliquent. Ne distribuez pas sans raison ; gardez des interfaces explicites et étroites entre les agents ; préférez des sous-tâches indépendantes ; tracez chaque saut ; et attendez-vous à ce que le coût, la latence et les modes de défaillance se multiplient avec le nombre d’agents.

Exemple commenté

Exemple commenté : un remboursement traité par l’agent de support

Un client écrit : La commande ORD-104233 est arrivée sans les deux limonades. L’assistant de support de la section 12.2 exécute une courte boucle d’agent limitée à 8 étapes, 30 secondes et 20 000 tokens.

Étape 1 : lireLe modèle appelle get_order_items("ORD-104233"). Le code vérifie que la commande appartient au client connecté, puis renvoie les articles, dont 2 × limonade à £2,20, livrées à 19 h 42.
Étape 2 : écrireLe modèle appelle propose_refund pour les deux limonades, motif article manquant ; il ne fournit aucun montant. C’est le service de remboursement, et non le modèle, qui calcule £4,40 à partir de la commande et applique la politique dans le code : articles présents sur la commande, réclamation dans les 48 heures, £4,40 sous la limite automatique de £15, aucun remboursement antérieur sur la commande et moins de trois remboursements en 30 jours. Le client confirme le remboursement sur une carte dans l’application (section 12.6), et le service l’enregistre sous une clé d’idempotence dérivée de la conversation, de la commande et des articles.
Défaillance géréeLa réponse à l’étape 2 dépasse le délai d’expiration. L’orchestrateur fait une nouvelle tentative avec la même clé d’idempotence ; le service de remboursement renvoie le résultat d’origine, si bien que le client est remboursé une fois, et non deux.
Étape 3 : répondreLe modèle répond en indiquant le montant et le moment où il apparaîtra, et la conversation est close, sa trace enregistrée.
Règle d’escaladeSi la réclamation avait été de £22, le service de remboursement aurait renvoyé approbation requise, et le dossier serait parti vers la console des conseillers avec l’action proposée et les éléments justificatifs.
Pourquoi les exécutions courtes comptentSi chaque étape est juste 95 % du temps, indépendamment des autres, une exécution de 3 étapes réussit environ 86 % du temps (0,953), une exécution de 10 étapes environ 60 % et une exécution de 20 étapes environ 36 %. Gardez les exécutions courtes, vérifiez après chaque étape et faites dans le code tout ce qui peut être fait dans le code.

Le modèle a choisi quoi faire ; du code déterministe a décidé si c’était permis et a rendu l’opération rejouable sans risque.

Les limites de la politique résident dans le service de remboursement, où elles sont testées et auditées, et non dans le prompt, où elles ne sont que des suggestions.

Ingénierie de la fiabilité des agents

Les agents échouent de façons nouvelles : ils tournent en boucle, appelant le même outil avec les mêmes arguments ; ils s’égarent, poursuivant une question secondaire jusqu’à épuisement du budget ; ils abandonnent trop tôt ou revendiquent un succès qu’ils n’ont pas obtenu ; et ils entreprennent des actions que leurs concepteurs n’avaient pas prévues. Les remèdes sont les patrons du chapitre 9 et du chapitre 6, appliqués à chaque étape plutôt qu’une fois par requête, plus une règle ferme : les effets de bord lourds de conséquences exigent davantage que l’avis du modèle. La section 12.6 traite en profondeur le versant sécurité, l’autonomie excessive ; la liste de contrôle ci-dessous couvre la fiabilité.

Liste de contrôle : rendre un agent fiable

  • Limites d’étapes, de temps et de tokensPlafonnez les itérations, le temps réel écoulé et les tokens (ou le coût) par exécution, et arrêtez-vous avec un résultat clair quand un plafond est atteint, jamais en silence.
  • Détection des bouclesArrêtez ou intervenez quand le même outil est appelé de manière répétée avec les mêmes arguments, ou quand aucun progrès n’est fait sur plusieurs étapes.
  • Valider chaque appel d’outil dans le codeVérifiez les arguments par rapport au schéma et aux règles métier avant l’exécution ; renvoyez au modèle une erreur utile quand un appel est rejeté.
  • Agir avec les droits de l’utilisateurLes outils s’exécutent avec les droits de la personne que l’agent sert, et non avec un compte de service puissant, afin que l’agent ne puisse pas devenir un député confus (confused deputy).
  • Outils d’écriture idempotentsChaque écriture prend une clé d’idempotence afin que les nouvelles tentatives après un délai d’expiration ne puissent pas dupliquer des remboursements, des réservations ou des messages.
  • Approbation humaine pour les effets de bord lourds de conséquencesMontrez l’action exacte et ses éléments justificatifs avant qu’elle n’ait lieu ; définissez les seuils (montant, réversibilité, audience) dans le code.
  • Points de reprise et reprisePersistez l’état après chaque étape, ou utilisez une exécution durable, afin qu’un plantage reprenne l’exécution au lieu de la répéter.
  • Compensations pour les modifications en plusieurs étapesLorsque plusieurs systèmes changent, concevez des actions compensatoires comme dans une saga, et enregistrez ce qui a été fait.
  • Isoler le code et l’accès réseau dans une sandboxExécutez tout code écrit par l’agent dans un environnement isolé, sans secrets, avec une liste d’autorisation de destinations réseau.
  • Tracer et évaluer les trajectoiresEnregistrez chaque appel de modèle et chaque appel d’outil avec ses entrées, ses sorties, ses durées et son coût ; évaluez le chemin suivi, pas seulement la réponse finale.
  • Interrupteur d’arrêt (kill switch) et déploiement progressifPlacez les capacités de l’agent derrière des feature flags, mettez-les d’abord en production pour une petite part du trafic et gardez un moyen rapide de les désactiver.

Vérifiez votre compréhension

Que normalise le Model Context Protocol, et que vous laisse-t-il ?

Il normalise la façon dont les applications hôtes se connectent à des serveurs qui exposent des outils, des ressources et des prompts ; il ne décide pas des serveurs auxquels se fier ni de ce qu’un agent peut en faire.

Pourquoi séparer les outils de lecture des outils d’écriture ?

Les lectures peuvent généralement s’exécuter librement, tandis que les écritures modifient le monde et exigent validation, autorisation, idempotence et parfois approbation humaine.

À quoi sert un point de reprise dans une longue exécution d’agent ?

Il enregistre le contexte, le plan et les appels d’outils terminés après chaque étape, afin qu’une exécution interrompue par un plantage puisse reprendre sans répéter les effets de bord.

Citez un argument pour et un argument contre les conceptions multi-agents.

Pour : les sous-agents travaillent en parallèle avec des contextes séparés et renvoient de courts résumés. Contre : ils font des hypothèses contradictoires à partir d’un contexte partiel et multiplient le coût en tokens et les modes de défaillance.

Suivant · 12.5Évaluer l’IAComment tester des composants dont les sorties varient : golden sets, méthodes de notation, le LLM comme juge et ses biais, évaluation hors ligne et en ligne, évals de régression dans la CI, supervision en production, red teaming et confiance dans les chiffres.Continuer →

Sources et lectures complémentaires

Une question sur cette section ? ArchitectBot, l’assistant d’étude IA du cours, répond d’abord à partir du cours.

Demander : « Comment empêcher un agent d’IA d’émettre deux fois le même remboursement si un appel d’outil dépasse le délai d’expiration ? »