Langfuse é uma plataforma open source de observabilidade para aplicações com LLMs. Funciona como um “APM para IA”: registra cada chamada ao modelo, permite analisar custo, latência e qualidade, e facilita debugging em produção.

Conceitos

  • Trace: representa uma execução completa (ex: uma requisição do usuário)
  • Span: etapa dentro de um trace (ex: chamada ao LLM, busca no vector store)
  • Generation: span específico de uma chamada a um LLM (registra prompt, resposta, tokens, custo)
  • Score: avaliação de qualidade atribuída a um trace (manual ou automática)
  • Session: agrupa múltiplos traces de uma mesma conversa
Trace (requisição do usuário)
  └── Span: busca vetorial
  └── Generation: chamada ao GPT-4o
        ├── input: prompt
        ├── output: resposta
        ├── tokens: 1.2k
        └── custo: $0.003

Instalação e uso (Python)

pip install langfuse
from langfuse import Langfuse
from langfuse.decorators import observe, langfuse_context
 
langfuse = Langfuse()
 
@observe()
def minha_funcao_com_llm(pergunta: str) -> str:
    # qualquer chamada a LLM aqui é rastreada automaticamente
    resposta = openai_client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": pergunta}]
    )
    return resposta.choices[0].message.content

Integrações

FerramentaSuporte
OpenAI SDKnativo (drop-in wrapper)
Anthropic SDKnativo
LangChaincallback handler
LlamaIndexcallback handler
LiteLLMintegração nativa
# Drop-in para OpenAI
from langfuse.openai import openai  # substitui o import original
# Todo o uso do client é rastreado automaticamente

Deploy self-hosted

# docker-compose.yml
services:
  langfuse-server:
    image: langfuse/langfuse:latest
    environment:
      DATABASE_URL: postgresql://...
      NEXTAUTH_SECRET: ...
      SALT: ...
    ports:
      - "3000:3000"
  db:
    image: postgres:16

Self-hosted vs Cloud

Self-hostedCloud (langfuse.com)
Custoinfra própriafree tier + pago
Privacidadedados locaisdados no servidor deles
Manutençãovocê gerenciagerenciado

Ver também: llm | openrouter