Une personne ou un programme ?
La transparence de l’IA consiste à dire aux gens qu’ils ont affaire à un système d’IA, et à montrer ce qu’il a produit. Elle compte, car on ne fait pas la même confiance à une réponse écrite par un programme.
La tenue des registres en est l’autre moitié. Quand un incident arrive, une revue doit savoir ce qui a été demandé, quel modèle a répondu et qui a validé.
À la fin de cette leçon
Remarque
Je peux signaler l’IA, étiqueter ce qu’elle produit et tenir les enregistrements qu’une revue demande.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Mention | dire à une personne qu’elle a affaire à une IA | |
| Étiquette | une marque visible indiquant que l’IA l’a produit | |
| Enregistrement | la note gardée d’une réponse de l’IA | |
| Version du modèle | le modèle exact qui a répondu | v3 |
| Conservation | la durée pendant laquelle on garde un enregistrement | |
| Fiche système | une page courte qui décrit une fonction IA |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Dire aux gens qu’ils parlent à une IA
Dites-le avant que la personne ne s’appuie sur la réponse, là où elle le verra. Placez la mention au début d’une discussion, à côté d’une réponse ou dans les premiers mots d’un appel.
Ajoutez en une ligne ce qu’elle sait faire ou non, et comment joindre une personne. Fixer les attentes en détail est l’objet de la leçon Fixer les attentes pour une fonction d’IA.
Étiqueter ce que l’IA a produit
Un texte, une image ou un résumé produit par un modèle porte une courte étiquette visible. L’étiquette dit qui l’a produit, pas si c’est bon.
Quand un fichier sort de votre produit, ajoutez aussi une note dans ses propriétés. L’étiquette reste ainsi présente quand quelqu’un copie le fichier.
Exemple détaillé : où le dire
| Endroit | Ce que la personne voit |
|---|---|
| Début d’une discussion | Vous discutez avec un assistant d’IA. Une personne peut prendre le relais. |
| Sous une image | Créée avec l’IA |
| Bas d’un brouillon de courriel | Rédigé par l’IA, relu par Louis Martin |
| Premiers mots d’un appel | Vous parlez à un assistant automatique. |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Ce que doit contenir un enregistrement
Un enregistrement garde la question posée, la version du modèle qui a répondu et la personne qui a validé une action. Sans la version, personne ne peut dire quel modèle s’est trompé.
Gardez un enregistrement aussi longtemps qu’une revue en a besoin, sans les données personnelles inutiles. Voir aussi Journaliser sobrement une application d’IA, et le module Vie privée et protection des données.
Une erreur courante
Attention
Beaucoup pensent que plus d’enregistrements, c’est toujours plus sûr, et gardent tout pour toujours. Un enregistrement plein de données personnelles, gardé des années, est un risque en soi. Gardez seulement les champs utiles à une revue, le temps qu’elle en a besoin.
Une courte fiche système décrit la fonction
Une fiche système, ou fiche de modèle, est une page courte sur une fonction IA ou un modèle. Elle donne son objectif, ses limites, la façon dont elle a été évaluée, son responsable et un contact.
Écrivez-la pour quelqu’un qui n’a jamais vu la fonction. Un champ vide est un manque, comme un manque dans une revue.
Les règles le demandent de plus en plus
Dans l’UE et au Royaume-Uni, les règles en demandent de plus en plus aux concepteurs. Elles visent la mention de l’IA, l’étiquetage de ce qu’elle produit et la tenue d’enregistrements. Ce qu’une règle demande, et depuis quand, varie selon le lieu et évolue.
Ceci est une information générale, pas un conseil juridique : consultez le texte officiel en vigueur ou une personne qualifiée. Faire ces choses ne suffit pas, à soi seul, à rendre un produit conforme à une règle.
Exemple détaillé : une courte fiche système
| Champ | Assistant commandes |
|---|---|
| Objectif | Répond aux questions sur les commandes |
| Limites | Ne peut changer ni paiement ni adresse |
| Évaluations | 40 cas enregistrés, 37 réussis |
| Responsable | Camille Roux |
| Contact | [email protected] |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Écrire l’assistant 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\";' '// 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
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 la vérification des enregistrements, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' '' 'const GARDER_JOURS = 90; // au-delà, un enregistrement est effacé' '// Enregistrements inventés d’un assistant client. L’âge est un nombre de jours, pas une horloge.' 'const enregistrements = [' ' { id: 1, question: \"Où est ma commande ?\", version: \"v3\", action: false, validePar: \"\", age: 12, personnel: false },' ' { id: 2, question: \"Remboursez la commande 88\", version: \"v3\", action: true, validePar: \"\", age: 30, personnel: false },' ' { id: 3, question: \"Changez mon adresse\", version: \"\", action: true, validePar: \"Louis Martin\", age: 120, personnel: false },' ' { id: 4, question: \"Pourquoi deux prélèvements ?\", version: \"v2\", action: false, validePar: \"\", age: 5, personnel: true },' '];' > registre.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 des enregistrements, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function problemes(e) {' ' const trouves = [];' ' if (e.question.trim() === \"\") trouves.push(\"pas de question\");' ' if (e.version.trim() === \"\") trouves.push(\"pas de version du modèle\");' ' if (e.action && e.validePar.trim() === \"\") trouves.push(\"pas de validateur\");' ' if (e.age > GARDER_JOURS) trouves.push(\"durée de conservation dépassée\");' ' if (e.personnel) trouves.push(\"données personnelles inutiles\");' ' return trouves;' '}' >> registre.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 des enregistrements, partie 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Une courte fiche pour la fonction. Chaque champ doit contenir des mots.' 'const fiche = { objectif: \"Répondre sur les commandes\", limites: \"Ne touche pas aux paiements\", evaluations: \"\", responsable: \"Camille Roux\", contact: \"[email protected]\" };' >> registre.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 des enregistrements, partie 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' enregistrements.forEach(function (e) {' ' const p = problemes(e);' ' console.log(\"Enregistrement \" + e.id + \" : \" + (p.length === 0 ? \"ok\" : p.join(\", \")));' ' });' ' const vides = Object.keys(fiche).filter(function (k) { return fiche[k].trim() === \"\"; });' ' console.log(\"Champs vides de la fiche : \" + (vides.length === 0 ? \"aucun\" : vides.join(\", \")));' ' const q = \"Écrivez une phrase courte qu’une fenêtre de discussion affiche pour dire qu’on parle à un système d’IA.\";' ' const r = await demander([{ role: \"user\", content: q }], \"Vous discutez avec un assistant d’IA. Il peut se tromper, et une personne peut prendre le relais.\", 60);' ' console.log(\"Un avis possible : \" + r.texte);' '}' 'main();' >> registre.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 la vérification des enregistrements
docker exec -w /home/node/project agent node registre.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.
Une sortie possible
| Ligne | Ce qu’elle montre |
|---|---|
| Enregistrement 1 : ok | Rien ne manque |
| Enregistrement 2 : pas de validateur | Un remboursement sans personne nommée |
| Enregistrement 3 : pas de version du modèle, durée de conservation dépassée | On ignore quel modèle a répondu, et il est trop ancien |
| Enregistrement 4 : données personnelles inutiles | Il garde plus que ce qu’une revue demande |
| Champs vides de la fiche : evaluations | La fiche ne dit rien des tests |
| Un avis possible : ... | Votre propre appel. Il change à chaque exécution, ou affiche Échantillon enregistré |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.