Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

À quoi sert une passerelle LLM

Après cette leçon: Je peux dire à quoi sert une passerelle placée devant les appels au modèle.

Leçon de 60 min7 commandesLab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Pourquoi passer par une passerelle

Une passerelle LLM est un service unique par lequel passent tous les appels au modèle. Elle détient les clés du fournisseur, applique les limites, journalise l’appel et choisit le modèle. C’est utile, car des équipes qui appellent le fournisseur directement ont chacune leur copie de chaque règle.

Une entreprise a trois produits qui appellent un modèle. L’un laisse fuir une clé dans un journal de build. L’autre n’a pas de limite et dépense un mois de budget en une nuit. Une passerelle ramène les deux à une seule correction.

À la fin de cette leçon

Remarque

Je peux dire à quoi sert une passerelle placée devant les appels au modèle.

Mots-clés

MotCe que ça veut dire
Passerelleun service par lequel passent tous les appels au modèle
Clé clientune clé qu’une équipe utilise pour joindre la passerelle
Limite de débitun plafond de requêtes sur une durée
Routagele choix du modèle qui traite une requête
Journal des requêtesune trace de chaque appel, sans son texte

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une passerelle fait quatre tâches

Chaque tâche est une règle appliquée avant ou après l’appel. Clés : les appelants ont une clé client, et seule la passerelle a la clé du fournisseur. Limites : un compte par équipe et par minute. Routage : une règle choisit le modèle. Journal : une trace par appel.

Comme tous les appels passent par une seule fonction, changer une règle se fait à un seul endroit.

Exemple travaillé : cinq requêtes, limite deux

RequêteCléMotsRésultat
1cle-lyon40ok, petit-modele
2cle-lyon500ok, grand-modele
3cle-lyon20limite : Lyon en a déjà deux
4cle-zzz10refusée : cette clé n’existe pas
5cle-nantes80ok, petit-modele

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Ce qu’une passerelle peut journaliser

Journalisez l’identifiant, l’équipe, le statut, le modèle, la taille et l’heure. Ne journalisez pas le texte du prompt. Les prompts contiennent des données personnelles, et un journal est lu par plus de monde que la fonction elle-même.

La passerelle est aussi un point de défaillance unique et un saut de plus. Donnez-lui un délai maximal, lancez-en plusieurs copies et gardez ses règles courtes.

Une erreur fréquente

Attention

Beaucoup pensent qu’une passerelle sécurise les appels parce qu’elle vérifie les clés. Elle vérifie qui appelle, pas ce qui est demandé. Une clé valide peut envoyer un prompt nuisible. Les limites et les journaux bornent les dégâts ; ils ne jugent pas le texte.

Écrire l’aide du modèle, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const base = process.env.AI_URL || \"http://ai:4000\";' 'async function demander(messages, echantillon, max) {' '  try {' '    const res = await fetch(base + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: messages, max_tokens: max || 200 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"statut \" + res.status);' '    return (await res.json()).choices[0].message.content;' > model.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire l’aide du modèle, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' '  } catch (erreur) {' '    console.log(\"Échantillon enregistré : aucun modèle n’a répondu (\" + erreur.message + \").\");' '    const liste = [].concat(echantillon);' '    const tour = messages.filter(function (m) { return m.role === \"assistant\"; }).length;' '    return liste[Math.min(tour, liste.length - 1)];' '  }' '}' 'module.exports = { demander };' >> model.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire la passerelle, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const CLES = { \"cle-lyon\": \"lyon\", \"cle-nantes\": \"nantes\" }; // clés inventées' 'const LIMITE = 2; // requêtes acceptées par équipe' 'const compteurs = {};' 'const journal = [];' > gateway.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire la passerelle, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function choisir(requete) {' '  return requete.mots > 300 ? \"grand-modele\" : \"petit-modele\";' '}' 'function passerelle(requete) {' '  const equipe = CLES[requete.cle];' '  let statut = \"ok\";' '  if (equipe === undefined) statut = \"refuse\";' '  else if ((compteurs[equipe] || 0) >= LIMITE) statut = \"limite\";' '  if (statut === \"ok\") compteurs[equipe] = (compteurs[equipe] || 0) + 1;' '  const modele = statut === \"ok\" ? choisir(requete) : \"aucun\";' '  journal.push({ id: requete.id, equipe: equipe || \"inconnue\", statut: statut, modele: modele });' '}' >> gateway.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire la passerelle, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const requetes = [' '  { id: 1, cle: \"cle-lyon\", mots: 40 },' '  { id: 2, cle: \"cle-lyon\", mots: 500 },' '  { id: 3, cle: \"cle-lyon\", mots: 20 },' '  { id: 4, cle: \"cle-zzz\", mots: 10 },' '  { id: 5, cle: \"cle-nantes\", mots: 80 },' '];' 'requetes.forEach(function (r) { passerelle(r); });' 'journal.forEach(function (ligne) { console.log(ligne.id, ligne.equipe, ligne.statut, ligne.modele); });' >> gateway.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire la passerelle, partie 4

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const echantillon = \"Une passerelle garde clés, limites et journal au même endroit.\";' '  const messages = [{ role: \"user\", content: \"En une phrase courte : pourquoi mettre une passerelle devant les appels au modèle ?\" }];' '  console.log(\"Appel réel pour la requête 1 :\", await demander(messages, echantillon, 40));' '}' 'main();' >> gateway.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lancer la passerelle

Commande
docker exec -w /home/node/project agent node gateway.js

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une doublure, pas une vraie passerelle

Cette passerelle est une fonction sur une liste. Le labo n’a pas de réseau de services, donc la limite vit dans une variable. Une vraie passerelle est un service avec un stockage partagé pour ses compteurs, afin que chaque copie voie les mêmes chiffres.

Ici, la plateforme joue déjà ce rôle : elle ajoute votre jeton et choisit le modèle pour l’unique appel réel.

Une sortie possible

LigneCe qu’elle montre
1 lyon ok petit-modeleAcceptée et envoyée au petit modèle
3 lyon limite aucunRefusée, rien n’est envoyé à un modèle
4 inconnue refuse aucunRefusée, l’équipe est inconnue
Appel réelUne phrase courte d’un modèle, ou un échantillon enregistré étiqueté

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

À propos de ce labo et de sa source: Lab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.