Aller au contenu principal

Passerelles IA : LiteLLM, OpenRouter, Portkey, Vercel

Intermédiaire

Dès que votre produit dialogue avec plus d'un modèle, l'approche SDK direct se fissure. Chaque fournisseur a sa propre clé, ses propres limites de débit, son propre calendrier de pannes et sa propre facture. Une passerelle IA est ce petit morceau d'infrastructure qui se place entre votre code et chaque modèle — Claude, GPT, Gemini, Llama, Kimi, DeepSeek, votre Ollama local — et qui transforme « N intégrations fragiles » en « un seul endpoint que vous contrôlez ». Cette page compare les quatre passerelles réellement déployées en production en 2026 — LiteLLM, OpenRouter, Portkey et Vercel AI Gateway — et montre le workflow qui tue : pointer Claude Code vers votre propre passerelle pour qu'un seul proxy gère le routage, les budgets, la journalisation et le basculement pour toute l'équipe.

What you'll learn
  • Comprendre ce qu'est une passerelle IA et les cinq problèmes qu'elle résout (plusieurs fournisseurs, une API ; basculement ; clés virtuelles ; plafonds de dépenses ; observabilité)
  • Comparer LiteLLM, OpenRouter, Portkey et Vercel AI Gateway sur la latence, le prix, la capacité d'auto-hébergement et les points forts de chacun
  • Connecter Claude Code via votre propre proxy LiteLLM avec ANTHROPIC_BASE_URL et une clé virtuelle pour que l'équipe partage limites et journaux
  • Configurer le basculement OpenRouter afin qu'une panne Claude promeuve silencieusement GPT ou Gemini au lieu d'afficher une 5xx aux utilisateurs
  • Comprendre l'incident de chaîne d'approvisionnement LiteLLM de mars 2026 et comment épingler les versions en toute sécurité en production

Le problème : un SDK direct par fournisseur ne passe pas à l'échelle

La première intégration Claude est un changement de deux lignes : pip install anthropic, définir ANTHROPIC_API_KEY, fini. La seconde — disons que vous voulez basculer vers GPT-5.4 quand Anthropic vous limite — est le point où l'abstraction casse. Vous avez maintenant deux SDK avec des formes de requête différentes, deux tableaux de bord, deux factures, deux cadences de rotation pour les clés API, et deux ensembles de logique de retry. Ajoutez un troisième pour Gemini et un quatrième pour votre Ollama local, et chaque décision produit (« plafonner cette équipe à 500 $/mois », « journaliser chaque prompt pour revue », « laisser un client apporter sa propre clé ») devient N implémentations au lieu d'une.

Une passerelle IA concentre toute cette plomberie en un seul endroit. Concrètement, une passerelle de production vous offre :

  • Une seule forme de requête pour tous les fournisseurs. La plupart des passerelles parlent l'API OpenAI Chat Completions (ou Anthropic Messages, ou les deux) et traduisent vers le fournisseur réel en coulisses.
  • Basculement et routage. Essayer Claude d'abord ; en cas de 429 ou 5xx, réessayer avec GPT ou Gemini sans que l'appelant le sache. Idem pour les plafonds de latence et les refus de modération de contenu.
  • Clés virtuelles. Émettre une clé par utilisateur ou par service qui mappe vers un sous-ensemble de modèles, son propre budget et sa propre limite de débit — de sorte qu'un script malveillant ne puisse pas vider tout le compte.
  • Plafonds de dépenses et journalisation. Chaque requête est marquée, tarifée et stockée. Vous pouvez révoquer une clé sans toucher à Anthropic ou OpenAI, et vous pouvez prouver à la conformité ce qui a été envoyé et où.
  • Mise en cache. La mise en cache des prompts (correspondance exacte) et la mise en cache sémantique (correspondance approximative) transforment le trafic répété en hits gratuits.

Toutes les équipes n'ont pas besoin des cinq. Mais dès que deux d'entre elles sont sur votre feuille de route, exploiter une passerelle coûte moins cher que de les réinventer par fournisseur.


Les quatre passerelles qui tournent en production

Il n'y a pas de « vainqueur » unique — les quatre leaders occupent différents coins de l'espace de conception (auto-hébergé vs. hébergé, open source vs. propriétaire, minimaliste vs. panneau de contrôle).

