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

Conduire un incident d’IA

Après cette leçon: Je peux conduire un incident d’IA et en tirer une leçon.

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

Que faire quand une fonction d’IA échoue

Un incident est un moment où une fonction fait du tort aux utilisateurs ou à l’entreprise, par exemple de faux remboursements ou une adresse divulguée. Conduire un incident, c’est le repérer, limiter les dégâts, le corriger et en tirer une leçon.

Enregistrer des traces aide à retrouver une panne. Cette leçon emploie ces enregistrements pour conduire l’incident.

À la fin de cette leçon

Remarque

Je peux conduire un incident d’IA et en tirer une leçon.

Mots clés

MotCe que ça veut direExemple
Incidentun moment où une fonction fait du tort aux utilisateurs
Chronologieles événements dans l’ordre, avec leur heure
Gravitéle sérieux de l’incident, de 1 à 32
Atténuerlimiter les dégâts avant d’avoir corrigé la cause
Revueune réunion pour comprendre ce qui a laissé passer l’incident

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

Commencez par une chronologie tirée des traces

Rangez chaque événement dans l’ordre du temps, même si les enregistrements arrivent dans un autre ordre. Chaque ligne dit quand, qui et quoi.

Calculez ensuite deux nombres. Le délai de détection va du début au premier signe. Le délai de rétablissement va du début à la correction.

Exemple détaillé : une consigne qui rembourse à tort

MinuteQuiÉvénementCe que cela donne
0livraisonNouvelle consigne en ligneLe début
25supportPremier signalement d’un clientDélai de détection : 25
31astreinteIncident déclaréLe travail commence
40astreinteAncienne consigne rétablieLes dégâts s’arrêtent
52supervisionRemboursements revenus à zéroDélai de rétablissement : 52

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

La gravité décide qui fait quoi

Écrivez la règle de gravité avant un incident. La gravité 1 : des données privées sont montrées, ou la moitié des utilisateurs ou plus sont touchés. La gravité 2 : dix pour cent ou plus. Au-dessous, c’est 3.

Chaque gravité a une courte liste d’actions, et chaque action a un rôle : responsable, correcteur ou communication. Les rôles évitent que tous fassent la même tâche.

Exemple détaillé : gravité et actions

GravitéQuandActions
1Données privées, ou 50 pour cent ou plusPrévenir le propriétaire, revenir en arrière, informer les utilisateurs, tenir une revue
210 à 49 pour centRevenir en arrière, informer l’équipe, tenir une revue
3Moins de 10 pour centNoter dans le journal

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

Une erreur courante

Attention

Beaucoup pensent qu’une revue doit trouver qui a fait l’erreur. Les gens cachent alors des faits la fois suivante. Demandez ce qui, dans le système, a laissé passer l’erreur : pas de canari, pas d’alerte, une règle que personne ne contrôlait. Écrivez des rôles dans la revue, jamais le nom d’une personne.

É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 de l’incident, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const evenements = [' '  { a: 31, qui: \"astreinte\", sorte: \"declare\", quoi: \"incident déclaré\" },' '  { a: 0, qui: \"livraison\", sorte: \"debut\", quoi: \"nouvelle consigne en ligne\" },' '  { a: 52, qui: \"supervision\", sorte: \"resolu\", quoi: \"remboursements revenus à zéro\" },' '  { a: 25, qui: \"support\", sorte: \"detecte\", quoi: \"premier signalement d’un client\" },' '  { a: 40, qui: \"astreinte\", sorte: \"attenue\", quoi: \"ancienne consigne rétablie\" },' '];' > incident.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 de l’incident, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function premier(sorte) { return evenements.filter(function (e) { return e.sorte === sorte; })[0].a; }' 'function gravite(pourcent, prive) {' '  if (prive || pourcent >= 50) return 1;' '  return pourcent >= 10 ? 2 : 3;' '}' 'const tries = evenements.slice().sort(function (x, y) { return x.a - y.a; });' >> incident.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 de l’incident, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  tries.forEach(function (e) { console.log(\"minute \" + e.a + \" \" + e.qui + \" : \" + e.quoi); });' '  console.log(\"délai de détection : \" + (premier(\"detecte\") - premier(\"debut\")) + \" minutes\");' '  console.log(\"délai de rétablissement : \" + (premier(\"resolu\") - premier(\"debut\")) + \" minutes\");' '  console.log(\"gravité : \" + gravite(18, false));' '  const q = \"En une phrase courte, pourquoi une revue d’incident nomme-t-elle des rôles et non des personnes ?\";' '  const echantillon = \"Les gens cachent leurs erreurs quand on les accuse, alors que la revue doit trouver ce que le système a laissé passer.\";' '  const reponse = await demander([{ role: \"user\", content: q }], echantillon, 60);' '  console.log(\"le modèle dit : \" + reponse.texte);' '}' 'main();' >> incident.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 rapport d’incident

Commande
docker exec -w /home/node/project agent node incident.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
minute 0 livraison : nouvelle consigne en ligneCinq événements, triés par minute
délai de détection : 25 minutesLe premier signalement moins le début
délai de rétablissement : 52 minutesLe retour à zéro moins le début
gravité : 2Pour 18 pour cent touchés, sans données privées
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.