watch·ia
AccueilActusTutosGlossaireCette semaineTendancesSources
/
ACTUS
4 sept. — Crusoe lève 3 milliards de dollars pour une valorisation de 30 milliards·3 sept. — Accel en pourparlers pour diriger une levée de 1 milliard chez Thinking Machines·3 sept. — Abliteration.ai propose des modèles IA sans restrictions via une plateforme commerciale·3 sept. — Meta propose des réductions pour partager les données d’usage de Muse Spark·3 sept. — OpenAI présente GPT-6 Astra, son modèle le plus avancé à ce jour·3 sept. — Ollie lance un assistant IA familial conforme SOC 2 pour préserver la confidentialité·3 sept. — Nvidia propose PAIR, un outil gratuit pour agréger des PC locaux en cluster d'inférence IA·3 sept. — Google ajoute des modes vocaux en temps réel pour Gmail, Docs et Keep·3 sept. — Panne simultanée de ChatGPT, Grok et Claude : trois assistants IA majeurs inaccessibles·3 sept. — Google améliore son modèle météo IA WeatherNext 3 avec une résolution cinq fois supérieure·4 sept. — Crusoe lève 3 milliards de dollars pour une valorisation de 30 milliards·3 sept. — Accel en pourparlers pour diriger une levée de 1 milliard chez Thinking Machines·3 sept. — Abliteration.ai propose des modèles IA sans restrictions via une plateforme commerciale·3 sept. — Meta propose des réductions pour partager les données d’usage de Muse Spark·3 sept. — OpenAI présente GPT-6 Astra, son modèle le plus avancé à ce jour·3 sept. — Ollie lance un assistant IA familial conforme SOC 2 pour préserver la confidentialité·3 sept. — Nvidia propose PAIR, un outil gratuit pour agréger des PC locaux en cluster d'inférence IA·3 sept. — Google ajoute des modes vocaux en temps réel pour Gmail, Docs et Keep·3 sept. — Panne simultanée de ChatGPT, Grok et Claude : trois assistants IA majeurs inaccessibles·3 sept. — Google améliore son modèle météo IA WeatherNext 3 avec une résolution cinq fois supérieure·4 sept. — Crusoe lève 3 milliards de dollars pour une valorisation de 30 milliards·3 sept. — Accel en pourparlers pour diriger une levée de 1 milliard chez Thinking Machines·3 sept. — Abliteration.ai propose des modèles IA sans restrictions via une plateforme commerciale·3 sept. — Meta propose des réductions pour partager les données d’usage de Muse Spark·3 sept. — OpenAI présente GPT-6 Astra, son modèle le plus avancé à ce jour·3 sept. — Ollie lance un assistant IA familial conforme SOC 2 pour préserver la confidentialité·3 sept. — Nvidia propose PAIR, un outil gratuit pour agréger des PC locaux en cluster d'inférence IA·3 sept. — Google ajoute des modes vocaux en temps réel pour Gmail, Docs et Keep·3 sept. — Panne simultanée de ChatGPT, Grok et Claude : trois assistants IA majeurs inaccessibles·3 sept. — Google améliore son modèle météo IA WeatherNext 3 avec une résolution cinq fois supérieure·4 sept. — Crusoe lève 3 milliards de dollars pour une valorisation de 30 milliards·3 sept. — Accel en pourparlers pour diriger une levée de 1 milliard chez Thinking Machines·3 sept. — Abliteration.ai propose des modèles IA sans restrictions via une plateforme commerciale·3 sept. — Meta propose des réductions pour partager les données d’usage de Muse Spark·3 sept. — OpenAI présente GPT-6 Astra, son modèle le plus avancé à ce jour·3 sept. — Ollie lance un assistant IA familial conforme SOC 2 pour préserver la confidentialité·3 sept. — Nvidia propose PAIR, un outil gratuit pour agréger des PC locaux en cluster d'inférence IA·3 sept. — Google ajoute des modes vocaux en temps réel pour Gmail, Docs et Keep·3 sept. — Panne simultanée de ChatGPT, Grok et Claude : trois assistants IA majeurs inaccessibles·3 sept. — Google améliore son modèle météo IA WeatherNext 3 avec une résolution cinq fois supérieure·

Observabilité d'un système LLM en production : tracer, mesurer, monitorer

vendredi 10 juillet 202613:384 min de lecture
L'essentiel — 3 points
  • 01Sans mesure, un système LLM en prod est une boîte noire : coût, latence et échecs invisibles
  • 02Logguer par appel : modèle, tokens, coût estimé, durée, succès/échec, tâche
  • 03Le coût se calcule depuis l'usage tokens renvoyé par l'API × le tarif du modèle
AVANCÉ

