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

Demander le raisonnement par étapes

Après cette leçon: Je peux demander des étapes quand elles aident, et ne pas le faire quand elles n’aident pas.

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

Demander les étapes avant la réponse

Demander un raisonnement par étapes, c’est demander au modèle d’écrire son travail avant sa réponse. Pour un calcul ou un plan, les étapes peuvent rendre la bonne réponse plus probable.

Les étapes coûtent des mots, et les mots coûtent de l’argent et du temps. Le savoir-faire, c’est donc de savoir quand les demander, et de vérifier la réponse quand on le fait.

À la fin de cette leçon

Remarque

Je peux demander des étapes quand elles aident, et ne pas le faire quand elles n’aident pas.

Mots clés

MotCe que ça veut dire
Étapeun petit morceau du raisonnement
Raisonnementles étapes qui mènent à une réponse
Ligne de réponsela dernière ligne, qui contient seulement la réponse
Vérificationun test qui dit si la réponse est juste
Coûtles jetons et le temps qu’une réponse utilise
Enregistréeune réponse gardée plus tôt, pas faite maintenant

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

Pourquoi les étapes peuvent-elles aider ?

Un modèle écrit un morceau de texte à la fois, et chaque morceau peut s’appuyer sur ce qu’il a déjà écrit. Quand le raisonnement est sur la page, l’étape suivante peut s’en servir. Un total de 30 est plus facile à atteindre par 2, puis 6, puis 30.

Cela aide pour les calculs, les plans et les règles à plusieurs parties. Cela aide peu pour une simple recherche, comme la capitale d’un pays.

Quand demander des étapes

QuestionÉtapes ?Pourquoi
Coût total de 15 trajets à 2 eurosOuiDeux calculs liés
Laquelle de ces règles l’utilisateur a-t-il enfreinte ?OuiPlusieurs parties à vérifier
Réécrivez cette ligne plus polimentNonUn seul geste, rien à calculer
Cet avis est-il bon ou mauvais ?NonUne étiquette suffit comme réponse

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 séparateur d’étapes, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const QUESTION = \"Un trajet en tram coûte 2 euros. Léa fait 3 trajets par jour pendant 5 jours. Quel est le coût total ?\";' 'const ENREGISTREE = \"Étape 1 : Un trajet coûte 2 euros.\nÉtape 2 : 3 trajets par jour coûtent 6 euros.\nÉtape 3 : 5 jours coûtent 30 euros.\nRéponse : 30 euros\";' > etapes3.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 séparateur d’étapes, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function separer(reponse) {' '  const etapes = [];' '  let resultat = \"\";' '  for (const ligne of reponse.split(\"\n\")) {' '    if (ligne.startsWith(\"Étape \")) etapes.push(ligne.slice(ligne.indexOf(\":\") + 1).trim());' '    if (ligne.startsWith(\"Réponse :\")) resultat = ligne.slice(9).trim();' '  }' '  return { etapes: etapes, resultat: resultat };' '}' 'function montrer(nom, reponse) {' '  const r = separer(reponse);' '  console.log(nom + \" : \" + r.etapes.length + \" étapes, réponse \" + (r.resultat || \"aucune\"));' '}' >> etapes3.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 séparateur d’étapes, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  montrer(\"enregistrée\", ENREGISTREE);' '  const forme = \" Travaillez par petites étapes qui commencent par Étape 1 :, et ainsi de suite. Terminez par une ligne qui commence par Réponse :\";' '  const reponse = await demander([{ role: \"user\", content: QUESTION + forme }], ENREGISTREE, 150);' '  montrer(\"modèle\", reponse.texte);' '}' 'main();' >> etapes3.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 et séparer une réponse

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

La première ligne sépare une réponse enregistrée : 3 étapes, réponse 30 euros. La deuxième ligne fait la même chose pour le modèle du labo. Sans modèle, un Échantillon enregistré s’affiche et la deuxième ligne est la même que la première.

Un modèle peut ne pas garder votre format. Si sa ligne dit réponse aucune, le modèle n’a pas écrit de ligne qui commence par Réponse :. Votre code doit s’y attendre.

Une erreur courante

Attention

Beaucoup pensent que si les étapes ont l’air sensées, la réponse est juste. Une réponse peut montrer de belles étapes, puis écrire un autre résultat. Comparez toujours la ligne de réponse avec la dernière étape, ou avec une valeur que vous connaissez.

À 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.