\n\n\n\n Observabilité pour les applications LLM : Une étude de cas pratique - AgntLog \n

Observabilité pour les applications LLM : Une étude de cas pratique

📖 14 min read2,654 wordsUpdated Mar 26, 2026

L’essor des applications LLM et le besoin d’observabilité

Le domaine du développement de logiciels a été profondément transformé par la révolution des modèles de langage de grande taille (LLM). Des chatbots sophistiqués et des générateurs de contenu intelligents aux assistants de code et aux outils d’analyse de données, les LLM sont intégrés dans un éventail d’applications en constante expansion. Cette adoption rapide, bien qu’excitante, introduit une nouvelle classe de défis, notamment en ce qui concerne la compréhension et la maintenance de ces systèmes en production. Les outils de surveillance traditionnels, conçus pour des logiciels déterministes et basés sur des règles, atteignent souvent leurs limites en matière de capture des nuances du comportement des LLM.

Entrons dans le vif du sujet : l’observabilité. L’observabilité, dans le contexte des applications LLM, est la capacité de comprendre l’état interne d’un système alimenté par un LLM à partir de ses sorties externes. Elle va au-delà de simples vérifications de santé pour fournir des informations approfondies sur la façon dont le LLM interprète les requêtes, génère des réponses, gère le contexte et interagit avec des outils ou sources de données externes. Sans une observabilité solide, le débogage des problèmes de performance, l’assurance d’équité, l’identification des hallucinations ou l’optimisation des coûts peuvent devenir des tâches décourageantes, voire presque impossibles. Cet article présente une étude de cas pratique sur la mise en œuvre de l’observabilité pour une application LLM, démontrant les principes et outils clés.

Étude de cas : ‘DocuChat’ – Un assistant interne de base de connaissances

Considérons une application hypothétique appelée ‘DocuChat’. DocuChat est un assistant interne de base de connaissances conçu pour aider les employés à trouver rapidement des réponses au sein d’une vaste collection de documents internes (pages Confluence, archives Slack, wikis internes, etc.). Il utilise une architecture de génération augmentée par récupération (RAG) :

  1. Requête de l’utilisateur : Un employé pose une question (par ex., “Comment demander un nouvel ordinateur portable ?”).
  2. Récupération : Le système recherche dans une base de données vectorielle (peuplée d’embeddings de documents internes) pour trouver des morceaux de documents pertinents.
  3. Augmentation : Ces morceaux récupérés, ainsi que la requête utilisateur originale, sont fournis comme contexte à un LLM.
  4. Génération : Le LLM synthétise une réponse sur la base du contexte fourni et de la requête de l’utilisateur.

DocuChat utilise le GPT-4 d’OpenAI pour la génération et un modèle d’embedding auto-hébergé pour la récupération. Il est construit en utilisant Python, LangChain et une base de données vectorielle comme Pinecone ou Weaviate. Au départ, l’équipe de développement s’est concentrée sur la fonctionnalité, mais à mesure que l’application a gagné des utilisateurs, un certain nombre de questions opérationnelles sont apparues :

  • Pourquoi certaines réponses sont-elles lentes ?
  • Le LLM hallucine-t-il, ou la récupération échoue-t-elle ?
  • Les utilisateurs sont-ils satisfaits des réponses ?
  • Combien cela nous coûte-t-il par requête ?
  • Atteignons-nous les limites de taux d’API ?
  • Quels types de questions les utilisateurs posent-ils le plus souvent ?

Ces questions soulignent le besoin critique d’observabilité.

Piliers de l’observabilité LLM pour DocuChat

Pour DocuChat, nous allons nous concentrer sur les trois piliers traditionnels de l’observabilité, adaptés aux applications LLM :

  1. Journaux : Enregistrements structurés des événements.
  2. Métriques : Mesures numériques agrégées au fil du temps.
  3. Trace : Vues de bout en bout des requêtes à travers des systèmes distribués.

De plus, nous considérerons un quatrième pilier crucial pour les LLM : Retour d’expérience / Évaluation humaine.

1. Journaux : Le ‘Que s’est-il passé’

Les journaux d’application traditionnels sont indispensables, mais pour les applications LLM, ils doivent capturer des détails spécifiques centrés sur le LLM. Pour DocuChat, nous avons instrumenté diverses étapes du pipeline RAG pour émettre des journaux structurés.

Exemple de structure de journal (JSON) :

