Avancé
🧠 Fondamentaux
30 XP
0 personnes ont réussi
Observabilite : tracer les appels LLM
En production, tu as besoin de savoir exactement ce qui se passe a chaque appel LLM. Combien de temps ca prend ? Combien de tokens consommes ? Quel modele a repondu ? Est-ce que ca a echoue ? Sans observabilite, tu navigues a l'aveugle et tu decouvres les problemes quand les utilisateurs se plaignent (ou quand la facture arrive).
Les outils comme LangSmith, Helicone ou Weights & Biases font exactement ca : ils interceptent chaque appel, enregistrent les metriques, et te donnent un tableau de bord.
Tu vas creer une classe LLMTracer qui intercepte les appels a une fonction LLM simulee et enregistre toutes les metriques.
__init__(self, cout_par_token=0.00001) : initialise la liste de traces et le cout par token.
tracer(self, fonction_llm, question, modele="gpt-4") : appelle la fonction, mesure la duree (simule avec un compteur), compte les tokens (approximation : nombre de mots dans la question + nombre de mots dans la reponse), calcule le cout, et enregistre une trace. La fonction renvoie un dictionnaire avec "reponse", "modele", "tokens", "cout", "succes". Si la fonction leve une exception, la trace enregistre l'erreur et "succes" est False.
Pour simuler les tokens, on comptera simplement le nombre de mots (split par espaces) dans la question et la reponse.
resume(self) : renvoie un dictionnaire avec "total_appels", "appels_reussis", "appels_echoues", "total_tokens", "cout_total" (arrondi a 6 decimales), "traces" (la liste de toutes les traces).
Exemple :
t = LLMTracer(cout_par_token=0.001) def fake_llm(q): return "Voici la reponse" r = t.tracer(fake_llm, "Bonjour comment ca va") r["reponse"] contient "Voici la reponse" r["tokens"] vaut 7 (4 mots question + 3 mots reponse)
t = LLMTracer()
def llm(q): raise Exception('Timeout')
r = t.tracer(llm, 'Test question')
assert r['succes'] == False
assert 'erreur' in r
assert r['reponse'] is None
Tokens calcules correctement
t = LLMTracer(cout_par_token=0.01)
def llm(q): return 'un deux trois'
r = t.tracer(llm, 'a b')
assert r['tokens'] == 5
assert r['cout'] == 0.05