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

Budgets de latence et diffusion en continu

Après cette leçon: Je peux fixer un budget de latence et dire ce que change la diffusion en continu.

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

Ce qu’est un budget de latence

La latence est le temps qu’un utilisateur attend une réponse. Un budget de latence est le maximum que vous autorisez, réparti entre les étapes d’une requête.

Le module sur le coût, le traçage et la fiabilité montre les percentiles et un délai maximal. Cette leçon va plus loin : un budget pour toute la requête, et ce que la diffusion en continu change ou non.

À la fin de cette leçon

Remarque

Je peux fixer un budget de latence et dire ce que change la diffusion en continu.

Mots clés

MotCe que ça veut direExemple
Latencele temps qu’un utilisateur attend
Délai avant le premier jetonl’attente avant l’apparition des premiers mots600 ms
Temps totall’attente jusqu’au dernier mot
Diffusion en continuenvoyer les mots au fur et à mesure, pas tous à la fin
Budgetle temps maximal autorisé, réparti entre les étapes
Millisecondeun millième de seconde

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

Deux durées : premiers mots et dernier mot

Une réponse met un certain temps avant le premier mot, puis un peu plus pour chaque mot suivant. La première durée est le délai avant le premier jeton. La dernière est le temps total.

Le temps total est le délai avant le premier jeton, plus le temps par jeton fois le nombre de jetons.

Exemple détaillé : deux réponses

RéponseAvant le premier jetonPar jetonJetonsTotal
Courte60020301200
Longue600203006600

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

Une erreur courante

Attention

Beaucoup pensent que la diffusion rend une réponse plus rapide. Ce n’est pas vrai. Le dernier mot arrive exactement au même moment. Ce qui change, c’est le moment où l’utilisateur voit les premiers mots : l’attente paraît plus courte.

Où se sent l’attente

Sans diffusion, l’utilisateur ne voit rien avant le temps total. Avec la diffusion, il voit des mots après le délai avant le premier jeton et peut commencer à lire.

Pour une réponse longue, l’écart est grand. Dans l’exemple, l’attente des premiers mots passe de 6600 à 600 millisecondes : 6000 de gagnées.

Ce que la diffusion vous coûte

Important

Les mots sont montrés avant que la réponse entière soit contrôlée. Un contrôle qui demande le texte complet, comme un contrôle de sûreté, ne peut pas passer d’abord. Décidez comment le traiter avant d’activer la diffusion.

Répartir le budget entre les étapes

Une requête a plus d’étapes que le modèle. Elle attend dans une file, va chercher des documents et fait contrôler la réponse. Additionnez les durées dans l’ordre.

La première étape où le total courant dépasse le budget est celle à corriger d’abord, ou à supprimer.

Exemple détaillé : un budget de 1000

ÉtapeDuréeTotal courantAu-dessus de 1000 ?
File150150Non
Recherche400550Non
Premier jeton du modèle6001150Oui, la première
Contrôle de sûreté2001350Oui, 350 de trop

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

É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 latence, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'function total(r) { return r.delai + r.parJeton * r.jetons; }' 'function premier(r) { return r.diffuse ? r.delai : total(r); }' 'const reponses = [' '  { nom: \"courte\", delai: 600, parJeton: 20, jetons: 30, diffuse: false },' '  { nom: \"longue\", delai: 600, parJeton: 20, jetons: 300, diffuse: false },' '  { nom: \"longue-diffusee\", delai: 600, parJeton: 20, jetons: 300, diffuse: true },' '];' > latence.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 latence, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const parties = [[\"file\", 150], [\"recherche\", 400], [\"premier jeton du modèle\", 600], [\"contrôle de sûreté\", 200]];' 'function budget(limite) {' '  let somme = 0;' '  let depasse = \"aucune\";' '  for (const p of parties) {' '    somme = somme + p[1];' '    if (somme > limite && depasse === \"aucune\") depasse = p[0];' '  }' '  return \"total \" + somme + \", reste \" + (limite - somme) + \", première qui dépasse : \" + depasse;' '}' >> latence.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 latence, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  for (const r of reponses) console.log(r.nom + \" : premier \" + premier(r) + \", total \" + total(r));' '  console.log(\"budget 1000 : \" + budget(1000));' '  console.log(\"budget 2000 : \" + budget(2000));' '  const debut = Date.now();' '  const reponse = await demander([{ role: \"user\", content: \"En une phrase courte, pourquoi les utilisateurs aiment-ils voir les mots apparaître tôt ?\" }], \"Ils peuvent commencer à lire tout de suite, donc l’attente paraît plus courte.\", 60);' '  console.log(\"le modèle dit : \" + reponse.texte);' '  console.log(\"attente mesurée pour la réponse entière : \" + (reponse.enregistre ? \"non mesurée\" : Date.now() - debut + \" ms\"));' '}' 'main();' >> latence.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 les calculs de latence

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

Ce que le Run affiche

LigneCe qu’elle montre
courte : premier 1200, total 1200Sans diffusion : le premier texte est le total
longue-diffusee : premier 600, total 6600Avec diffusion : premiers mots tôt, même total
budget 1000 : total 1350, reste -350, première qui dépasse : premier jeton du modèleL’étape à corriger
le modèle dit : ...Une phrase du labo. Un échantillon enregistré si aucun modèle ne répond
attente mesurée pour la réponse entière : ...Une vraie durée en ms, ou non mesurée pour un é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.