{
 "timestamp": "2023-10-27T10:30:00Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "user_query",
 "session_id": "abcd-1234-efgh",
 "user_id": "user_123",
 "query": "Comment demander un nouvel ordinateur portable ?",
 "metadata": {
 "user_agent": "Mozilla/5.0...",
 "ip_address": "192.168.1.10"
 }
},
{
 "timestamp": "2023-10-27T10:30:01Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "retrieval_start",
 "session_id": "abcd-1234-efgh",
 "query": "Comment demander un nouvel ordinateur portable ?",
 "vector_db_query": "politique de demande d'ordinateur portable",
 "k_value": 5
},
{
 "timestamp": "2023-10-27T10:30:02Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "retrieval_complete",
 "session_id": "abcd-1234-efgh",
 "retrieved_docs_count": 3,
 "retrieved_docs": [
 {"id": "doc-456", "source": "confluence/politique-d-ordinateur-portable", "score": 0.89},
 {"id": "doc-789", "source": "slack/annonces-it", "score": 0.81}
 ],
 "retrieval_duration_ms": 1000
},
{
 "timestamp": "2023-10-27T10:30:03Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "llm_generation_start",
 "session_id": "abcd-1234-efgh",
 "model_name": "gpt-4",
 "temperature": 0.7,
 "prompt_tokens": 500,
 "system_prompt_hash": "abc123def456" 
},
{
 "timestamp": "2023-10-27T10:30:08Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "llm_generation_complete",
 "session_id": "abcd-1234-efgh",
 "response": "Pour demander un nouvel ordinateur portable, veuillez visiter le portail IT...",
 "completion_tokens": 150,
 "total_tokens": 650,
 "llm_duration_ms": 5000,
 "finish_reason": "stop"
},
{
 "timestamp": "2023-10-27T10:30:09Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "response_sent",
 "session_id": "abcd-1234-efgh",
 "total_request_duration_ms": 9000
}

En centralisant ces journaux (par exemple, en utilisant ELK Stack, Splunk, Datadog), l’équipe peut :

  • Filtrer par session_id pour reconstruire une interaction entière.
  • Identifier des appels lents de récupération ou de LLM.
  • Analyser les requêtes courantes et leurs résultats.
  • Déboguer des problèmes en examinant l’exacte requête fournie au LLM et les documents récupérés.

2. Métriques : Le ‘Combien’ et le ‘À quelle vitesse’

Les métriques fournissent des informations agrégées et quantifiables sur la performance et l’utilisation du système. Pour DocuChat, nous suivons les métriques clés à l’aide de Prometheus et les visualisons avec Grafana.

Métriques clés spécifiques aux LLM :

  • Latence :
    • docuchat_total_request_duration_seconds_sum/_count (temps de réponse global du système)
    • docuchat_retrieval_duration_seconds_sum/_count
    • docuchat_llm_api_duration_seconds_sum/_count
  • Utilisation de tokens & Coût :
    • docuchat_llm_prompt_tokens_total (compteur)
    • docuchat_llm_completion_tokens_total (compteur)
    • docuchat_llm_total_tokens_cost_usd_total (calculé en fonction des prix des modèles)
  • Santé de l’API :
    • docuchat_llm_api_calls_total (compteur, étiqueté par model_name, status_code)
    • docuchat_vector_db_queries_total (compteur, étiqueté par status_code)
    • docuchat_llm_api_rate_limit_errors_total (compteur)
  • Performance de récupération :
    • docuchat_retrieved_documents_count_sum/_count (documents moyens récupérés par requête)
    • docuchat_retrieved_documents_avg_score (gauge/summary)
  • Engagement des utilisateurs :
    • docuchat_successful_responses_total (compteur)
    • docuchat_failed_responses_total (compteur)

Ces métriques permettent à l’équipe de :

  • Configurer des alertes pour une latence élevée ou une augmentation des taux d’erreur.
  • Surveiller en temps réel le coût financier de l’utilisation des LLM.
  • Identifier les goulets d’étranglement dans le pipeline RAG (par exemple, récupération lente contre LLM lent).
  • Comprendre la distribution des scores des documents récupérés, ce qui indique l’efficacité de la récupération.

3. Traces : Le ‘Chemin pris’

Les traces fournissent une vue holistique du parcours d’une seule requête à travers un système distribué. Pour DocuChat, OpenTelemetry est utilisé pour instrumenter le pipeline LangChain et tout appel d’API externe. Chaque étape du processus RAG devient un span dans une trace.

