Quand le LLM n'est plus le premier réflexe : routage déterministe pour agents IA

Publié le 31 août 2026.

Ceci n'est pas l'histoire d'un système qui supprime les LLM. C'est l'histoire d'un système qui déplace le LLM vers le seul endroit où il sert vraiment. Une couche déterministe placée avant le modèle résout directement un ensemble de demandes connues — et la preuve, mesurée, tient en deux nombres : LLM_CALLS = 0 sur le chemin direct, et un basculement propre vers le raisonnement quand la demande est inconnue.

Le problème : une décision laissée au LLM

Dans un serveur MCP classique, le client appelle tools/call avec le nom de l'outil. Mais qui choisit ce nom ? Dans l'architecture d'origine de la Tour (« tour_webmcp »), ce choix appartenait à un LLM : le modèle décidait, parmi neuf outils, lequel répondait à la demande. Or plusieurs de ces outils étaient déjà déterministes — lire la carte, donner le statut, lister les projets ou les rappels, dérouler un circuit.

Le trou. Les capacités déterministes existaient. La décision déterministe, elle, n'existait pas : elle était confiée à un modèle, donc à un raisonnement, un coût, une latence, une part d'aléa — pour une action qui n'a rien de spéculatif.

Le résultat est une architecture où le LLM est le premier réflexe pour tout, y compris pour ce qui est parfaitement connu à l'avance. Ce n'est ni une économie (chaque appel coûte), ni une fiabilité (l'aléa du modèle joue sur une décision qui pourrait être une règle), ni une nécessité.

La solution : un front-door déterministe

Nous avons intercalé une couche de routage sans modèle entre la requête entrante et les outils : un front-door. Il applique, dans l'ordre, des règles sur une forme canonique de la demande (casse et accents préservés), et produit un contrat observable :

MATCH   → {"decision": "MATCH",   "tool": "statut_tour",
          "llm_required": false, "matched": "statut tour"}
NO_MATCH→ {"decision": "NO_MATCH", "llm_required": true}

Sur un MATCH, l'outil réel est appelé et le résultat construit est renvoyé. Sur un NO_MATCH, aucun déterministe n'est forcé et aucune réponse inventée : le front-door renvoie la main au LLM — explicitement.

Ce que nous avons mesuré

Ces valeurs sortent d'une exécution sur une base de test isolée ; tour_prod n'a pas été modifiée.

ÉlémentRésultat
Suite de tests18 — 0 échec, 0 erreur
Tests WebMCP comptés22
Requête déterministe réellestatut tour
RoutageMATCH
Outil sélectionnéstatut_tour
Appels LLM sur ce chemin0
Requête inconnueNO_MATCH → bascule LLM
Authentification sans cléHTTP 401
Preuve transportcurl + HttpCase (vrai serveur HTTP)
Base de testisolée (vierge) — prod intacte

L'observabilité est elle-même mesurable : chaque passage du front-door écrit une ligne de log avec request_id, decision, tool et llm_required. Sur le chemin déterministe, le log ne contient aucune ligne d'appel modèle — c'est la preuve LLM_CALLS = 0.

Les deux chemins, prouvés

Chemin direct. requête → front-door → MATCH → outil réel → résultat réel. LLM_CALLS = 0.

Chemin de secours. requête → front-door → NO_MATCH → LLM. Le raisonnement n'est pas supprimé : il est réservé aux cas qui en ont réellement besoin.

La distinction cruciale entre idée (mettre du déterministe avant le LLM), implémentation (le front-door), et preuve (les deux chemins mesurés) est ce qui sépare une intuition d'un résultat.

Le rôle du LLM ne disparaît pas. Il change de position.

Avant : requête → LLM → décision → outil. Après : requête → déterministe ⟶ capacité connue → exécution, ⟶ inconnue → LLM.

Avec WebMCP, c'est une tour de contrôle : le front-door est l'aiguillage, « yeux et mains vers l'extérieur », qui laisse la Tour accéder à des capacités exposées par d'autres applications — sans payer un raisonnement modèle pour un geste connu.

Limites — et ce qui reste à valider

Ce que ça change vraiment

Présenter cette expérience comme « nous avons supprimé les LLM » serait faux — et surtout, ce serait moins intéressant. La leçon, c'est qu'une architecture agentique peut rendre son premier réflexe déterministe et plier son coût en conséquence, tout en gardant le raisonnement comme filet de sécurité. Le modèle devient une ressource appelée à la demande, pas un mur au milieu de tout.

🔭