Tutoriel

Statut éditorial : En attente de relecture

Déployer une passerelle LLM avec FastAPI, LiteLLM et Docker

Exposer plusieurs fournisseurs derrière une API contrôlée avec routage, secrets, limites, image Docker et vérifications de santé.

Classification du contenu

Types

  • Modèles et API

Technologies

Niveau
Intermédiaire
Publié le
24 août 2026
Dernière relecture
Relecture en attente
Prochaine vérification
24 novembre 2026

Une passerelle centralise le choix des modèles, les secrets, les quotas et l’observabilité. L’application appelle votre API ; LiteLLM adapte la requête au fournisseur choisi.

Installer

~~~bash python -m venv .venv source .venv/bin/activate pip install -U fastapi 'uvicorn[standard]' litellm pydantic-settings ~~~

Créer une route minimale

~~~python import os from fastapi import FastAPI, Depends from pydantic import BaseModel, Field from litellm import acompletion

app = FastAPI()

class ChatRequest(BaseModel): prompt: str = Field(min_length=1, max_length=20_000) model_alias: str = 'fast'

MODELS = { 'fast': os.environ['FAST_MODEL'], 'quality': os.environ['QUALITY_MODEL'], }

@app.post('/v1/chat') async def chat(request: ChatRequest, user=Depends(authenticate)): model = MODELS[request.model_alias] response = await acompletion( model=model, messages=[{'role': 'user', 'content': request.prompt}], max_tokens=500, timeout=30, ) return { 'text': response.choices[0].message.content, 'usage': response.usage, 'model_alias': request.model_alias, } ~~~

Le client choisit un alias, pas un identifiant fournisseur arbitraire. Vous gardez ainsi le contrôle des modèles autorisés.

Conteneuriser

~~~dockerfile FROM python:3.12-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY app.py . RUN useradd --create-home appuser USER appuser EXPOSE 8000 CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"] ~~~

Injectez les clés au démarrage via un gestionnaire de secrets. Ne les copiez jamais dans l’image.

Routage et repli

Un fallback est utile pour une indisponibilité temporaire, mais il peut changer qualité, coût ou résidence des données. Autorisez-le par politique et journalisez le modèle réellement utilisé. Ne relancez pas une requête non idempotente sans contrôle.

Quotas et observabilité

Authentifiez chaque appel, plafonnez requêtes, tokens et dépense par client. Journalisez identifiant de trace, alias, fournisseur, latence, tokens et statut, sans prompt brut par défaut. Ajoutez /health pour le processus et un contrôle séparé de disponibilité des fournisseurs.

Production

Placez la passerelle derrière TLS, configurez timeouts, taille maximale du corps et nombre de connexions. Pour le streaming, propagez l’annulation quand le client se déconnecte. Versionnez LiteLLM et testez les réponses normalisées avant chaque mise à jour.

FAQ

Pourquoi utiliser une passerelle ?

Elle évite de disperser clés, politiques et code fournisseur dans toutes les applications.

Faut-il retourner le nom réel du modèle ?

Conservez-le au minimum dans les traces. L’exposition au client dépend de votre contrat et de vos exigences d’audit.

Sources utilisées