Budget de jetons
Donnez à chaque visiteur un budget qui se recharge avec le temps, et consommez-le selon le coût réel de chaque requête.
Le budget de jetons convient quand toutes les requêtes ne se valent pas : un appel à un modèle d'IA, par exemple, coûte plus cher qu'une simple lecture. Chaque visiteur dispose d'un seau de jetons qui se remplit régulièrement ; chaque requête en consomme un certain nombre. Quand le seau est vide, la requête est refusée avec une réponse 429.
Le problème
Une limite de débit traite toutes les requêtes pareil. Mais un appel à un modèle d'IA, une génération de document ou un envoi de SMS coûte bien plus que l'affichage d'une page : un utilisateur peut rester sous la limite de requêtes tout en vous coûtant très cher.
Ce qu'elle arrête
- la surconsommation d'une ressource coûteuse : jetons d'IA, SMS, calcul ;
- l'abus d'une offre gratuite ou d'un essai ;
- les pics qui dépassent votre budget, tout en laissant passer des rafales raisonnables.
Quand l'utiliser
Chatbots et fonctions d'IA, exports, envois de messages : partout où vous voulez un budget par utilisateur et par période, plutôt qu'un simple nombre de requêtes.
Configuration
import { tokenBucket } from "@zarex/express"; // ou le paquet de votre framework
rules: [tokenBucket({ capacity: 100, refillRate: 10, interval: "1m" })],Ici, chaque visiteur dispose de 100 jetons au maximum, et en récupère 10 chaque minute.
Consommer plusieurs jetons
Par défaut, une requête consomme 1 jeton. Indiquez le coût réel avec tokensRequested :
app.use(
"/api/chat",
zarex({
key: process.env.ZAREX_KEY!,
rules: [
tokenBucket({
capacity: 5000,
refillRate: 500,
interval: "1h",
characteristics: ["userId"],
}),
],
call: (req) => ({
characteristics: { userId: req.user?.id },
tokensRequested: estimerLeCout(req.body),
}),
})
);Options
| Option | Valeurs | Rôle |
|---|---|---|
capacity | de 1 à 1 000 000 | Obligatoire. Nombre maximal de jetons dans le seau. |
refillRate | de 1 à 1 000 000 | Obligatoire. Jetons rendus à chaque intervalle. |
interval | "30s", "1m", "1h", "1d"… | Obligatoire. Fréquence de recharge. |
characteristics | liste de noms | Ce qui identifie un visiteur. Défaut : son adresse IP. |
mode | "LIVE" · "DRY_RUN" · "OFF" | Défaut "LIVE". |