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

Écrire une tâche pour un agent de code

Après cette leçon: Je peux écrire une spécification de tâche qu’un agent de code peut finir et que je peux contrôler.

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

Écrire une tâche pour un agent de code

Un agent de code est un programme qui utilise un modèle de langage pour lire un dépôt, modifier des fichiers et lancer des commandes. Il travaille à partir de la tâche que vous écrivez, donc la tâche décide de ce que vous recevez.

« Améliore la boutique » peut revenir avec quarante fichiers modifiés. Une tâche claire revient avec un petit changement facile à contrôler. Poser une bonne question à un assistant est déjà utile ; cette leçon va plus loin et écrit une tâche entière.

À la fin de cette leçon

Remarque

Je peux écrire une spécification de tâche qu’un agent de code peut finir et que je peux contrôler.

Mots clés

MotCe que ça veut direExemple
Agent de codeun programme qui lit du code, modifie des fichiers et lance des commandes avec un modèle
Spécification de tâcheles consignes écrites pour un seul travail
Périmètrela partie du travail qui est incluse
Terminé quandun contrôle qui montre que le travail est fininode --test passe
Hors périmètrece que le travail ne doit pas toucher

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

Une tâche pour un agent a cinq parties

Le but dit ce qui change, en une phrase. Le périmètre dit quelle partie du travail est incluse. La liste des fichiers dit où l’agent a le droit d’écrire.

Terminé quand nomme un contrôle que vous pouvez lancer, comme une commande de test. Hors périmètre dit ce qui doit rester tel quel. Un agent s’arrête rarement pour demander, donc chaque partie répond à une question qu’il devinerait.

Exemple guidé : tâche floue, tâche claire

PartieTâche floueTâche claire
ButAméliorer la boutiqueAjouter une remise étudiante de 10 % à total
PérimètreNon précisétotal seulement
FichiersNon préciséboutique.js et boutique.test.js
Terminé quandNon précisénode --test passe avec 2 nouveaux tests
Hors périmètreNon préciséles prix et enEuros

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

Une erreur fréquente

Attention

Beaucoup pensent qu’un agent pose une question quand la tâche n’est pas claire. La plupart devinent et continuent, donc un trou devient un choix que vous n’avez pas fait. Écrivez le hors périmètre et le contrôle de fin avant de lancer l’agent.

Un script contrôle d’abord la tâche

Une liste de contrôle trouve les trous habituels en une seconde. Ce script garde trois spécifications enregistrées, A, B et C. Il cherche les parties manquantes, les mots flous comme « améliorer », plus de trois fichiers et un terminé quand sans test.

Rien ici ne lance l’agent. Le Run contrôle seulement les mots, donc ses trois premières lignes sont les mêmes pour tout le monde.

É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 contrôleur de spécifications, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const FLOUS = [\"mieux\", \"améliorer\", \"nettoyer\", \"ranger\", \"joli\", \"correctement\"];' 'const PARTIES = [\"but\", \"perimetre\", \"fichiers\", \"termine_quand\", \"hors_perimetre\"];' 'const specs = {' '  \"A\": { but: \"Améliorer le code de la boutique et le ranger un peu\" },' '  \"B\": { but: \"Ajouter une remise étudiante de 10 pour cent à total\", perimetre: \"total seulement\",' '    fichiers: [\"boutique.js\", \"boutique.test.js\", \"prix.js\", \"README.md\"], termine_quand: \"node --test passe\",' '    hors_perimetre: \"les prix\" },' '  \"C\": { but: \"Ajouter une remise étudiante de 10 pour cent à total\", perimetre: \"total seulement\",' '    fichiers: [\"boutique.js\", \"boutique.test.js\"], termine_quand: \"node --test passe avec 2 nouveaux tests\",' '    hors_perimetre: \"les prix et enEuros\" },' '};' > spec.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 contrôleur de spécifications, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function problemes(s) {' '  const sortie = PARTIES.filter(function (p) { return s[p] === undefined || s[p].length === 0; })' '    .map(function (p) { return p + \" manquant\"; });' '  if (s.but) {' '    const mots = s.but.toLowerCase().split(\" \");' '    FLOUS.forEach(function (f) { if (mots.indexOf(f) >= 0) sortie.push(\"flou : \" + f); });' '  }' '  if (s.fichiers && s.fichiers.length > 3) sortie.push(\"trop de fichiers\");' '  if (s.termine_quand && s.termine_quand.indexOf(\"test\") < 0) sortie.push(\"termine_quand sans test\");' '  return sortie;' '}' >> spec.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 contrôleur de spécifications, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  Object.keys(specs).forEach(function (nom) {' '    const trouves = problemes(specs[nom]);' '    console.log(\"spécification \" + nom + \" : \" + (trouves.length === 0 ? \"prête\" : \"à revoir \" + JSON.stringify(trouves)));' '  });' '  const q = \"En une phrase courte, pourquoi une tâche pour un agent de code a-t-elle besoin d’un contrôle de fin ?\";' '  const echantillon = \"Sans contrôle, l’agent ne sait pas quand s’arrêter et vous ne savez pas si le travail est bon.\";' '  const reponse = await demander([{ role: \"user\", content: q }], echantillon, 60);' '  console.log(\"le modèle dit : \" + reponse.texte);' '}' 'main();' >> spec.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 contrôleur de spécifications

Commande
docker exec -w /home/node/project agent node spec.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 qu’affiche le Run

LigneCe qu’elle montre
spécification A : à revoir [...]Quatre parties manquantes et deux mots flous
spécification B : à revoir ["trop de fichiers"]Quatre fichiers, c’est trop large pour une tâche
spécification C : prêteToutes les parties sont là et le contrôle est un test
le modèle dit : ...Une phrase du labo. Une ligne É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.