Technique
Partie III. Grille de mesure par composant
Pour : ingénieurs et SRE · architectesPrérequis : Avoir lu la partie I de la méthode.
Pour chaque composant : un schéma, puis la grille systématique quoi / pourquoi / impact si non surveillé. Le marqueur (S) signale un échec silencieux.
8. LLM (la brique inférence)
Section intitulée « 8. LLM (la brique inférence) »flowchart LR REQ["Requête"] --> QUEUE["File"] --> PREFILL["Prefill"] --> DECODE["Decode (streaming)"] --> RESP["Réponse"] GPU["GPU / KV cache / batch"] -.-> PREFILL GPU -.-> DECODE
| Quoi | Pourquoi (décision) | Impact si non surveillé |
|---|---|---|
| TTFT, latence E2E (p95, p99) | Tenir le budget de latence perçue | Dégradation non détectée jusqu’aux plaintes |
| Throughput tokens/s, requêtes/s | Dimensionner, autoscaler | Saturation subie, incident de capacité |
| Saturation GPU, KV cache, batch (DCGM, vLLM) | Anticiper la dégradation | (S) Éviction et file montent en silence, puis pic inexpliqué |
Taux d’erreur par error.type | Isoler timeout, rate-limit, content_filter | Diagnostic à l’aveugle, résolution rallongée |
Distribution des finish_reasons | Détecter réponses tronquées ou bloquées | (S) Réponses coupées servies sans alerte |
| Taux de refus | Détecter un changement de comportement | (S) Le produit refuse de plus en plus, sans signal |
| Hallucination, fidélité (éval échantillonnée) | Garantir la justesse | (S) Le système ment avec assurance, risque métier et juridique |
| Dérive des sorties (drift) | Détecter l’évolution lente | (S) Régression invisible sur des semaines |
| Tokens in/out, coût par requête | Gouverner le budget | (S) Facture découverte en fin de mois |
| Taux de hit du cache | Mesurer un levier de coût direct | Surcoût permanent non identifié |
| Gonflement de prompt (tokens in dans le temps) | Détecter la croissance du contexte | (S) Coût et latence dérivent lentement |
flowchart LR ING["Ingestion"] --> CHUNK["Chunking"] --> EMB["Embedding"] --> IDX["Index vectoriel"] Q["Question"] --> RET["Recherche"] --> RANK["Reranking"] --> CTX["Contexte"] --> GEN["Génération"] --> ANS["Réponse"] IDX --> RET
| Quoi | Pourquoi (décision) | Impact si non surveillé |
|---|---|---|
| Context precision | Les chunks remontés sont-ils pertinents ? | (S) Contexte hors sujet, hallucination en aval |
| Context recall | A-t-on remonté tout le nécessaire ? | (S) Réponses incomplètes ou inventées |
| Hit rate, MRR | Le bon document remonte-t-il et bien classé ? | On corrige à tort la génération |
| Fidélité / groundedness | Réponse appuyée sur le contexte | (S) Hallucinations servies comme des faits |
| Pertinence de la réponse | Répond-elle à la question ? | Réponses à côté non détectées |
| Exactitude des citations | Sources citées correctes | (S) Fausses références, risque de conformité |
| Couverture (questions sans contexte) | Mesurer les lacunes de la base | (S) Angle mort documentaire qui s’élargit |
| Fraîcheur de la base | Connaissance non périmée | (S) Réponses obsolètes servies avec assurance |
| Latence de recherche, santé de l’index | Tenir le budget de la chaîne | Dégradation mal attribuée |
| Coût embeddings et base vectorielle | Gouverner le coût | Surcoût d’infrastructure non maîtrisé |
Frameworks d’éval : RAGAS et DeepEval pour le gating, Arize Phoenix pour la dérive et la visualisation des clusters d’embeddings. Le problème de l’évaluateur (juge non déterministe, dérive, calibration) est traité en section 15.
10. Agent
Section intitulée « 10. Agent »flowchart TB
START["invoke_agent"] --> PLAN["Planification"] --> SEL["Sélection d'outil"] --> TOOL["execute_tool"] --> OBS["Observation"]
OBS --> DEC{"Tâche terminée ?"}
DEC -->|"non"| SEL
DEC -->|"oui"| END["Réponse finale"]
DEC -.->|"risque : boucle"| LOOP["Détection de boucle"]
| Quoi | Pourquoi (décision) | Impact si non surveillé |
|---|---|---|
| Taux de succès de tâche | Mesurer le travail réel de bout en bout | (S) Échec partiel sans erreur, valeur produit érodée |
| Nombre d’étapes par tâche | Détecter les trajectoires anormales | (S) Dérive de coût et latence par allongement |
| Détection de boucle | Repérer la répétition | (S) Boucle qui brûle le budget, vue sur facture |
| Taux d’échec d’outil | Identifier les outils défaillants | Retries coûteux, cause non isolée |
| Latence par étape et par tâche | Décomposer le bout en bout | Diagnostic impossible sur trajectoire longue |
| Coût par tâche (tokens cumulés) | Connaître le coût réel d’une tâche | (S) Tarification erronée |
| Exactitude de sélection d’outil | Le bon outil au bon moment | (S) Résultats dégradés sans signal |
| Taux de passage à l’humain | Mesurer l’autonomie réelle | Charge opérateur sous-estimée, ROI faussé |
| Garde-fous, tentatives d’injection | Sécurité agentique | Injection de commande non détectée |
Outils : Laminar et Langfuse (transcription, debug), Phoenix et Confident AI (éval multi-étapes), LangSmith et LangGraph Studio si pile LangGraph.
flowchart TB P["Couche protocole : JSON-RPC sur transport, sessions, schémas"] --> T["Couche exécution : appels d'outils, latence, erreurs"] --> A["Couche tâche : impact sur le succès de l'agent"] A -.->|"cascade"| P
| Quoi | Pourquoi (décision) | Impact si non surveillé |
|---|---|---|
| Latence et erreurs par outil et serveur | Santé d’exécution, isolement | Défaillance mal attribuée à l’agent |
| Santé de session, desync client-serveur | Stabilité du transport | (S) Desync qui dégrade l’agent sans erreur |
| Échecs d’authentification par identité | Détecter abus et mauvaise config | Accès illégitime, exposition de secrets |
| Pics d’énumération / découverte | Détecter la reconnaissance hostile | (S) Reconnaissance invisible avant exploitation |
| Mutations de serveur | Détecter rug pull et schema poisoning | (S) Outil de confiance devenu malveillant |
| Épinglage d’outil par hachage | Intégrité des outils dans le temps | (S) Modification non détectée |
| Journal des invocations | Piste d’audit réglementaire | Aucune traçabilité, non-conformité |
| Disponibilité par serveur, health checks | Garantir le repli | Agent qui boucle sur serveur indisponible |
Sécurité : le référentiel OWASP MCP Top 10 (édition 2025, en version bêta) définit dix catégories : MCP01 mauvaise gestion des jetons et exposition de secrets, MCP02 escalade de privilèges par élargissement de périmètre, MCP03 empoisonnement d’outil (tool poisoning), MCP04 attaques de la chaîne d’approvisionnement logicielle, MCP05 injection et exécution de commandes, MCP06 injection de prompt par contenu contextuel, MCP07 authentification et autorisation insuffisantes, MCP08 manque d’audit et de télémétrie, MCP09 serveurs MCP fantômes, MCP10 injection de contexte et surexposition. Rug pull, tool shadowing et schema poisoning sont des techniques d’attaque décrites dans la littérature, qui relèvent surtout de MCP03 ; ce ne sont pas des catégories du référentiel. La grille ci-dessus répond directement à MCP08.
L’auto-approbation des appels d’outils retire la dernière barrière qui ne dépend pas du modèle. Le banc d’essai MCPTox (2025) a soumis 20 agents LLM à 1 348 cas d’empoisonnement d’outils construits sur 45 serveurs MCP réels : l’attaque réussit en moyenne dans 36,5 % des cas, jusqu’à 72,8 % pour le modèle le plus exposé et aucun modèle ne refuse plus de 3 % des attaques. Ce banc mesure la sensibilité des modèles, pas l’effet d’une validation humaine ; je recommande néanmoins une validation humaine dans la boucle sur les outils sensibles, parce qu’elle ne repose pas sur le jugement du modèle attaqué. Outils : mcp-scan (Invariant Labs / Snyk) et Cisco mcp-scanner (YARA), complémentaires, plus une passerelle MCP avec audit et export OTel.
Révisé le 2 octobre 2026 : catégories officielles de l’OWASP MCP Top 10 (édition 2025, en version bêta) et chiffres du banc d’essai MCPTox à la place d’une affirmation non sourcée sur l’auto-approbation.