Implémenter la limitation de débit et les contrôles de coûts des API LLM : budgets de tokens, throttling par clé et tableaux de bord d'utilisation
Avant de commencer
- Bases de Node.js et TypeScript
- Bases de Docker (construction d'images, exécution de conteneurs)
- Une clé API OpenAI
Ce que vous apprendrez
- Configurer un reverse proxy Fastify qui transfère les requêtes vers OpenAI
- Compter les tokens avec tiktoken et estimer le coût de la requête avant l'envoi
- Implémenter l'authentification par clé API avec des clés hachées dans SQLite
- Construire une limitation de débit à fenêtre glissante pour RPM et TPM
- Appliquer des budgets de tokens quotidiens et mensuels par clé avec dégradation gracieuse
- Ajouter un cache exact-match pour réduire les appels API redondants
- Gérer les réponses SSE en streaming avec comptabilité en fin de flux
- Construire un tableau de bord d'utilisation avec Chart.js et déployer avec Docker
Sur cette page
Si votre équipe utilise directement des API LLM, vous avez déjà connu le problème : une intégration incontrôlée, une boucle de retry mal configurée ou un développeur enthousiaste peut brûler des centaines de dollars en quelques minutes. Les limites de débit côté fournisseur protègent le fournisseur, pas votre budget. Vous avez besoin de contrôles de votre côté.
Ce tutoriel guide la construction d’un proxy d’API LLM qui se place entre vos applications et OpenAI (ou tout fournisseur compatible) et applique des limites de débit par clé, des budgets de tokens, du caching et du suivi de coûts. C’est le compagnon pratique de LLM API Rate Limiting and Cost Control. Le code source complet est sur GitHub à llm-budget-proxy.
Avant de commencer, clonez le dépôt et installez les dépendances :
git clone https://github.com/InkByteStudio/llm-budget-proxy.git
cd llm-budget-proxy
npm install
Ce tutoriel est très riche en code et guide la construction étape par étape de :
- Le serveur proxy (8 min) — Un serveur Fastify qui accepte les requêtes sur
POST /v1/chat/completionset les transfère vers OpenAI via une chaîne de middleware (auth, rate limit, budget check). - Le comptage de tokens et l’estimation de coûts (7 min) — tiktoken pour compter les tokens d’entrée et estimer le coût du pire cas avant le transfert.
- L’authentification par clé API (7 min) — Clés hachées SHA-256 dans SQLite, jamais de clés en clair stockées.
- La limitation de débit par clé (7 min) — Fenêtre glissante en mémoire appliquant RPM et TPM par clé API avec headers
Retry-After. - Les limites de budget (8 min) — Vérifications de budget pré-requête avec seuils configurables pour les actions warn, downgrade et block.
- Le caching et le support du streaming (8 min) — Cache exact-match dans SQLite avec TTL, et gestion SSE streaming avec comptabilité de tokens en fin de flux.
- Le tableau de bord et les alertes (5 min) — Un tableau de bord single-page avec Chart.js et des notifications webhook debounced.
- La conteneurisation et le déploiement (5 min) — Dockerfile multi-stage et docker-compose.yml pour un déploiement en 5 minutes.
Gardez pricing.yml dans le contrôle de version et mettez-le à jour quand les prix des fournisseurs changent. Le proxy refusera les requêtes pour des modèles non listés dans ce manifeste, ce qui empêche les coûts surprises de modèles inconnus.
Le model downgrade est désactivé par défaut (modelDowngrade.enabled: false dans la config). Activez-le uniquement quand vos appelants peuvent tolérer de recevoir des réponses d’un modèle moins cher. Certaines applications cassent quand le modèle change de manière inattendue.
La fenêtre glissante en mémoire fonctionne bien pour les déploiements mono-instance. Si vous exécutez plusieurs instances de proxy derrière un load balancer, déplacez l’état de la fenêtre vers Redis ou une base de données SQLite WAL partagée.
Pour le raisonnement architectural complet et l’approche de modélisation des coûts, consultez LLM API Rate Limiting and Cost Control. Pour télécharger une checklist imprimable pour le déploiement de contrôles de coûts LLM, consultez la LLM Cost Control Checklist.
Articles Connexes
Construire, sécuriser et déployer un serveur MCP personnalisé : de la définition d'outils à la production
Tutoriel pas à pas pour construire un serveur MCP au-delà du hello-world avec PostgreSQL, authentification, sandboxing de requêtes et déploiement Docker.
Comment migrer d'Ingress NGINX vers Gateway API avant la fin de support
Apprenez à migrer d'ingress-nginx vers Gateway API avec un audit par étapes, une traduction, une validation côte à côte et un plan de bascule sûr avant la fin du support.