Archives du blog

Langfuse : Comment Surveiller vos Agents IA en Production (Coûts, Latence, Qualité)

Introduction : Pourquoi la Surveillance des Agents IA est Devenue Critique

Le déploiement d'agents IA en production connaît une croissance exponentielle depuis 2024. Entre les systèmes RAG, les agents conversationnels et les workflows autonomes, les entreprises font face à un défi majeur : comment surveiller efficacement ces systèmes complexes qui prennent des décisions de manière autonome ?

Contrairement aux applications logicielles traditionnelles, les agents IA introduisent une dimension de non-déterminisme qui rend le débogage et l'optimisation particulièrement ardues. Un agent peut fonctionner parfaitement pendant des semaines, puis soudainement produire des réponses incohérentes à cause d'un changement subtil dans les données d'entrée ou dans le comportement du modèle sous-jacent.

C'est précisément ce problème que résout Langfuse, une plateforme d'observabilité open-source conçue spécifiquement pour les applications LLM et les agents IA. Dans cet article, nous explorons en détail son architecture, sa mise en place, et comment l'exploiter pour surveiller vos agents IA en production.

Qu'est-ce que Langfuse ?

Langfuse est une plateforme d'observabilité et de gestion pour les applications basées sur les LLM. Fondée en 2023, elle est rapidement devenue la référence open-source dans le domaine du LLM Ops, avec plus de 50 000 développeurs actifs et une communauté GitHub en forte croissance.

Les fonctionnalités clés

FonctionnalitéDescriptionUtilité
TracingSuivi complet des appels LLMComprendre le flux d'exécution
Cost TrackingSuivi des coûts par tokenOptimiser les dépenses
Quality MetricsÉvaluation automatique des réponsesGarantir la qualité
DashboardsVisualisation en temps réelPilotage opérationnel
AlertingNotifications proactivesRéactivité aux incidents
Prompt ManagementVersioning des promptsItération et contrôle
DatasetsGestion des jeux de testÉvaluation continue

Architecture de Langfuse

Langfuse s'articule autour d'une architecture modulaire composée de trois éléments principaux :

  1. Le SDK d'instrumentation — Intégré directement dans votre code, il capture automatiquement les traces, les métriques de latence et les coûts associés à chaque appel LLM.
  2. Le serveur Langfuse — Application backend qui stocke, agrège et analyse les données. Disponible en version self-hosted (Docker) ou cloud (Langfuse Cloud).
  3. L'interface web — Dashboard interactif permettant la navigation dans les traces, la configuration des alertes et la gestion des prompts.

Le flux de données suit ce schéma :

Agent IA → SDK Langfuse → Serveur Langfuse → Dashboard Web
                ↓
          Stockage (PostgreSQL)

L'un des avantages majeurs de cette architecture est sa compatibilité native avec les frameworks d'agents populaires : LangChain, LlamaIndex, CrewAI, AutoGen et bien d'autres.

Tutoriel : Mise en Place de Langfuse

Option 1 — Déploiement Self-Hosted avec Docker

Pour les entreprises soucieuses de la confidentialité des données, le déploiement self-hosted est la solution recommandée.

# Cloner le dépôt Langfuse
git clone https://github.com/langfuse/langfuse.git
cd langfuse

# Lancer avec Docker Compose
docker compose up -d

Le fichier docker-compose.yml inclut PostgreSQL, les workers de traitement et l'application web. Une fois démarré, l'interface est accessible sur http://localhost:3000.

Option 2 — Langfuse Cloud (SaaS)

Pour un démarrage rapide sans infrastructure, Langfuse Cloud offre un plan gratuit généreux :

# Aucune installation requise
# Créer un compte sur https://cloud.langfuse.com
# Récupérer les clés API dans les paramètres du projet

Intégration du SDK Python

import os
from langfuse import Langfuse

# Configuration
os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-xxx"
os.environ["LANGFUSE_SECRET_KEY"] = "sk-xxx"
os.environ["LANGFUSE_HOST"] = "https://cloud.langfuse.com"  # ou URL self-hosted

langfuse = Langfuse()

# Créer une trace pour un agent
trace = langfuse.trace(
    name="agent-rag-production",
    metadata={"environment": "prod", "version": "2.1.0"},
    user_id="user-12345"
)

# Ajouter un span pour l'appel LLM
generation = trace.generation(
    name="llm-call-gpt4",
    model="gpt-4o",
    input={"prompt": "Résume ce document technique"},
    metadata={"temperature": 0.3}
)

# Enregistrer le résultat
generation.end(
    output={"response": "Le document traite de..."},
    usage={"input": 450, "output": 120, "total": 570}
)

# Fermer la trace
trace.update(output={"final_answer": "Le document traite de..."})