Exemple de flux de trace pour DocuChat :

  1. Span : Requête utilisateur (Span racine)
    • Attributs : user_id, query, session_id
  2. Span : Récupération
    • Attributs : vector_db_query, k_value, retrieval_engine
    • Child Span : Requête de la base de données vectorielle
      • Attributs : query_vector_size, response_time_ms
    • Child Span : Prétraitement des documents (le cas échéant)
      • Attributs : num_docs_processed
    • Événements : “3 documents récupérés”, “Aucun document pertinent trouvé”
  3. Span : Génération LLM
    • Attributs : model_name, temperature, prompt_tokens, completion_tokens
    • Child Span : Appel API OpenAI
      • Attributs : api_endpoint, status_code, request_id
    • Événements : “LLM a commencé la génération”, “LLM a terminé la génération”, “Hallucination détectée par le LLM (confiance faible)”
  4. Span : Post-traitement & Réponse
    • Attributs : response_length_chars, sentiment_score

En utilisant un backend de traçage (comme Jaeger, Honeycomb, Datadog APM), l’équipe peut :

  • Inspectez visuellement la séquence exacte des opérations pour toute requête donnée.
  • Identifiez quelle étape du pipeline RAG consomme le plus de temps.
  • Comprenez le contexte transmis au LLM (documents récupérés) pour une trace spécifique.
  • Identifiez les erreurs ou comportements inattendus dans des intervalles spécifiques.

4. Retour Humain & Évaluation : Le ‘Niveau de Qualité’

Les LLM, par leur nature, sont probabilistes. Bien que les journaux, les métriques et les traces nous parlent des mécanismes du système, ils ne nous informent pas toujours sur la qualité de la sortie du LLM. C’est là que le retour humain et les métriques d’évaluation automatisées deviennent cruciaux.

Pour DocuChat, nous avons mis en œuvre :

  1. Boutons de Vote Positif/Négatif : Mécanisme de feedback simple sur chaque réponse. Les votes négatifs déclenchent une alerte pour une révision manuelle si un certain seuil est atteint.
  2. Fonction « Signaler un Problème » : Permet aux utilisateurs de fournir un retour de texte libre sur les hallucinations, réponses incorrectes ou informations non pertinentes.
  3. Évaluation du Jeu de Données d’Or : Un ensemble de questions connues avec des réponses vérifiées par des experts. Exécutez régulièrement DocuChat contre ce jeu de données et évaluez les réponses à l’aide de métriques telles que :
    • RAGAS : Un cadre spécifiquement pour l’évaluation RAG, mesurant des aspects tels que la fidélité, la pertinence des réponses, la précision du contexte et le rappel du contexte.
    • Similarité Sémantique : Utilisation de modèles d’embedding pour comparer la réponse générée avec la réponse d’or.
    • Chevauchement de Mots-Clés : Vérifications simples de la présence de termes clés.
  4. LLM-en-Juge : Dans certains cas, un LLM plus puissant (par exemple, GPT-4) peut être utilisé pour évaluer la sortie d’un LLM moins puissant (par exemple, GPT-3.5) par rapport à une référence ou pour des critères spécifiques (par exemple, concision, ton).

L’intégration de ce retour permet à l’équipe de :

  • Mesurer directement la satisfaction des utilisateurs et identifier les domaines problématiques.
  • Améliorer itérativement le pipeline RAG (par exemple, affiner la stratégie de découpage, améliorer le modèle d’embedding, ajuster l’ingénierie des prompts).
  • Suivre la performance des différentes versions de LLM ou des algorithmes de récupération au fil du temps.

Mise en Œuvre Pratique et Outils

