Comment écrire une conception d’une page
Une conception d’une page dit comment une fonction adossée à un modèle va marcher et échouer, avant que quiconque la construise. Elle nomme la passerelle, la file, les évaluations, le budget, le repli et les règles de sécurité au même endroit. C’est important, car chacun de ces choix est bon marché sur le papier et coûteux à ajouter après coup.
Deux ingénieurs se souviennent chacun d’une limite de débit différente. La page de conception tranche, et un script peut la vérifier.
À la fin de cette leçon
Remarque
Je peux écrire une conception d’une page pour une fonction adossée à un modèle.
Mots-clés
| Mot | Ce que ça veut dire |
|---|---|
| Page de conception | une page qui dit comment une fonction marche |
| Exigence | une affirmation que la conception doit satisfaire |
| Repli | ce qui se passe quand un appel au modèle échoue |
| Budget | le plus qu’une fonction a le droit de dépenser |
| Évaluation | un test de qualité sur des cas fixes |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Six sections couvrent une fonction
Écrivez une courte section par sujet. Passerelle : clés, limites, choix du modèle. File : quels appels sont des tâches et comment les reprises sont bornées. Évaluations : les cas et la note de passage. Budget : la limite et ce qui se passe quand on l’atteint. Repli : ce que voit l’utilisateur quand un appel échoue. Sécurité : ce que le prompt peut contenir et ce qui est journalisé.
Une page oblige à choisir. Deux phrases par section suffisent.
Exemple travaillé : ce que chaque section doit dire
| Section | Une exigence qu’elle satisfait | Expression à chercher |
|---|---|---|
| Passerelle | Les appelants n’ont jamais la clé du fournisseur | clé client |
| File | Le travail lent ne bloque pas une requête | tâche, reprise |
| Évaluations | Un changement se juge sur des cas fixes | cas, taux de réussite |
| Budget | La dépense a un plafond | plafond quotidien |
| Repli | L’utilisateur obtient toujours quelque chose | réponse simple |
| Sécurité | Les données personnelles sont réduites et les journaux sûrs | données personnelles, journal |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un script peut vérifier une page de conception
Transformez chaque exigence en une section et quelques expressions qui doivent y figurer. Un court script lit la page et liste ce qui manque. Il ne peut pas juger si la conception est bonne. Il prouve seulement que la page a répondu à chaque question.
Lancez-le à la relecture, et gardez la page courte : une limite de mots est aussi une exigence.
Une erreur fréquente
Attention
Beaucoup pensent qu’une conception qui passe le script est une bonne conception. Le script vérifie qu’un sujet est mentionné, pas que le choix est juste. Passer est le début de la relecture, jamais sa fin.
Écrire l’aide du modèle, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const base = process.env.AI_URL || \"http://ai:4000\";' '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 || 200 }),' ' signal: AbortSignal.timeout(30000),' ' });' ' if (res.ok === false) throw new Error(\"statut \" + res.status);' ' return (await res.json()).choices[0].message.content;' > 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’aide du modèle, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' } catch (erreur) {' ' console.log(\"Échantillon enregistré : aucun modèle n’a répondu (\" + erreur.message + \").\");' ' const liste = [].concat(echantillon);' ' const tour = messages.filter(function (m) { return m.role === \"assistant\"; }).length;' ' return liste[Math.min(tour, liste.length - 1)];' ' }' '}' '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 la vérification, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Une conception d’une page pour une fonction de résumé de tickets, inventée pour la leçon.' 'const conception = {' ' passerelle: \"Les appelants utilisent une clé client. La passerelle applique une limite de débit de 60 par minute et choisit le modèle.\",' ' file: \"Un résumé est une tâche. Un exécutant la lance et une reprise est bornée à trois essais.\",' ' evaluations: \"Quarante cas aux réponses connues. On compare le taux de réussite de chaque version du prompt.\",' ' budget: \"Un plafond quotidien par équipe. Au-delà, la fonction le dit et s’arrête.\",' ' repli: \"Si le modèle échoue, on essaie un second modèle, puis on montre les premières lignes du ticket.\",' ' securite: \"Les tickets peuvent contenir des données personnelles : le prompt ne reçoit que le nécessaire.\",' '};' > design.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 la vérification, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const exigences = [' ' { id: \"E1\", section: \"passerelle\", mots: [\"clé client\", \"limite de débit\"] },' ' { id: \"E2\", section: \"file\", mots: [\"tâche\", \"reprise\"] },' ' { id: \"E3\", section: \"evaluations\", mots: [\"cas\", \"taux de réussite\"] },' ' { id: \"E4\", section: \"budget\", mots: [\"plafond quotidien\"] },' ' { id: \"E5\", section: \"repli\", mots: [\"réponse simple\"] },' ' { id: \"E6\", section: \"securite\", mots: [\"données personnelles\", \"journal\"] },' '];' >> design.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 la vérification, partie 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function verifier(d, liste, maxMots) {' ' const sortie = [];' ' liste.forEach(function (e) {' ' const texte = (d[e.section] || \"\").toLowerCase();' ' if (texte.trim() === \"\") { sortie.push(e.id + \" : pas de section \" + e.section); return; }' ' e.mots.forEach(function (m) { if (texte.indexOf(m) < 0) sortie.push(e.id + \" : manque \" + m); });' ' });' ' let n = 0;' ' for (const k in d) n += d[k].split(\" \").length;' ' if (n > maxMots) sortie.push(\"trop long : \" + n + \" mots\");' ' return sortie;' '}' 'const problemes = verifier(conception, exigences, 120);' 'problemes.forEach(function (p) { console.log(\"Problème :\", p); });' 'console.log(\"Exigences satisfaites :\", exigences.length - problemes.length, \"sur\", exigences.length);' >> design.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 la page de conception
docker exec -w /home/node/project agent node design.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 Run n’a pas besoin de modèle
La vérification est du code simple sur du texte : elle ne fait aucun appel. L’aide est écrite pour les exercices suivants, et un Run qui appelle un modèle affiche un échantillon enregistré étiqueté quand aucun ne répond.
La conception est inventée. Une vraie conception nomme vos propres services et vos propres chiffres.
Une sortie possible
| Ligne | Ce qu’elle montre |
|---|---|
| Problème : E5 : manque réponse simple | Le repli ne dit jamais ce que voit l’utilisateur à la fin |
| Problème : E6 : manque journal | La section de sécurité ne dit rien des journaux |
| Exigences satisfaites : 4 sur 6 | Quatre sections ont répondu à chaque question |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.