Intégration avec LangChain

from langfuse.callback import CallbackHandler

langfuse_handler = CallbackHandler(
    public_key="pk-xxx",
    secret_key="sk-xxx",
    host="https://cloud.langfuse.com"
)

# Utilisation directe avec LangChain
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o")
chain = llm | output_parser

result = chain.invoke(
    {"input": "Analyse ce contrat"},
    config={"callbacks": [langfuse_handler]}
)

L'intégration via callback capture automatiquement tous les appels LLM intermédiaires, y compris les appels d'outils et les étapes de raisonnement.

Tracing : Comprendre le Flux de vos Agents

Le tracing est la fonctionnalité centrale de Langfuse. Il permet de visualiser l'intégralité du parcours d'une requête à travers votre agent IA.

Structure d'une trace

Une trace Langfuse se décompose en trois niveaux hiérarchiques :

  • Trace — Représente une requête utilisateur complète
  • Span — Une étape logique du traitement (recherche vectorielle, appel LLM, appel d'outil)
  • Generation — Un appel spécifique à un modèle LLM avec ses tokens d'entrée/sortie

Cette hiérarchie permet de comprendre précisément où le temps est passé et où les erreurs surviennent.

Exemple de trace d'un agent RAG

Trace: "Question utilisateur sur la garantie"
├── Span: "Recherche vectorielle" (120ms)
│   └── 3 documents retrouvés (score > 0.75)
├── Span: "Reranking" (85ms)
│   └── 2 documents sélectionnés
├── Generation: "Génération réponse GPT-4o" (1.2s)
│   ├── Input: 890 tokens
│   └── Output: 245 tokens
└── Span: "Validation réponse" (50ms)
    └── Score de confiance: 0.87

Cette visualisation arborescente permet d'identifier instantanément les goulots d'étranglement et les points de défaillance.

Suivi des Coûts : Maîtriser vos Dépenses LLM

Le suivi des coûts est souvent le premier motif d'adoption de Langfuse. Avec des modèles comme GPT-4o ou Claude Opus, les dépenses peuvent exploser rapidement si elles ne sont pas surveillées.

Configuration du suivi des coûts

# Définir les prix personnalisés si nécessaire
from langfuse import Langfuse

langfuse = Langfuse()

# Créer une trace avec suivi des coûts
trace = langfuse.trace(
    name="agent-support-client",
    metadata={"cost_center": "support-tier-1"}
)

generation = trace.generation(
    name="gpt4-response",
    model="gpt-4o",
    input={"prompt": "..."},
    model_parameters={"temperature": 0.2}
)

# Les coûts sont calculés automatiquement selon les tarifs du modèle
# Pour les modèles personnalisés, définir les prix :
langfuse.create_model(
    name="mon-modele-fine-tune",
    input_price=0.002,   # par 1k tokens
    output_price=0.006   # par 1k tokens
)

Analyse des coûts par dimension

Langfuse permet de découper les coûts selon plusieurs axes :

  • Par modèle — Comparer le coût de GPT-4o vs GPT-4o-mini vs Claude Sonnet
  • Par utilisateur — Identifier les utilisateurs les plus coûteux
  • Par agent — Comparer les coûts entre différents agents en production
  • Par période — Suivre l'évolution des coûts dans le temps

Tableau comparatif des coûts modèles (Avril 2026)

ModèleCoût Input (1M tokens)Coût Output (1M tokens)Cas d'usage recommandé
GPT-4o2,50 $10,00 $Raisonnement complexe
GPT-4o-mini0,15 $0,60 $Tâches simples
Claude Sonnet 43,00 $15,00 $Analyse de documents
Claude Haiku 3.50,25 $1,25 $Classification
Gemini 2.0 Flash0,10 $0,40 $Résumés rapides

Métriques de Qualité : Évaluer les Réponses de vos Agents

Au-delà du suivi opérationnel, Langfuse offre des capacités d'évaluation de la qualité des réponses produites par vos agents.

Évaluations basées sur les LLM (LLM-as-Judge)

from langfuse import Langfuse

langfuse = Langfuse()

# Définir un template d'évaluation
eval_template = """
Évalue la réponse suivante sur une échelle de 1 à 5 selon ces critères :
- Pertinence par rapport à la question
- Exactitude des informations
- Complétude de la réponse

Question : {question}
Réponse : {answer}

Score (1-5) :
"""

# Associer une évaluation à une trace
trace = langfuse.trace(name="evaluation-qualite")
generation = trace.generation(
    name="response",
    model="gpt-4o",
    input={"question": "..."},
    output={"answer": "..."}
)

# Ajouter un score d'évaluation
generation.score(name="quality", value=4.2)
generation.score(name="relevance", value=0.91)
generation.score(name="hallucination", value=0.05)

Métriques essentielles à suivre

Pour les agents RAG, voici les métriques de qualité incontournables :

  1. Fidélité (Faithfulness) — La réponse est-elle fidèle aux documents sources ?
  2. Pertinence (Relevance) — La réponse est-elle pertinente pour la question posée ?
  3. Exhaustivité (Completeness) — La réponse couvre-t-elle tous les aspects de la question ?
  4. Taux d'hallucination — La réponse contient-elle des informations non fondées sur les sources ?
  5. Score de récupération (Retrieval Score) — Les bons documents ont-ils été retrouvés ?

Pour une analyse approfondie des métriques d'évaluation RAG, consultez notre comparatif Ragas vs Promptfoo.

Dashboards : Piloter vos Agents en Temps Réel

Les dashboards Langfuse offrent une vue consolidée de l'état de vos agents IA en production.

Configuration des dashboards personnalisés

Les dashboards peuvent être configurés avec les widgets suivants :

  • Graphique de latence P50/P95/P99 — Suivi des temps de réponse
  • Histogramme des coûts — Répartition des dépenses
  • Taux d'erreur — Pourcentage de traces en échec
  • Distribution des scores de qualité — Histogramme des évaluations
  • Volume de requêtes — Nombre d'appels par période
  • Top des modèles — Répartition des appels par modèle

Bonnes pratiques pour les dashboards

  • Créer un dashboard par agent en production
  • Ajouter des filtres par environnement (dev/staging/prod)
  • Configurer des seuils visuels (vert/jaune/rouge) pour chaque métrique
  • Inclure les tendances sur 7 jours minimum pour détecter les dérives

Alerting : Réagir Avant que les Utilisateurs ne le Fassent

Le système d'alerting de Langfuse permet de détecter proactivement les problèmes avant qu'ils n'impactent l'expérience utilisateur.

Types d'alertes configurables

Type d'alerteCondition recommandéeSeuil typique
Latence élevéeP95 au-dessus du seuil> 5 secondes
Coût anormalDépassement du budget quotidien> 50 $/jour
Taux d'erreurPourcentage de traces en échec> 5 %
Score qualité basMoyenne glissante des évaluations< 3/5
Volume anormalSpikes de trafic inattendus> 2x la moyenne
HallucinationScore de confiance bas< 0.5

Configuration des alertes via l'API

# Les alertes peuvent être configurées via l'interface web
# ou via webhooks vers Slack, PagerDuty, etc.

# Exemple de webhook Slack pour les alertes
import requests

def send_alert(metric, value, threshold):
    webhook_url = "https://hooks.slack.com/services/xxx"
    payload = {
        "text": f"⚠️ Alerte Langfuse : {metric} = {value} (seuil : {threshold})"
    }
    requests.post(webhook_url, json=payload)

Pour comprendre comment configurer des alertes spécifiques aux modes de défaillance des agents IA, consultez notre article sur pourquoi les agents IA échouent en production.

Exemple Complet : Surveillance d'un Agent RAG en Production

Mettons tout en pratique avec un exemple concret de surveillance d'un agent RAG de support client.

import os
from langfuse import Langfuse
from langfuse.decorators import observe
from openai import OpenAI

# Initialisation
langfuse = Langfuse()
client = OpenAI()

@observe(name="rag-agent-support")
def rag_agent(question: str, user_id: str):
    """Agent RAG de support client avec tracing complet."""

    # Étape 1 : Recherche vectorielle
    docs = vector_search(question, top_k=5)
    # Le décorateur @observe capture automatiquement les spans

    # Étape 2 : Reranking
    reranked_docs = rerank(question, docs, top_k=3)

    # Étape 3 : Génération
    context = "\n".join([d.content for d in reranked_docs])
    prompt = f"""Réponds à la question du client en te basant
    uniquement sur le contexte fourni.

    Contexte : {context}
    Question : {question}"""

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.2
    )

    answer = response.choices[0].message.content

    # Étape 4 : Évaluation automatique
    score = evaluate_answer(question, answer, context)

    return {"answer": answer, "score": score}

