Un journal de décisions pour une fonction d’IA
Un journal de décisions est une courte liste des choix derrière une fonction, chacun avec ses options, son choix et sa preuve. Il compte, car dans six mois personne ne se souviendra pourquoi l’équipe a gardé le petit modèle.
L’équipe de la médiathèque a pris cinq décisions en quatre semaines. Un script vérifie maintenant que chacune pointe vers une trace écrite qui existe.
À la fin de cette leçon
Remarque
Je peux consigner les décisions derrière une fonction pour que d’autres puissent les suivre.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Journal de décisions | une liste datée de choix et de leurs raisons | |
| Option | l’une des voies que vous auriez pu prendre | |
| Choix | l’option que vous avez prise | |
| Preuve | une trace écrite qui montre pourquoi vous avez choisi | serie:v4 |
| Réexaminer | revoir une décision quand les preuves changent |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Options, choix et preuve d’une décision
Une entrée dit ce qui a été décidé, quelles options étaient ouvertes, laquelle a été prise et ce qui montrait qu’elle était bonne. Elle a une date et un identifiant.
Les options comptent le plus. Une décision à une seule option n’était pas une décision. Le lecteur doit voir ce que vous avez écarté.
Exemple : la décision D4
| Champ | Valeur |
|---|---|
| Décision | Plafonner les tentatives à 2 |
| Options | Plafond de 2, ou garder 5 |
| Choix | Plafond de 2 |
| Preuve | evenement:cause_trouvee et heure:11 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une preuve est un renvoi qu’un script vérifie
Écrivez la preuve sous forme d’identifiant : serie:v4 pour une série, heure:11 pour une heure, evenement:cause_trouvee pour un événement. Un script peut alors vérifier que chacune existe.
Il peut aussi repérer une entrée sans preuve, un choix qui n’est pas parmi les options et un identifiant utilisé deux fois.
Ajoutez une entrée, ne réécrivez jamais
Les décisions changent quand les preuves changent. Ne modifiez pas l’ancienne entrée. Ajoutez-en une nouvelle qui dit ce qu’elle remplace.
Le journal montre alors ce que vous pensiez et quand, ce dont un lecteur a besoin.
Une erreur fréquente
Attention
Beaucoup pensent qu’un journal de décisions est de la paperasse à écrire après coup. Écrit après coup, il devient une histoire qui colle au résultat. Écrivez chaque entrée le jour même, avec les preuves de ce jour.
Écrire le journal de décisions, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const fs = require(\"fs\");' 'const DECISIONS = [' ' { id: \"D1\", date: \"2026-03-02\", decision: \"Mettre la fiche des faits dans le prompt\", options: [\"dans le prompt\", \"chercher d’abord\"], choix: \"dans le prompt\", preuves: [\"serie:v1\"] },' ' { id: \"D2\", date: \"2026-03-09\", decision: \"Interdire les chiffres absents de la fiche\", options: [\"ajouter une règle\", \"ne rien faire\"], choix: \"ajouter la règle\", preuves: [\"serie:v2\"] },' ' { id: \"D3\", date: \"2026-03-16\", decision: \"Garder le petit modèle\", options: [\"petit modèle\", \"modèle plus gros\"], choix: \"petit modèle\", preuves: [\"serie:v5\", \"cout:v5\"] },' > decisions.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 journal de décisions, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' { id: \"D4\", date: \"2026-03-24\", decision: \"Plafonner les tentatives à 2\", options: [\"plafond de 2\", \"garder 5\"], choix: \"plafond de 2\", preuves: [\"evenement:cause_trouvee\", \"heure:11\"] },' ' { id: \"D5\", date: \"2026-03-25\", decision: \"Accepter les réponses longues sur l’impression\", options: [\"accepter\", \"raccourcir\"], choix: \"accepter\", preuves: [] },' '];' 'fs.writeFileSync(\"decisions.json\", JSON.stringify(DECISIONS, null, 1));' >> decisions.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.
Créer decisions.json
docker exec -w /home/node/project agent node decisions.jsAffiché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 vérificateur du journal, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const fs = require(\"fs\");' 'function connues() {' ' const ids = [];' ' [\"v1\", \"v2\", \"v3\", \"v4\", \"v5\"].forEach(function (v) { ids.push(\"serie:\" + v); });' ' [\"08\", \"09\", \"10\", \"11\", \"12\", \"13\", \"14\"].forEach(function (h) { ids.push(\"heure:\" + h); });' ' [\"fiche_publiee\", \"alerte_declenchee\", \"cause_trouvee\", \"tentatives_plafonnees\", \"cout_normal\"].forEach(function (c) { ids.push(\"evenement:\" + c); });' ' return ids;' '}' > verifier-journal.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 vérificateur du journal, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function lancer() {' ' const entrees = JSON.parse(fs.readFileSync(\"decisions.json\", \"utf8\"));' ' const ids = connues();' ' const vus = [];' ' let mauvaises = 0;' ' for (const e of entrees) {' ' const problemes = [];' ' if (e.preuves.length === 0) problemes.push(\"sans_preuve\");' ' else if (e.preuves.some(function (id) { return ids.includes(id) === false; })) problemes.push(\"preuve_inconnue\");' ' if (e.options.includes(e.choix) === false) problemes.push(\"mauvais_choix\");' ' if (vus.includes(e.id)) problemes.push(\"id_double\");' ' vus.push(e.id);' ' if (problemes.length > 0) { mauvaises = mauvaises + 1; console.log(e.id, problemes.join(\" \")); }' ' }' ' console.log(entrees.length + \" décisions, \" + mauvaises + \" avec des problèmes\");' '}' 'module.exports = { lancer };' 'if (require.main === module) lancer();' >> verifier-journal.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.
Vérifier le journal
docker exec -w /home/node/project agent node verifier-journal.jsAffiché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 vérificateur affiche
| Ligne | Ce qu’elle dit |
|---|---|
| D2 | mauvais_choix |
| D3 | preuve_inconnue |
| D5 | sans_preuve |
| Dernière ligne | 5 décisions, 3 avec des problèmes |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Écrire la correction
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const fs = require(\"fs\");' 'const entrees = JSON.parse(fs.readFileSync(\"decisions.json\", \"utf8\"));' 'entrees[1].choix = \"ajouter une règle\"; // le choix est l’une des options' 'entrees[2].preuves = [\"serie:v5\"]; // cout:v5 n’est pas une trace écrite' 'entrees[4].preuves = [\"serie:v4\"]; // v4 garde la réponse longue, c9' 'fs.writeFileSync(\"decisions.json\", JSON.stringify(entrees, null, 1));' 'require(\"./verifier-journal\").lancer();' > corriger-journal.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.
Corriger le journal et revérifier
docker exec -w /home/node/project agent node corriger-journal.jsAffiché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.