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
| Mot | Ce que ça veut dire |
|---|---|
| Dépendance | ce sans quoi la fonction ne marche pas |
| Point de défaillance unique | une dépendance sans repli |
| Retrait | un fournisseur qui retire un modèle que vous utilisez |
| Délai de changement | les jours pour remplacer une dépendance |
| Plan de sortie | les é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épendance | Poids | Sans repli | 60 jours pour remplacer | Note |
|---|---|---|---|---|
| Modèle de discussion | 3 | double : 6 | ajoute 1 | 7 |
| Recherche de documents | 2 | a un repli | seulement 10 jours | 2 |
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
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 le score de dépendance, partie 1
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
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
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
docker exec -w /home/node/project agent node fournisseur.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 |
|---|---|
| Modèle de discussion : 7 SANS REPLI | La note la plus haute et un point de défaillance unique |
| Recherche de documents : 2 | Un repli et un court délai de changement |
| API de paiement : 2 SANS REPLI | Pas de repli, mais un faible poids |
| Voix vers texte : 4 | Un repli, mais plus de 30 jours pour la remplacer |
| Total : 15 | La 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.