# Appel de l'agent
result = rag_agent(
    question="Quelle est la garantie de mon produit ?",
    user_id="client-789"
)

Ce pattern permet de capturer chaque étape du pipeline RAG, les coûts associés, et les scores de qualité — le tout automatiquement.

Bonnes Pratiques de Déploiement

Checklist de mise en production

  • Déployer Langfuse en mode self-hosted si les données sont sensibles
  • Configurer le SDK avec les métadonnées de version et d'environnement
  • Activer le tracing sur tous les agents critiques
  • Définir les modèles et leurs coûts dans Langfuse
  • Créer des dashboards par agent et par environnement
  • Configurer les alertes pour la latence, les coûts et les erreurs
  • Mettre en place les évaluations LLM-as-Judge
  • Documenter les runbooks pour chaque type d'alerte
  • Activer le sampling si le volume de traces est très élevé
  • Planifier des revues hebdomadaires des dashboards

Optimisation des performances du SDK

Pour les déploiements à grande échelle, quelques optimisations sont nécessaires :

  • Utiliser le mode asynchrone — Les appels Langfuse ne doivent pas bloquer le chemin critique de votre application
  • Activer le batching — Regrouper les envois de traces par lots
  • Configurer le flush — Définir un intervalle de vidange adapté à votre volume
  • Activer le sampling — Pour les agents très sollicités, ne tracer qu'un pourcentage des requêtes