PasserelleDéploiementModèle tarifaireMeilleur pourPas pour
LiteLLMAuto-hébergé (Docker) ou SDKGratuit (OSS) ; palier Entreprise pour SSO/auditProxy d'équipe avec clés virtuelles, budgets, sans majoration par token, fonctionne avec plus de 100 fournisseurs via une seule configÉquipes sans DevOps pour exploiter Postgres + Redis
OpenRouterHébergé uniquementPrix fournisseur + ~5,5 % de frais d'achat de crédits, sans majoration par requêteAccès zéro-ops à plus de 300 modèles sous une seule clé ; idéal pour les produits qui laissent les utilisateurs choisir un modèleBoutiques de conformité qui ont besoin d'auto-hébergement ou de résidence des données
PortkeyPasserelle OSS (npx) ou cloud hébergéOSS gratuit ; le cloud a des paliers d'usageLatence de passerelle sub-ms, mise en cache sémantique, garde-fous, tests canari — l'angle « panneau de contrôle »Équipes qui veulent juste l'agrégateur de clés le plus simple possible
Vercel AI GatewayHébergé uniquementPrix fournisseur, sans majoration de token ; gratuit avec les plans VercelDéveloppeurs déjà sur Vercel qui veulent AI SDK v5/v6 + Anthropic Messages + APIs OpenAI Responses unifiésInfrastructure non-Vercel ou déploiements air-gap

Le premier axe important pour choisir : auto-hébergé vs. hébergé. Si vos données ne peuvent pas quitter votre VPC (industries régulées, résidence UE, revues de confidentialité entreprise), il vous faut une passerelle auto-hébergeable — LiteLLM ou Portkey OSS. Si vous préférez payer quelqu'un pour l'exploiter, OpenRouter ou Vercel AI Gateway est une affaire en un clic.

Le second axe : combien de plan de contrôle il vous faut réellement. Si vous êtes un produit solo qui veut juste essayer Kimi K3, Claude et Grok côte à côte sans trois inscriptions, OpenRouter est toute l'histoire. Si vous êtes une organisation de 20 personnes où la finance veut les dépenses mensuelles par équipe, la sécurité veut des clés virtuelles avec rotation et la plateforme veut des métriques Grafana, vous construisez sur LiteLLM ou Portkey.


Workflow qui tue : pointer Claude Code vers votre propre proxy LiteLLM

Le secret le mieux gardé de Claude Code est qu'il respecte ANTHROPIC_BASE_URL et ANTHROPIC_AUTH_TOKEN. Définissez-les vers votre passerelle et Claude Code cesse de parler directement à api.anthropic.com — il parle à votre proxy, qui transmet à Anthropic (ou n'importe où ailleurs) avec l'auth que vous contrôlez. Pour une équipe, cela change trois choses à la fois :

  • Une clé virtuelle partagée par développeur. Vous émettez et révoquez les clés dans l'UI du proxy. Pas d'identifiants racine partagés dans les fichiers .env.
  • Budgets et journaux par développeur. Le proxy marque chaque requête, donc « qui a dépensé les 300 $ hier » est une requête base de données, pas un incident.
  • Aliasing de modèles. Vous pouvez épingler claude-sonnet-4-6 au niveau du proxy pour qu'une dépréciation de modèle devienne un changement de config d'une ligne, pas un grep sur tout le repo.

Démarrez un proxy minimal en trois étapes :

Guided walkthrough1 of 3
  1. Dans un venv frais ou via uv : uv tool install 'litellm[proxy]'. Cela installe le serveur de passerelle (FastAPI + UI admin) aux côtés du SDK client.

Le fichier de config qui fait fonctionner tout ça :

config.yaml — Claude Sonnet/Opus/Haiku derrière LiteLLM

model_list:
- model_name: claude-opus-4-7
  litellm_params:
    model: anthropic/claude-opus-4-7
    api_key: os.environ/ANTHROPIC_API_KEY
- model_name: claude-sonnet-4-6
  litellm_params:
    model: anthropic/claude-sonnet-4-6
    api_key: os.environ/ANTHROPIC_API_KEY
- model_name: claude-haiku-4-5-20251001
  litellm_params:
    model: anthropic/claude-haiku-4-5-20251001
    api_key: os.environ/ANTHROPIC_API_KEY

litellm_settings:
master_key: os.environ/LITELLM_MASTER_KEY
# Optional: enable exact-match prompt caching
cache: true
cache_params:
  type: redis
  host: os.environ/REDIS_HOST

Ensuite, depuis le shell de n'importe quel développeur :

Pointer Claude Code vers le proxy (.env par développeur)

export ANTHROPIC_BASE_URL="https://llm.internal.example.com"
export ANTHROPIC_AUTH_TOKEN="sk-team-alice-9f4c..."   # a VIRTUAL key issued by the proxy

# now every Claude Code call goes through YOUR gateway
claude --model claude-sonnet-4-6

Le gain non évident est la clé virtuelle. La clé maître est réservée aux admins et n'atterrit jamais sur les laptops. Chaque développeur reçoit une clé virtuelle qui mappe vers seulement les modèles que vous autorisez, a son propre budget mensuel et peut être révoquée en secondes sans rotation de la clé Anthropic sous-jacente. Si un laptop est perdu, vous tuez une ligne dans Postgres — pas l'accès de toute l'équipe.

