Dès qu’une architecture met en œuvre plusieurs modèles en parallèle (routage intelligent, Karpathy LLM Council, agents autonomes et sous-agents spécialisés), deux angles morts apparaissent rapidement : quel sous-agent dégrade la latence globale ? et quelle fonctionnalité consomme réellement le budget API mensuel ?
Langfuse (langfuse/langfuse) est la plateforme open-source de référence, auto-hébergeable en Docker, dédiée au traçage distribué (Tracing OpenTelemetry), à la gestion de versions de prompts et au pilotage FinOps des systèmes LLM.
Suivre ce que coûtent vraiment ses agents
Contrairement à un proxy synchrone qui ajoute de la latence sur le chemin critique des requêtes, le SDK Langfuse (ou l’exportateur OpenTelemetry standard) expédie les événements en arrière-plan par lots (batching asynchrone) vers l’instance locale :
Chaque exécution complexe est décomposée en trois niveaux hiérarchiques :
Trace: la requête globale de bout en bout (identifiant de session, utilisateur, fonctionnalité métier et statut final).Span: les étapes intermédiaires non-LLM (extraction AST, recherche vectorielle, appel d’API externe, validation de garde-fous).Generation: chaque appel exact à un modèle (Claude Opus,GPT,Gemini) avec le prompt envoyé, la réponse brute, le TTFT (Time-To-First-Token), le taux de Prompt Caching et le coût calculé au centime près.
Déploiement Docker et intégration Python
L’instrumentation d’un service Python existant s’effectue via un simple décorateur @observe() compatible avec asyncio :
# Démarrage de la stack Langfuse locale (PostgreSQL + ClickHouse + Web UI)
docker compose -f docker-compose.langfuse.yml up -d
# Vérification de l'état de santé de l'API d'ingestion locale
curl -s http://localhost:3000/api/public/health | jq .
–> L’analyse des traces dans Langfuse permet d’identifier immédiatement les boucles d’agents bavardes et de basculer les tâches de classification simples vers des modèles légers ou du cache local, réduisant la facture API de 40 % à 65 %.
Caractéristiques
| Dimension d’Observabilité | Logs Fichiers / stdout | Facturation Brute Cloud (OpenAI/GCP) | Langfuse (Self-Hosted) |
|---|---|---|---|
| Graphe d’appels multi-agents imbriqués | ❌ Illisible en parallèle | ❌ Non corrélé | ✅ Arbre de Spans OpenTelemetry visuel |
| Imputation FinOps par feature / agent | ❌ Calcul manuel | Agrégé par clé API uniquement | ✅ Coût exact par tag, user et étape |
| Mesure du TTFT & Prompt Cache Hit | ❌ Absent | Partiel | ✅ Métriques temps réel par modèle |
| Souveraineté des données (Zero-Cloud) | ✅ Locale | ❌ Cloud tiers | ✅ 100 % auto-hébergé (Docker) |
| Impact sur la latence applicative | ~0 ms | 0 ms | ~0 ms (Ingestion asynchrone en tâche de fond) |
| Commande | Description |
|---|---|
`@observe()`
| Décorateur Python traçant automatiquement les entrées, sorties, temps d'exécution et erreurs d'une fonction. |
`langfuse_context.update_current_trace(tags=[...])`
| Attache des étiquettes métiers (ex: council, osint, bugfix) à la trace active pour le filtrage FinOps. |
`langfuse.flush()`
| Force l'envoi immédiat des événements en attente avant l'arrêt d'un script CLI court. |
`GET /api/public/metrics/daily`
| Endpoint REST retournant la consommation quotidienne de tokens et les coûts agrégés par modèle. |