# Configuration optimisée pour la production
from langfuse import Langfuse

langfuse = Langfuse(
    enabled=True,
    debug=False,
    flush_interval=10,      # Flush toutes les 10 secondes
    sample_rate=0.1,        # Tracer 10% des requêtes
    max_batch_size=100,     # Max 100 traces par batch
)

Comparatif : Langfuse vs Alternatives

CritèreLangfuseHeliconeLangSmithArize Phoenix
Open-sourceOuiNonNonOui
Self-hostedOuiNonNonOui
Suivi des coûtsOuiOuiOuiLimité
ÉvaluationsOuiNonOuiOui
AlertingOuiOuiOuiLimité
Gestion des promptsOuiNonOuiNon
Prix (Cloud)Gratuit (base)29 $/moisInclus LangChain+Gratuit (base)

Langfuse se distingue particulièrement par sa combinaison unique d'open-source, de suivi des coûts avancé et de capacités d'évaluation intégrées.

Mise à jour — Avril 2026

Langfuse a connu des évolutions significatives ces derniers mois. Voici les principales nouveautés :

  • Langfuse v3 — Nouvelle architecture avec support natif des sessions multi-agents et du tracing distribué
  • Évaluations automatisées — Introduction des pipelines d'évaluation qui exécutent automatiquement des tests de qualité sur chaque trace en production
  • Support natif MCP — Intégration avec le Model Context Protocol pour le suivi des agents utilisant des outils MCP (comme OpenClaw)
  • Alerting avancé — Système d'alertes basé sur des règles personnalisées avec corrélation automatique des incidents
  • Optimisation des coûts — Nouveau module de recommandation qui suggère automatiquement des modèles moins coûteux pour les tâches simples
  • API v2 — Nouvelle API REST avec support GraphQL pour des requêtes complexes sur les traces

La plateforme continue de consolider sa position de référence dans l'observabilité LLM, avec une communauté qui dépasse désormais les 100 000 développeurs.

FAQ

Langfuse est-il gratuit ?

Oui, Langfuse est open-source sous licence MIT et peut être déployé gratuitement en mode self-hosted. La version cloud (SaaS) propose un plan gratuit généreux couvrant la plupart des besoins de petites équipes, avec des plans payants pour les volumes plus élevés et les fonctionnalités avancées.

Quelle est la différence entre Langfuse et LangSmith ?

LangSmith est la solution d'observabilité de LangChain, intégrée à leur écosystème mais propriétaire. Langfuse est open-source, indépendant de tout framework, et peut être auto-hébergé. Pour les équipes qui ne veulent pas être verrouillées dans l'écosystème LangChain, Langfuse est généralement recommandé.

Comment Langfuse gère-t-il les données sensibles ?

En mode self-hosted, toutes les données restent sur votre infrastructure. Langfuse propose également des fonctionnalités de masquage (PII masking) pour cacher les informations personnelles dans les traces. Vous pouvez configurer des règles de nettoyage automatique pour supprimer les données après une période de rétention définie.

Langfuse impacte-t-il les performances de mon application ?

Non, si configuré correctement. Le SDK Langfuse fonctionne de manière asynchrone par défaut, ce qui signifie que les appels réseau vers Langfuse ne bloquent pas le traitement de vos requêtes. Le surcoût de latence est typiquement inférieur à 1 ms par trace. Pour les déploiements à très grande échelle, le sampling permet de réduire davantage l'impact.

Peut-on utiliser Langfuse avec des modèles open-source locaux ?

Absolument. Langfuse est agnostique vis-à-vis du modèle utilisé. Que vous appeliez GPT-4o via l'API OpenAI, un modèle hébergé sur vLLM, ou même un modèle local via Ollama, Langfuse capture les traces de la même manière. Il suffit de déclarer le modèle et ses coûts (si vous souhaitez le suivi financier) dans la configuration.