La pile d’observabilité pour DocuChat utilise une combinaison d’outils open-source et commerciaux :

  • Logging : Le module logging de Python, configuré pour produire des JSON, expédié à Loki (système d’agrégation de journaux de Grafana Labs).
  • Métriques : Prometheus pour la collecte de données en séries temporelles, exposé via un point de terminaison FastAPI personnalisé avec prometheus_client. Grafana pour les tableaux de bord et les alertes.
  • Tracing : OpenTelemetry SDK Python pour instrumentation, envoyant des traces à Jaeger. LangChain offre des callbacks intégrés qui peuvent être adaptés pour OpenTelemetry.
  • Plateformes Spécifiques au LLM : Des outils comme LangSmith (pour le tracing et l’évaluation LangChain), Weights & Biases (pour le suivi des expériences et l’évaluation des modèles), ou Arize AI (pour l’observabilité et la surveillance des LLM) peuvent considérablement simplifier le processus, notamment pour des cas d’utilisation avancés et de grandes équipes. Pour cette étude de cas, nous avons opté pour une approche plus DIY en utilisant des composants open-source pour illustrer les fondamentaux.
  • Retour Humain : Éléments UI personnalisés intégrés avec un service de feedback dédié qui enregistre dans Loki et met à jour un compteur de métriques.

Avantages et Résultats pour DocuChat

La mise en œuvre de cette stratégie d’observabilité approfondie a produit des bénéfices significatifs pour l’équipe de DocuChat :

  • Débogage Plus Rapide : Lorsque qu’un utilisateur a signalé une réponse incorrecte, les ingénieurs pouvaient rapidement tracer la requête, examiner les documents récupérés, le prompt exact, et la réponse du LLM, identifiant souvent des problèmes en quelques minutes.
  • Optimisation des Coûts : En surveillant l’utilisation des tokens, l’équipe a identifié des opportunités de réduction de la taille des prompts et d’expérimentation avec des modèles LLM moins coûteux pour des cas d’utilisation spécifiques, menant à une réduction de 15 % des coûts d’API.
  • Performance Améliorée : Les métriques ont révélé que la base de données vectorielle était parfois lente. Cela a conduit à optimiser la stratégie d’indexation vectorielle et à faire évoluer la base de données, résultant en une amélioration de 20 % du temps de réponse moyen.
  • Fiabilité Améliorée : Les alertes pour les erreurs d’API LLM ou les taux élevés d’hallucination ont permis une intervention proactive, prévenant une insatisfaction généralisée des utilisateurs.
  • Itération Basée sur les Données : Les retours humains et les métriques d’évaluation ont fourni des preuves concrètes des changements les plus efficaces à apporter au pipeline RAG ou à l’ingénierie des prompts, favorisant une amélioration continue.
  • Transparence : Les parties prenantes ont obtenu une meilleure compréhension de la performance du système et de la valeur qu’il apportait.

Défis et Travail Futur

Bien que réussie, la mise en œuvre n’a pas été sans défis :

  • Volume de Données : Les interactions avec les LLM peuvent générer beaucoup de données (prompts, réponses, contexte). Gérer et stocker ces données de manière efficace est crucial.
  • Compréhension Contextuelle : Interpréter les sorties des LLM nécessite encore souvent un jugement humain. L’évaluation automatisée s’améliore mais n’est pas parfaite.
  • Modifications de l’Ingénierie des Prompts : Des modifications fréquentes des prompts nécessitent une gestion rigoureuse des versions et garantissent que les métriques d’évaluation restent pertinentes.
  • Détection des Hallucinations : Bien que certaines métriques (comme la fidélité RAGAS) aident, une détection solide et en temps réel des hallucinations reste un domaine de recherche actif.

Le travail futur pour DocuChat comprend :

  • Intégration de la détection avancée des anomalies pour les sorties LLM.
  • Développement de cadres de tests A/B plus sophistiqués pour différentes configurations RAG.
  • Exploration de la détection proactive des prompts adversariaux ou des tentatives d’injection de prompts.
  • Utilisation de modèles plus petits et ajustés pour des tâches spécifiques afin d’optimiser encore davantage les coûts et la latence.

Conclusion

L’observabilité n’est pas seulement un atout souhaitable mais un besoin fondamental pour construire des applications LLM fiables, performantes et rentables. Comme le démontre l’étude de cas de DocuChat, une stratégie approfondie incorporant des journaux structurés, des métriques détaillées, des traces de bout en bout et un retour humain crucial fournit les informations nécessaires pour naviguer dans les complexités uniques des systèmes alimentés par les LLM. En investissant dans l’observabilité dès le départ, les équipes de développement peuvent gagner en confiance dans leurs applications LLM, résoudre rapidement les problèmes, optimiser les performances et, en fin de compte, offrir une expérience utilisateur supérieure.

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

Learn more →
Browse Topics: Alerting | Analytics | Debugging | Logging | Observability

Recommended Resources

AgntapiClawgoAi7botAgent101
Scroll to Top