ADR 0030 — Use Phoenix for LLM Observability

Status

Accepted

Context

El chatbot del TFG utiliza LangChain y LangGraph para orquestar conversaciones con LLMs. Necesitamos visibilidad sobre:

  • Latencia de llamadas al LLM
  • Tokens utilizados por interacción
  • Flujo de ejecución del grafo conversacional
  • Detección de problemas y alucinaciones

Las herramientas tradicionales (Prometheus, ELK) no están diseñadas para observabilidad de LLMs.

Decision

Utilizaremos Phoenix (de Arize AI) con OpenInference para la observabilidad del agente LLM.

Componentes:

  • Phoenix: Plataforma open-source de observabilidad para LLMs
  • OpenInference: Estándar de instrumentación basado en OpenTelemetry
  • LangChainInstrumentor: Instrumentación automática de LangChain/LangGraph

Consequences

  • Pros:
    • Tracing automático de cadenas LangChain y grafos LangGraph.
    • UI dedicada para análisis de LLMs (no como Grafana que es genérico).
    • Visualización de tokens, latencia, y flujos de ejecución.
    • Self-hosted (privacidad de datos educativos).
    • Basado en estándares abiertos (OpenTelemetry/OpenInference).
  • Cons / Trade-offs:
    • Añade un servicio más al stack de infraestructura.
    • Menor madurez que alternativas comerciales (LangSmith).
    • Requiere configuración de OTLP exporter.

Alternatives considered

  • Langfuse: Similar funcionalidad, mejor UI, pero menos análisis de embeddings.
  • LangSmith: Oficial de LangChain, pero propietario y solo cloud.
  • OpenTelemetry + Jaeger: Genérico, no optimizado para LLMs.

Implementation

# chatbot/instrumentation.py
from openinference.instrumentation.langchain import LangChainInstrumentor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

LangChainInstrumentor().instrument()

References

  • https://docs.arize.com/phoenix
  • https://github.com/Arize-ai/openinference
  • https://opentelemetry.io/