Attention : les mêmes variables d'environnement fonctionnent avec les intégrations Bedrock et Vertex d'Anthropic, mais il y a des cas limites avec les fonctionnalités bêta expérimentales. Pour les déploiements Bedrock, la doc LiteLLM recommande de définir CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 dans ~/.claude/settings.json pour éviter les problèmes de compatibilité d'en-têtes.


Workflow qui tue #2 : basculement silencieux avec OpenRouter

Si vous ne voulez rien héberger, le tableau de basculement d'OpenRouter est le chemin le plus court vers « réessayer silencieusement un autre modèle quand Claude renvoie du 429 ». Vous envoyez une liste ordonnée ; OpenRouter la parcourt du haut vers le bas et renvoie le premier modèle qui a répondu.

Basculement Claude → GPT → Gemini en une seule requête (OpenRouter)

import openai

client = openai.OpenAI(
  api_key="YOUR_OPENROUTER_KEY",
  base_url="https://openrouter.ai/api/v1",
)

response = client.chat.completions.create(
  model="anthropic/claude-sonnet-4.5",
  extra_body={
      # Ordered fallback. If the first model 429s, is down, or is
      # rejected by moderation, OpenRouter tries the next one.
      "models": [
          "anthropic/claude-sonnet-4.5",
          "openai/gpt-5.4",
          "google/gemini-2.5-pro",
      ],
  },
  messages=[{"role": "user", "content": "Explain B-trees in one paragraph."}],
)

# 'model' in the response tells you which one actually answered.
print(response.model, "->", response.choices[0].message.content)

Trois choses que les gens ratent lors du premier essai :

  • La facturation suit le modèle qui a répondu, pas celui que vous avez demandé. Si Claude échoue et que GPT-5.4 répond, vous payez le tarif GPT-5.4 d'OpenRouter pour cette requête.
  • Le basculement se déclenche sur plus que du 5xx. La limitation de débit, l'indisponibilité du fournisseur, les erreurs de validation de longueur de contexte et les refus de modération de contenu promeuvent tous au modèle suivant. Ce dernier est le bord le plus tranchant — un refus de « modération » d'un fournisseur peut router silencieusement vers un plus permissif, ce qui peut ou non être ce que vous voulez. Revoyez votre liste de basculement avec le même soin qu'une ACL.
  • Vous ne pouvez pas mélanger models avec fallbacks. L'endpoint Messages au format Anthropic utilise un tableau fallbacks différent. Envoyer les deux clés dans la même requête renvoie une 400. Choisissez le format que parle votre client et tenez-vous-y.

L'incident de chaîne d'approvisionnement LiteLLM de mars 2026 : que faire concrètement