Un système LLM en production sans instrumentation, c'est une boîte noire : tu ne sais pas ce qu'il te coûte, s'il ralentit, ni quand il commence à échouer. À la fin de ce tuto, tu auras une couche d'observabilité simple qui trace chaque appel — coût, latence, tokens, statut — et te permet de repérer une dérive. Exemple en TypeScript + SQLite, adaptable à n'importe quel stockage.

Étape 1 — Décider quoi mesurer

Pour chaque appel LLM, on veut au minimum :

  • Modèle et tâche (pour ventiler les coûts).
  • Tokens entrée / sortie (source du coût).
  • Coût estimé en euros.
  • Latence en millisecondes.
  • Statut : succès, ou type d'erreur.

Étape 2 — Une table de traces

CREATE TABLE IF NOT EXISTS llm_traces (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  ts TEXT NOT NULL,
  task TEXT NOT NULL,
  model TEXT NOT NULL,
  tokens_in INTEGER,
  tokens_out INTEGER,
  cost_eur REAL,
  latency_ms INTEGER,
  status TEXT NOT NULL   -- 'ok' | 'error:rate_limit' | 'error:parse' ...
);

Étape 3 — Envelopper l'appel

Enveloppe ton callLLM centralisé (voir le tuto sur le routage LLM) dans une fonction qui mesure et enregistre :

// Tarifs indicatifs en € par million de tokens — à mettre à jour selon ton fournisseur.
const PRIX: Record<string, { in: number; out: number }> = {
  "mistral-small-latest": { in: 0.2, out: 0.6 },
  "claude-haiku-4-5-20251001": { in: 0.9, out: 4.5 },
};

function coutEur(model: string, tin: number, tout: number): number {
  const p = PRIX[model] ?? { in: 0, out: 0 };
  return (tin * p.in + tout * p.out) / 1_000_000;
}

async function traced(task: string, model: string, run: () => Promise<any>) {
  const t0 = Date.now();
  try {
    const res = await run();
    const u = res.usage ?? {}; // l'API renvoie prompt_tokens / completion_tokens
    db.prepare(
      `INSERT INTO llm_traces (ts, task, model, tokens_in, tokens_out, cost_eur, latency_ms, status)
       VALUES (?, ?, ?, ?, ?, ?, ?, 'ok')`
    ).run(
      new Date().toISOString(), task, model,
      u.prompt_tokens ?? null, u.completion_tokens ?? null,
      coutEur(model, u.prompt_tokens ?? 0, u.completion_tokens ?? 0),
      Date.now() - t0
    );
    return res;
  } catch (err: any) {
    db.prepare(
      `INSERT INTO llm_traces (ts, task, model, latency_ms, status)
       VALUES (?, ?, ?, ?, ?)`
    ).run(new Date().toISOString(), task, model, Date.now() - t0, `error:${err.code ?? "unknown"}`);
    throw err;
  }
}

Le coût vient de l'usage réel renvoyé par l'API, pas d'une estimation à la louche.

Étape 4 — Lire les tendances

Quelques requêtes te donnent l'essentiel :

-- Coût par jour et par tâche
SELECT substr(ts,1,10) AS jour, task, ROUND(SUM(cost_eur),3) AS eur
FROM llm_traces GROUP BY jour, task ORDER BY jour DESC;

-- Latence médiane approx. et taux d'échec sur 24h
SELECT model,
       AVG(latency_ms) AS latence_moy,
       AVG(CASE WHEN status = 'ok' THEN 0 ELSE 1 END) AS taux_echec
FROM llm_traces WHERE ts >= datetime('now','-1 day') GROUP BY model;

Un pic de taux_echec ou de latence te prévient d'une régression avant les plaintes utilisateurs.

Adapter à ton cas

  • Alerting : un cron qui lit ces requêtes et t'envoie un mail si le coût du jour ou le taux d'échec dépasse un seuil.
  • Dashboard : branche ces requêtes sur une page admin avec un graphe par jour.
  • Traçage fin : ajoute un trace_id pour relier plusieurs appels d'une même requête utilisateur (utile pour les agents multi-étapes).
  • Outil dédié : pour un gros volume, des plateformes spécialisées (type LangSmith/Langfuse) font ça clé en main — mais la table maison suffit longtemps.

En cas de souci

  • usage absent : en streaming, certains fournisseurs ne renvoient l'usage qu'à la fin (dernier événement) — récupère-le là, ou estime à partir de la longueur.
  • Coût faux : tes tarifs PRIX sont périmés. Centralise-les et tiens-les à jour ; c'est la seule partie qui bouge.
  • La table grossit : ajoute une purge (garde 90 jours) comme pour n'importe quel log.
  • Le logging ralentit les appels : écris la trace de façon non bloquante si besoin, mais un INSERT SQLite local est négligeable devant la latence réseau d'un LLM.
Réagir :
Partager —XLinkedIn