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

Déploiement canari d’un changement d’IA

Après cette leçon: Je peux envoyer une petite part du trafic vers un changement et décider par une règle.

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

Comment fonctionne un déploiement canari

Un déploiement canari envoie une petite part des utilisateurs vers un changement avant que tout le monde l’ait. Si le changement est mauvais, seuls quelques-uns rencontrent le défaut.

Commencer par une petite part est une bonne idée, mais il faut dire laquelle. Cette leçon rend la part exacte et fait de la décision une règle écrite avant la mise en ligne.

À la fin de cette leçon

Remarque

Je peux envoyer une petite part du trafic vers un changement et décider par une règle.

Mots clés

MotCe que ça veut direExemple
Canarile petit groupe qui reçoit un changement en premier
Partle pourcentage d’utilisateurs dans le canari5
Panierun numéro fixe de 0 à 99 pour chaque utilisateur
Promouvoirdonner le changement à plus d’utilisateurs
Annulerreprendre le changement
Margede combien le canari peut être moins bon

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

Un panier fixe décide qui est dedans

Ne tirez pas les utilisateurs au hasard à chaque fois : une personne passerait de l’ancienne à la nouvelle version. Donnez à chaque utilisateur un panier de 0 à 99 qui ne change jamais.

Un utilisateur est dans le canari quand son panier est sous la part. Avec une part de 20, les paniers 0 à 19 sont dedans.

Exemple détaillé : cinq utilisateurs

UtilisateurPanierDedans à la part 5Dedans à la part 20Dedans à la part 50
u74OuiOuiOui
u918NonOuiOui
u1533NonNonOui
u162NonNonNon
u1098NonNonNon

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

Une erreur courante

Attention

Beaucoup pensent qu’un petit canari sans erreur prouve que le changement est sûr. Cinq utilisateurs qui envoient peu de requêtes ne prouvent presque rien. Fixez d’abord un nombre minimal de requêtes et attendez que le canari l’ait atteint.

Écrivez la règle avant le déploiement

Comparez le pourcentage d’erreurs du canari à celui de l’ancienne version, à la même étape. Employez la division entière, arrondie vers le bas.

Attendez si le canari a moins de 50 requêtes. Annulez si son pourcentage dépasse celui de l’ancienne version plus une marge de 2. Sinon, promouvez.

Exemple détaillé : trois étapes

PartRequêtes du canariErreurs du canariPourcentage ancienDécision
54011Attendre, seulement 40 requêtes
2018042Promouvoir, 2 ne dépasse pas 4
50300182Annuler, 6 dépasse 4

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

Écrire l’assistant 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\";' '// Les jetons d’une réponse, ou null si elle n’en donne pas.' 'function compter(donnees, nom) {' '  return donnees.usage && typeof donnees.usage[nom] === \"number\" ? donnees.usage[nom] : null;' '}' > 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’assistant du modèle, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' '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 || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"statut \" + res.status);' '    const d = await res.json();' '    return { texte: d.choices[0].message.content, entree: compter(d, \"prompt_tokens\"), sortie: compter(d, \"completion_tokens\"), enregistre: false };' '  } catch (erreur) {' '    console.log(\"Échantillon enregistré : aucun modèle n’a répondu (\" + erreur.message + \").\");' '    return { texte: echantillon, entree: null, sortie: null, enregistre: true };' '  }' '}' '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 le script du canari, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'function panier(utilisateur) {' '  let s = 0;' '  for (let i = 0; i < utilisateur.length; i++) s = s + utilisateur.charCodeAt(i);' '  return (s * 7) % 100;' '}' 'function dansCanari(utilisateur, part) { return panier(utilisateur) < part; }' 'const utilisateurs = [];' 'for (let i = 1; i <= 20; i++) utilisateurs.push(\"u\" + i);' > canari.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 le script du canari, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const etapes = [' '  { part: 5, rc: 40, ec: 1, ra: 760, ea: 15 },' '  { part: 20, rc: 180, ec: 4, ra: 640, ea: 13 },' '  { part: 50, rc: 300, ec: 18, ra: 450, ea: 9 },' '];' 'function pourcent(e, n) { return Math.floor(e * 100 / n); }' 'function decider(s) {' '  if (s.rc < 50) return \"attendre\";' '  return pourcent(s.ec, s.rc) > pourcent(s.ea, s.ra) + 2 ? \"annuler\" : \"promouvoir\";' '}' >> canari.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 le script du canari, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  [5, 20].forEach(function (part) {' '    console.log(\"part \" + part + \" : \" + utilisateurs.filter(function (u) { return dansCanari(u, part); }).join(\" \"));' '  });' '  for (const s of etapes) {' '    const d = decider(s);' '    console.log(\"étape \" + s.part + \" : canari \" + pourcent(s.ec, s.rc) + \" pour cent, ancienne \" + pourcent(s.ea, s.ra) + \" pour cent -> \" + d);' '    if (d === \"annuler\" || d === \"attendre\") break;' '  }' '  const q = \"En une phrase courte, pourquoi n’envoyer d’abord qu’un petit nombre d’utilisateurs vers un changement ?\";' '  const echantillon = \"Si le changement est mauvais, seuls quelques utilisateurs rencontrent le défaut et vous pouvez revenir vite en arrière.\";' '  const reponse = await demander([{ role: \"user\", content: q }], echantillon, 60);' '  console.log(\"le modèle dit : \" + reponse.texte);' '}' 'main();' >> canari.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 le canari

Commande
docker exec -w /home/node/project agent node canari.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.

Ce que le Run affiche

LigneCe qu’elle montre
part 5 : u7Le seul utilisateur du canari à 5
part 20 : u7 u8 u9 u11 u12 u13 u20Sept utilisateurs. u7 est toujours dedans
étape 5 : canari 2 pour cent, ancienne 1 pour cent -> attendreMoins de 50 requêtes : on attend
le modèle dit : ...Une phrase du labo. Un échantillon enregistré si aucun modèle ne répond

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.