Le 24 mars 2026 à 10:39 UTC, deux versions PyPI malveillantes de LiteLLM — v1.82.7 et v1.82.8 — ont été publiées par un attaquant après qu'il a volé les identifiants PyPI du mainteneur via une compromission préalable de Trivy, un scanner de sécurité tournant dans le pipeline CI/CD de LiteLLM. PyPI a mis les paquets en quarantaine à 13:38 UTC (environ trois heures plus tard). Pendant la fenêtre d'exposition, des dizaines de milliers de téléchargements ont eu lieu. La charge utile était un infostealer avec un mécanisme de persistance (un fichier litellm_init.pth qui s'exécutait à chaque invocation Python, moissonnait les identifiants et installait une backdoor systemd). L'attribution va à un groupe suivi sous le nom de TeamPCP, qui a également compromis Trivy et Checkmarx KICS.

Si vous exploitez LiteLLM dans n'importe quel environnement, appliquez ceci une fois et gardez-le dans votre playbook de plateforme :

Guided walkthrough1 of 5
  1. v1.82.6 et antérieures sont saines. v1.83.0 et ultérieures (publiées via le pipeline CI/CD v2 reconstruit de LiteLLM) sont saines. Tout ce qui est entre les deux doit être désinstallé et l'environnement considéré comme contaminé. L'image Docker officielle (ghcr.io/berriai/litellm) n'a PAS été compromise — l'incident était PyPI uniquement.

La leçon plus large n'est pas « n'utilisez pas LiteLLM » — c'est « supposez que chaque dépendance de votre stack IA, y compris les scanners de sécurité, peut être un vecteur de livraison ». Épinglez les versions, signez les images et mettez votre passerelle sur un segment réseau qui n'atteint que les fournisseurs de modèles.


Choisir la bonne passerelle pour votre situation

Guided walkthrough1 of 5
  1. Un ou deux fournisseurs avec une petite équipe → sautez la passerelle ; les SDK directs suffisent. Trois fournisseurs ou plus OU une équipe où « qui a la clé » compte → passerelle. Si vous avez du DevOps et des exigences de confidentialité, auto-hébergez LiteLLM ou Portkey OSS. Si vous préférez payer quelqu'un d'autre pour l'exploiter, OpenRouter (hébergé uniquement) ou Vercel AI Gateway (excellent si vous y déployez déjà).

Combinaisons courantes qui tournent en production :

  • Développeur solo / prototype : OpenRouter direct. Une clé, plus de 300 modèles, fini.
  • Petite équipe, Claude-first : proxy LiteLLM avec Anthropic + un fournisseur de basculement, clés virtuelles par ingénieur, mise en cache Redis des prompts.
  • Produit natif Vercel : Vercel AI Gateway avec le AI SDK ; ajoutez OpenRouter comme basculement provider-options pour les modèles exotiques.
  • Régulé / UE : LiteLLM ou Portkey OSS auto-hébergé dans le VPC avec masquage PII Presidio en amont (voir Claude + Modèles Locaux pour le pattern de rédaction).
  • Produit IA avec trafic répété important : Portkey (la mise en cache sémantique génère communément 30 à 50 % de réduction de coût sur les charges de travail de type chat, selon les propres études de cas de Portkey — vérifiez sur votre trafic avant de croire aux chiffres d'affichage).

Ce qu'une passerelle ne résout PAS

Les passerelles sont du middleware — elles changent comment vous atteignez les modèles, pas quel modèle est le bon. Deux choses nécessitent toujours du vrai travail :

  • Portabilité des prompts. Claude, GPT et Gemini répondent différemment au même prompt, et les conventions de system prompt varient. Une passerelle ne réécrit pas votre prompt pour le fournisseur de basculement — c'est à ça que servent Porter des prompts entre modèles et Traduction cross-IA.
  • Évaluations. La passerelle rend facile l'A/B de deux modèles sur la même requête. Elle ne peut pas vous dire lequel était réellement meilleur sur VOTRE tâche. Faites une vraie évaluation (voir Évaluations) avant de changer les valeurs par défaut.

Une erreur courante est d'installer une passerelle et de considérer le « multi-modèle » comme fait. La passerelle est la couche de transport ; portabilité et évaluations sont la couche produit.


Testez-vous

0/5
  1. Quelle est la raison principale de placer une passerelle IA entre votre application et les fournisseurs de modèles, dès que vous en utilisez plus de deux ?
  2. Vous pointez Claude Code vers un proxy LiteLLM avec ANTHROPIC_BASE_URL. Que doit être ANTHROPIC_AUTH_TOKEN ?
  3. Le tableau de basculement d'OpenRouter promeut au modèle suivant quand le premier échoue. Sur laquelle de ces situations se déclenche-t-il ?
  4. Vous devez installer LiteLLM en production. Quelles versions sont sûres après l'incident de mars 2026 ?
  5. Vous êtes développeur solo sur Vercel qui veut essayer Claude, GPT et Gemini en une après-midi. Meilleur choix ?
Passerelles IA en un coup d'œil
Appuyez sur Entrée ou Espace pour retourner la carte. Utilisez les flèches gauche et droite pour naviguer entre les cartes.Terme affiché.
1 / 9
Key takeaways
  • Une passerelle IA est le routeur manquant entre votre app et chaque modèle — elle existe pour faire des clés virtuelles, budgets, basculement, journalisation et mise en cache une implémentation unique au lieu de N par fournisseur
  • Choisissez d'abord sur DEUX axes : auto-hébergé vs. hébergé (LiteLLM/Portkey OSS vs. OpenRouter/Vercel), et minimaliste vs. panneau de contrôle (OpenRouter/Vercel vs. LiteLLM/Portkey)
  • Le workflow tueur Claude Code : pointer ANTHROPIC_BASE_URL vers votre propre proxy LiteLLM et émettre des clés virtuelles par développeur — l'équipe obtient limites partagées, journaux et révocation en un clic sans toucher à la clé racine Anthropic
  • Le tableau models[] d'OpenRouter est le chemin le plus court vers un basculement silencieux Claude → GPT → Gemini, mais notez que les refus de modération sont aussi un déclencheur de basculement — revoyez la liste comme une ACL
  • Après l'attaque de chaîne d'approvisionnement LiteLLM de mars 2026, épinglez à v1.82.6 ou antérieure, ou v1.83.0+ ; préférez l'image Docker signée à pip ; liste blanche de sortie sur le proxy
  • Une passerelle est du transport, pas du produit — la portabilité des prompts et les évaluations nécessitent toujours du vrai travail, peu importe combien de modèles vous pouvez désormais atteindre

Sources et lectures complémentaires

En rapport sur ce site : Claude + Modèles Locaux : Patterns Hybrides · Porter des prompts entre modèles · Traduction cross-IA · Évaluations · Ce que l'IA coûte chez les différents fournisseurs