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

Passer le relais de l’IA à une personne

Après cette leçon: Je peux concevoir le moment où une personne prend le relais.

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

Demander une personne, et tourner en rond

Un client écrit : « Je veux parler à une personne. » Le robot répond : « Je peux vous aider ! » et repose la même question. Le client ferme l’appli et appelle le magasin.

Une bonne fonction sait quand s’arrêter. Passer le relais fait partie de la conception, ce n’est pas un échec.

À la fin de cette leçon

Remarque

Je peux concevoir le moment où une personne prend le relais.

Mots clés

MotCe que ça veut dire
Relaisle passage d’une conversation à une personne
Déclencheurune règle qui lance le relais
Note de contextece qu’on dit à la personne pour que personne ne répète
Filela liste des gens qui attendent une personne
Retourle fait de rendre la conversation au modèle

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

Quatre déclencheurs décident du relais

Écrivez les déclencheurs comme des règles, pour pouvoir les tester. Quatre sont courants. La personne l’a demandé. Le sujet est de ceux qu’un modèle ne doit pas trancher, comme un remboursement. La confiance du modèle est basse. La discussion a duré trop de tours.

Le premier doit toujours marcher. Personne ne devrait avoir à discuter avec une machine pour joindre quelqu’un.

La note et l’attente

La personne qui prend le relais ne doit pas demander au client de tout recommencer. Passez-lui une courte note : les motifs, le dernier message et le nombre de tours.

Dites au client combien de temps il attend, avec un vrai chiffre. Quand la personne a fini, décidez si la discussion retourne au modèle ou se termine.

Une erreur courante

Attention

Beaucoup pensent que passer le relais veut dire que la fonction a échoué, alors ils cachent le chemin vers une personne. C’est l’inverse. Un relais rapide et clair garde le client. Rendez la demande facile et envoyez le contexte avec.

É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 déclencheurs, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const REGLES = { maxTours: 6, confianceMin: 50, sujets: [\"remboursement\", \"reclamation\"] };' 'const DISCUSSIONS = [' '  { id: \"c1\", tours: 3, confiance: 90, sujet: \"horaires\", demande: false, dernier: \"Quand ouvrez-vous ?\" },' '  { id: \"c2\", tours: 4, confiance: 80, sujet: \"remboursement\", demande: false, dernier: \"Je veux être remboursé.\" },' '  { id: \"c3\", tours: 8, confiance: 40, sujet: \"livraison\", demande: false, dernier: \"Le colis n’est toujours pas arrivé.\" },' '  { id: \"c4\", tours: 2, confiance: 95, sujet: \"horaires\", demande: true, dernier: \"Passez-moi une personne.\" },' '];' > relais.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 déclencheurs, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function motifs(d) {' '  const sortie = [];' '  if (d.demande) sortie.push(\"demande\");' '  if (REGLES.sujets.includes(d.sujet)) sortie.push(\"sujet\");' '  if (d.confiance < REGLES.confianceMin) sortie.push(\"confiance\");' '  if (d.tours > REGLES.maxTours) sortie.push(\"tours\");' '  return sortie;' '}' >> relais.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 déclencheurs, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  for (const d of DISCUSSIONS) {' '    const pourquoi = motifs(d);' '    console.log(d.id + \" \" + (pourquoi.length > 0 ? \"passe la main \" + pourquoi.join(\"+\") : \"reste avec le modèle\"));' '  }' '  const n = DISCUSSIONS[2];' '  console.log(\"note \" + JSON.stringify({ id: n.id, motifs: motifs(n), dernier: n.dernier, tours: n.tours }));' '  const q = \"Écrivez une seule ligne courte qui dit à un client qu’une personne prend le relais et qu’il n’a rien à répéter.\";' '  const reponse = await demander([{ role: \"user\", content: q }], \"Une personne prend le relais. Vous n’avez rien à répéter.\", 30);' '  console.log(\"le client voit : \" + reponse.texte);' '}' 'main();' >> relais.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 déclencheurs

Commande
docker exec -w /home/node/project agent node relais.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
c1 reste avec le modèleAucun déclencheur
c2 passe la main sujetUn remboursement est un sujet pour une personne
c3 passe la main confiance+toursDeux déclencheurs à la fois
c4 passe la main demandeLe client a demandé : toujours
note {"id":"c3",...}Ce qu’on remet à la personne
le client voit : ...Une phrase. Les mots changent à chaque Run

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.