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

Coût, accès et vie privée

Après cette leçon: Je peux chiffrer une journée d’entrées image, page et son et signaler celles qui demandent du soin.

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

Une fonction photo qui coûte trop cher

Une équipe ajoute « interroge votre photo » à une appli. En une semaine, la facture est élevée, une personne aveugle ne peut pas s’en servir, et quelqu’un demande pourquoi un visage est gardé trois mois.

Les images, les pages et le son coûtent plus que le texte, peuvent laisser des gens de côté et peuvent contenir des données personnelles. Prévoyez les trois.

À la fin de cette leçon

Remarque

Je peux chiffrer une journée d’entrées image, page et son et signaler celles qui demandent du soin.

Mots clés

MotCe que ça veut dire
Texte alternatifdes mots qui remplacent une image pour qui ne peut pas la voir
Transcriptionles mots d’un son, écrits
Donnée personnelleun fait qui peut identifier une personne, comme un visage ou une voix
Conservationla durée pendant laquelle on garde des données
Budgetle maximum qu’on prévoit de dépenser

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

Le prix suit la taille de l’entrée

Le texte se paie en jetons (voir le module sur le coût et le traçage). Une image se paie en tuiles, une page en pages et un son en secondes.

Dans cette leçon, chaque requête coûte 1. Une image ajoute 20 et 10 par tuile, une page ajoute 5 chacune, et le son ajoute 2 par tranche de 10 secondes. Ce sont des unités inventées. Lisez toujours une vraie grille de prix.

Le prix de quatre entrées

EntréeTailleCalculCoût
Image6 tuiles1 + 20 + 6081
Page4 pages1 + 2021
Audio25 secondes1 + 2 x 37
Audio10 secondes1 + 2 x 13

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

Accès : qui la fonction laisse-t-elle de côté ?

Une personne qui ne peut pas voir une image a besoin d’un texte alternatif. Une personne qui ne peut pas entendre un son a besoin d’une transcription. Si une fonction ne donne ni l’un ni l’autre, elle laisse ces personnes de côté.

Un modèle sait souvent écrire les deux. Mais une personne doit les vérifier, comme l’a montré la leçon précédente. Prévoyez que les mots existent avant de garder une image ou un son.

Une erreur courante

Attention

Beaucoup pensent qu’un visage ou une voix n’est une donnée personnelle que si la personne est nommée. Un visage ou une voix peut identifier quelqu’un même sans nom à côté. Traitez les deux comme des données personnelles et ne les gardez pas plus longtemps que nécessaire.

É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 script de prix, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const elements = [' '  { id: 1, genre: \"image\", tuiles: 6, alt: true, visage: false, voix: false, jours: 7 },' '  { id: 2, genre: \"image\", tuiles: 16, alt: false, visage: true, voix: false, jours: 90 },' '  { id: 3, genre: \"page\", pages: 4, alt: true, visage: false, voix: false, jours: 30 },' '  { id: 4, genre: \"audio\", secondes: 25, alt: false, visage: false, voix: true, jours: 31 },' '];' > cout6.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 script de prix, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function prix(e) {' '  if (e.genre === \"image\") return 1 + 20 + 10 * e.tuiles;' '  if (e.genre === \"page\") return 1 + 5 * e.pages;' '  if (e.genre === \"audio\") return 1 + 2 * Math.ceil(e.secondes / 10);' '  return 1;' '}' >> cout6.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 script de prix, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function alertes(e) {' '  const sortie = [];' '  if (e.visage) sortie.push(\"visage\");' '  if (e.voix) sortie.push(\"voix\");' '  if (e.alt === false && e.genre === \"image\") sortie.push(\"sans texte alternatif\");' '  if (e.alt === false && e.genre === \"audio\") sortie.push(\"sans transcription\");' '  if (e.jours > 30) sortie.push(\"gardé trop longtemps\");' '  return sortie;' '}' >> cout6.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 script de prix, partie 4

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  let total = 0;' '  for (const e of elements) {' '    total += prix(e);' '    console.log(e.id + \" \" + e.genre + \" : coût \" + prix(e) + \", alertes \" + JSON.stringify(alertes(e)));' '  }' '  console.log(\"total \" + total);' '  const q = \"Écrivez un avis court qui prévient les utilisateurs que leurs messages vocaux sont supprimés après 30 jours.\";' '  const reponse = await demander([{ role: \"user\", content: q }], \"Vos messages vocaux sont supprimés après 30 jours.\", 40);' '  console.log(\"réponse : \" + reponse.texte);' '}' 'main();' >> cout6.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.

Chiffrer une journée et signaler

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

Les lignes affichées

LigneCe qu’elle montre
1 image : coût 81, alertes []Une entrée sans souci : vue, de courte durée
2 image : coût 181 ...Un visage, sans texte alternatif, gardé 90 jours
4 audio : coût 7 ...Une voix, sans transcription, gardée 31 jours
total 290Les quatre prix additionnés

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.