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

Risque fournisseur et modèle d’une fonction IA

Après cette leçon: Je peux dire à quel point une fonction dépend d’un fournisseur et ce qui n’a aucun repli.

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

Et si le fournisseur change demain

Le risque fournisseur mesure à quel point une fonction dépend d’un fournisseur que vous ne contrôlez pas. Il compte, car un fournisseur peut tomber en panne, augmenter un prix ou retirer un modèle, et votre fonction s’arrête alors ou coûte beaucoup plus.

Vous ne pouvez pas supprimer la dépendance, mais vous pouvez la voir, la noter et prévoir une sortie.

À la fin de cette leçon

Remarque

Je peux dire à quel point une fonction dépend d’un fournisseur et ce qui n’a aucun repli.

Mots clés

MotCe que ça veut dire
Dépendancece sans quoi la fonction ne marche pas
Point de défaillance uniqueune dépendance sans repli
Retraitun fournisseur qui retire un modèle que vous utilisez
Délai de changementles jours pour remplacer une dépendance
Plan de sortieles étapes écrites pour quitter un fournisseur

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

Lister ce dont la fonction dépend

Écrivez chaque dépendance : le modèle, les données qu’il lit, les outils qu’il appelle. Pour chacune, posez trois questions. Existe-t-il un repli ? Combien de temps pour la remplacer ? Que vivent les utilisateurs entre-temps ?

Une dépendance sans repli est un point de défaillance unique. Notez-la, puis travaillez depuis le haut de la liste.

Exemple détaillé : deux dépendances

DépendancePoidsSans repli60 jours pour remplacerNote
Modèle de discussion3double : 6ajoute 17
Recherche de documents2a un repliseulement 10 jours2

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

Prévoir la sortie avant d’en avoir besoin

Un fournisseur peut retirer un modèle, changer son prix ou subir une longue panne. Décidez dès maintenant ce que vous feriez : un second modèle, un cache, une réponse plus simple, ou une pause.

Écrivez le plan de sortie et essayez parfois la seconde voie. Un repli jamais lancé peut ne pas marcher le jour venu. Le module sur le coût, le traçage et la fiabilité montre comment choisir un repli pour chaque échec.

Une erreur courante

Attention

Beaucoup pensent qu’un grand fournisseur ne peut pas tomber, donc qu’aucun plan n’est utile. Les grands fournisseurs aussi ont des pannes, changent leurs prix et retirent des modèles. Jugez chaque dépendance sur ce qui arrive à vos utilisateurs quand elle disparaît, pas sur la taille du fournisseur.

É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 score de dépendance, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' '' '// Une conception inventée : de quoi dépend la fonction, s’il existe un repli, et les jours pour la remplacer.' 'const conception = [' '  { nom: \"Modèle de discussion\", type: \"modele\", repli: false, jours: 60 },' '  { nom: \"Recherche de documents\", type: \"donnees\", repli: true, jours: 10 },' '  { nom: \"API de paiement\", type: \"outil\", repli: false, jours: 20 },' '  { nom: \"Voix vers texte\", type: \"modele\", repli: true, jours: 45 },' '];' 'const POIDS = { modele: 3, donnees: 2, outil: 1 };' > fournisseur.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 score de dépendance, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function note(d) {' '  let s = POIDS[d.type];' '  if (d.repli === false) s = s * 2;' '  if (d.jours > 30) s = s + 1;' '  return s;' '}' >> fournisseur.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 score de dépendance, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  let total = 0;' '  conception.forEach(function (d) {' '    total = total + note(d);' '    console.log(d.nom + \" : \" + note(d) + (d.repli ? \"\" : \" SANS REPLI\"));' '  });' '  console.log(\"Total : \" + total);' '  const q = \"Listez trois courtes questions à poser à un fournisseur avant qu’une fonction dépende de lui.\";' '  const r = await demander([{ role: \"user\", content: q }], \"1. Quel préavis donnez-vous avant un changement de prix ? 2. Combien de temps gardez-vous une ancienne version ? 3. Comment puis-je exporter mes données ?\", 90);' '  console.log(\"Une liste possible : \" + r.texte);' '}' 'main();' >> fournisseur.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 score de dépendance

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

Une sortie possible

LigneCe qu’elle montre
Modèle de discussion : 7 SANS REPLILa note la plus haute et un point de défaillance unique
Recherche de documents : 2Un repli et un court délai de changement
API de paiement : 2 SANS REPLIPas de repli, mais un faible poids
Voix vers texte : 4Un repli, mais plus de 30 jours pour la remplacer
Total : 15La conception dans son ensemble
Une liste 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.

À 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.