Une douzaine de fonctionnalités de votre entreprise appellent trois fournisseurs de modèles. Chaque équipe garde sa propre clé d'API, personne ne sait quelle équipe a dépensé quoi le mois dernier, et quand le fournisseur principal a renvoyé des erreurs 429 pendant une heure, chaque application a échoué à sa manière. L'une a changé de modèle et cassé sa sortie JSON.
Une passerelle LLM, aussi appelée passerelle IA ou proxy LLM, fait passer chaque appel de modèle par un seul service qui détient les clés, le routage et le compteur. Cet article parcourt le chemin d'une requête étape par étape, puis couvre le routage, le cache, les limites de tokens, les métriques, la sécurité et les passerelles que vous pouvez adopter.
Pourquoi placer une passerelle devant les fournisseurs de modèles
Les limites et les factures des fournisseurs ne suivent pas votre organigramme. OpenAI fixe ses limites de débit par organisation et par projet, pas par utilisateur, et Anthropic par organisation, avec des limites facultatives par workspace. Un batch nocturne lancé dans le même projet qu'un chat client peut épuiser les tokens par minute du chat. Une passerelle vous donne un seul endroit pour les clés, le routage, les limites par équipe et l'imputation des coûts.
Elle ne remplace pas votre passerelle API. Une passerelle API compte des requêtes ; une passerelle LLM compte des tokens et des dollars, comprend les réponses en streaming et traite un 429 d'un fournisseur comme une raison d'essayer un autre modèle.
Le chemin d'une requête, étape par étape
Les contrôles peu coûteux passent en premier : rien n'atteint un fournisseur tant que la requête n'est pas autorisée et qu'on ne sait pas qu'elle n'a pas déjà de réponse.
- Authentifier. Associez la clé virtuelle à une application, à une équipe et à ses modèles autorisés, ou renvoyez 401.
- Vérifier les limites. Comparez les compteurs de tokens et le budget de l'équipe dans Redis. Au-delà de la limite, renvoyez 429 avec
Retry-After. - Appliquer la politique. Imposez la liste des modèles autorisés et un plafond
max_tokens, et masquez les données personnelles comme les adresses e-mail. - Consulter le cache. Un hit renvoie la réponse stockée sans appel au fournisseur.
- Router. Choisissez un modèle et une chaîne de repli ordonnée.
- Appeler l'adaptateur. Traduisez la requête vers l'API du fournisseur, ajoutez la clé du fournisseur et lancez un timeout sur le premier token.
- Réessayer ou basculer sur un 429, un 5xx, l'erreur de surcharge 529 d'Anthropic ou un timeout, mais seulement avant que le premier token n'atteigne l'application. Un fournisseur peut envoyer une erreur après qu'un 200 a démarré le stream, et changer de modèle au milieu d'une réponse colle deux réponses ensemble.
- Streamer et mesurer. Laissez passer les server-sent events et écrivez un événement d'usage de façon asynchrone. L'API Chat Completions d'OpenAI n'envoie l'usage dans un dernier chunk qu'avec
stream_options.include_usage, et un stream coupé le perd : continuez donc à lire après la déconnexion d'un client.
Les étapes 1 à 4 devraient se limiter à des lectures en mémoire ou dans Redis ; les logs et les évaluations restent hors du chemin de la requête.
Stratégies de routage
| Stratégie | Comment elle choisit | Point de vigilance |
|---|---|---|
| Coût | Le modèle le moins cher qui passe vos évaluations | Il faut des évaluations par fonctionnalité |
| Latence | Le plus faible temps récent jusqu'au premier token | Du bruit sans lissage |
| Capacité | Longueur de contexte, vision, utilisation d'outils | Le modèle de repli peut ne pas l'avoir |
| Classe de données | Données signalées vers les seuls modèles approuvés | Une requête mal classée fait fuiter des données |
| Chaîne de repli | Modèle suivant en cas d'erreurs et de timeouts | Les réponses varient selon le modèle |
| Répartition A/B | 90/10, fixée par conversation | Juger sur les évaluations, pas sur les taux d'erreur |
Le repli le plus sûr est le même modèle chez un autre hébergeur, par exemple un modèle Claude sur l'API d'Anthropic et sur Amazon Bedrock. Une autre famille de modèles a besoin de ses propres évaluations, car les appels d'outils et la sortie JSON cassent en premier, et chaque repli a besoin de quota disponible.
Ne réessayez qu'à une seule couche : le SDK Python d'OpenAI réessaie deux fois par défaut, et la documentation de LiteLLM avertit que des retries empilés transforment une requête en (1 + N)² appels en amont. Mettez au repos un déploiement défaillant au lieu de le marteler, comme le fait LiteLLM par défaut pendant 5 secondes après un 429 ; le pattern circuit breaker généralise cette idée.
Cache : correspondance exacte, sémantique et côté fournisseur
| Correspondance exacte | Sémantique | Cache de prompts du fournisseur | |
|---|---|---|---|
| S'exécute dans | La passerelle, souvent Redis | La passerelle plus un index vectoriel | Le fournisseur |
| Clé | Hash de la requête complète | Similarité d'embeddings | Préfixe de prompt identique |
| Économise | L'appel entier | L'appel entier | Une partie du coût d'entrée et de la latence |
| Risque | Faible taux de hit en chat | Mauvaise réponse à une question proche | Tout changement en début de prompt le rend inopérant |
Le cache par correspondance exacte est sûr mais étroit : Cloudflare AI Gateway hache le fournisseur, l'endpoint, le modèle, l'en-tête d'authentification et le corps complet, donc tout changement crée une nouvelle entrée. Mettez le tenant dans votre clé de cache, sinon la réponse destinée à un client peut parvenir à un autre. Le cache sémantique reconnaît aussi les reformulations, mais « annuler ma commande » et « annuler mon abonnement » peuvent tomber tout près l'un de l'autre : ne l'utilisez que là où une quasi-correspondance est sans danger.
Le cache côté fournisseur fait souvent les plus grosses économies. Anthropic met en cache pendant 5 minutes les préfixes marqués avec cache_control, durée renouvelée à chaque hit, et les lectures en cache coûtent 0,1 fois le prix d'entrée de base sur la plupart des modèles. OpenAI met en cache par défaut sur les modèles compatibles, avec une entrée en cache jusqu'à 95 % moins chère (à l'heure où nous écrivons, en novembre 2026). Gardez les prompts système identiques à l'octet près, sans horodatage en tête, masquez de façon déterministe et attachez une conversation à un seul déploiement, car chaque compte fournisseur a son propre cache.
Avec un prix supposé de 3 USD par million de tokens d'entrée, un prompt système de 6 000 tokens plus une question de 500 tokens coûtent 0,0195 USD. Avec le préfixe lu depuis le cache : 6 000 × 0,30 USD/M + 500 × 3 USD/M = 0,0033 USD, soit environ 83 % de moins par hit. L'article sur les stratégies de cache traite de l'invalidation.
Limites de débit en tokens et budgets par équipe
Les requêtes par minute sont une mauvaise limite pour le trafic LLM : une requête peut transporter 50 tokens ou 200 000. Limitez les tokens par minute par équipe, plafonnez max_tokens et fixez un budget mensuel en dollars. La taille d'une requête n'est connue qu'une fois celle-ci terminée, alors choisissez une approche :
- Réserver, puis rapprocher. Comptez à l'avance l'entrée estimée plus
max_tokens, puis corrigez. Pour ses propres limites, OpenAI compte la plus grande valeur entremax_tokenset une estimation fondée sur le nombre de caractères. - Compter au fil de l'eau. Anthropic compte les tokens de sortie au fur et à mesure de leur génération, et les lectures en cache ne comptent pas dans les tokens d'entrée par minute sur la plupart des modèles.
- Compter après coup. C'est simple, mais les pics dépassent la limite. Cloudflare indique que des requêtes concurrentes peuvent brièvement dépasser ses limites de dépenses.
Gardez les compteurs dans Redis, partagés par toutes les instances de la passerelle ; la conception d'un rate limiter couvre les algorithmes et une panne de Redis. Valorisez l'usage avec une grille tarifaire versionnée, alertez à 80 % d'un budget et décidez si 100 % signifie un arrêt net ou un modèle moins cher.
Ce qu'il faut mesurer
Suivez le temps jusqu'au premier token par fournisseur et par modèle, les tokens d'entrée, de sortie et en cache par équipe, le coût par équipe et par fonctionnalité, les erreurs par type, ainsi que les taux de repli et de hit de cache. Les conventions d'OpenTelemetry pour l'IA générative nomment des attributs comme gen_ai.usage.input_tokens mais sont encore en développement : figez donc la version que vous émettez. Le diagramme d'architecture d'observabilité montre où vont les signaux.
Sécurité : ce qu'une passerelle ne résout pas
Une passerelle détient toutes les clés des fournisseurs et voit tous les prompts : donnez-lui peu d'administrateurs, des changements de configuration audités et des logs qui conservent les métadonnées de chaque appel, mais les prompts seulement échantillonnés, masqués et pour une courte durée.
Elle aide contre ce que le Top 10 OWASP pour les applications LLM appelle la consommation non bornée : limites et budgets empêchent un agent qui tourne en boucle ou une clé divulguée de faire exploser la facture. Elle ne résout pas l'injection de prompt ; l'OWASP indique qu'on ne sait pas s'il existe une prévention infaillible, et des instructions cachées dans un document récupéré ressemblent à des données pour une passerelle. Les défenses sont des outils au moindre privilège, des approbations et un traitement strict des sorties, comme dans le diagramme d'architecture d'un agent IA.
Construire ou adopter
| Passerelle | Ce que c'est | Licence et hébergement |
|---|---|---|
| LiteLLM | Proxy Python pour plus de 100 fournisseurs : clés virtuelles, budgets, replis | MIT plus une offre entreprise commerciale ; auto-hébergé |
| Agent Router | Anciennement Envoy AI Gateway, construit sur Envoy Gateway | Apache 2.0 ; auto-hébergé |
| Portkey AI Gateway | Retries, replis, répartition de charge, garde-fous | MIT ; cache sémantique uniquement en version hébergée ou entreprise |
| Kong AI Gateway | Politiques IA pour Kong Gateway | Konnect ou auto-hébergé ; le cache sémantique et les limites de tokens exigent une licence entreprise |
| Cloudflare AI Gateway | Cache, limites de débit, repli, logs | Géré |
| Azure API Management | Limites de tokens, cache sémantique, métriques de tokens | Géré |
Envoy AI Gateway a rejoint l'Agentic AI Foundation sous le nom d'Agent Router en septembre 2026. Ne construisez que ce qui vous est propre, comme le routage par classe de données ; le plus coûteux est de maintenir les adaptateurs de fournisseurs à jour. Une passerelle gérée place un tiers sur le chemin de chaque prompt ; une passerelle auto-hébergée fait de Redis, de Postgres et des mises à jour votre travail.
Le diagramme de la passerelle LLM
Contenu du diagramme
- LLM gateway
- Support chat
- Doc summarizer
- 1 Auth
- 2 Policy
- 3 Cache
- 4 Router
- 5 Adapters
- Postgres: keys, budgets
- Redis: counters, cache
- Self-hosted model
- OpenAI API
- Anthropic API
- Usage and cost log
- virtual key A
- virtual key B
- miss
- sensitive data
- primary
- fallback on 429/5xx
- key → team, limits
- token counters
- lookup by hash
- usage events (async)
Comment le lire :
- Deux applications appellent un seul endpoint au format OpenAI avec leurs propres clés virtuelles, sans clé de fournisseur.
- Cinq étapes s'exécutent dans l'ordre, chacune surmontée d'un texte qui dit ce qu'elle décide. Une requête peut s'arrêter à Auth (401, 429) ou sur un hit de cache.
- Trois cibles : OpenAI en principal, Anthropic en repli, en pointillé, sur 429 ou 5xx, et un modèle vLLM auto-hébergé pour les données sensibles.
- Sous les étapes : Postgres pour les clés et les budgets, Redis pour les compteurs et les réponses en cache, et le journal d'usage, écrit de façon asynchrone.
- Le bloc Markdown liste des paramètres d'exemple pour une équipe.
Dessiner clairement les diagrammes de passerelle LLM
- Dessinez des étapes, pas une seule boîte. Un unique rectangle de passerelle cache si le masquage a lieu avant le cache.
- Mettez les conditions sur les arêtes : « fallback on 429/5xx », « sensitive data », « miss ».
- Marquez l'endroit où les données quittent votre réseau, pour que les fournisseurs externes se distinguent du modèle auto-hébergé.
- Mettez les chemins asynchrones en pointillé, comme le comptage et la journalisation.
- Laissez le catalogue de modèles de côté ; il a sa place dans la configuration.
Le construire dans Archboard
- Connectez-vous avec Google ou GitHub et créez un diagramme.
- Ajoutez un Cadre du pack Base nommé LLM gateway.
- À l'intérieur, ajoutez en ligne cinq nœuds Composant du pack C4 Model : 1 Auth, 2 Policy, 3 Cache, 4 Router et 5 Adapters, avec un Texte du pack Base au-dessus de chacun.
- En dessous, ajoutez Postgres et Redis du pack Données et un Entrepôt de données pour le journal d'usage et de coûts.
- À gauche du cadre, ajoutez deux nœuds Conteneur du pack C4 Model pour les applications ; à droite, deux nœuds Système externe pour OpenAI API et Anthropic API, et un Point de terminaison du pack ML pour le modèle auto-hébergé.
- Tracez des arêtes étiquetées ; mettez en pointillé le repli et les événements d'usage.
- Ajoutez un bloc Markdown du pack Base avec les paramètres d'exemple.
Si vous gardez le chemin sous forme de diagramme de flux Mermaid, le convertisseur Mermaid en fait un premier jet modifiable. L'exemple utilise 15 nœuds de diagramme et reste dans les limites de l'offre Free.
FAQ
Qu'est-ce qu'une passerelle LLM ? C'est un service par lequel passe chaque appel de modèle. Il détient les clés des fournisseurs, route entre les modèles et bascule de l'un à l'autre, met en cache, applique les limites de tokens et les budgets, et enregistre l'usage par équipe.
Quelle est la différence entre une passerelle IA et une passerelle API ? Une passerelle API limite des requêtes HTTP. Une passerelle IA comprend aussi les tokens, le streaming et les erreurs des fournisseurs : elle peut donc limiter par tokens, imputer les coûts et basculer vers un autre modèle.
Quelle est la différence entre le cache sémantique et la mise en cache des prompts ? Le cache sémantique s'exécute dans votre passerelle et renvoie une réponse stockée pour une question similaire. La mise en cache des prompts s'exécute chez le fournisseur et réutilise un préfixe de prompt déjà traité ; le modèle écrit tout de même une nouvelle réponse.
Comment limiter les requêtes LLM par tokens ? Gardez un token bucket par équipe dans Redis, réservez avant chaque appel l'entrée estimée plus max_tokens, corrigez ensuite, et renvoyez 429 avec Retry-After quand la limite est atteinte.
Une passerelle LLM peut-elle empêcher l'injection de prompt ? Non. Elle peut filtrer les attaques évidentes et limiter les dégâts avec des budgets, mais des instructions injectées dans des documents ressemblent à des données. Défendez-vous dans l'application avec des outils au moindre privilège et des approbations.