Arize Phoenix - Observabilidad y Evaluación de LLM
Arize Phoenix es una plataforma abierta de observabilidad y evaluación para aplicaciones LLM y agentes. Es nativa de OpenTelemetry: la instrumentación emite trazas OTLP estándar que Phoenix recopila, para que puedas ver cada prompt, llamada de modelo, invocación de herramienta y paso de recuperación, luego ejecutar evaluaciones sobre ellos. Se ejecuta localmente (notebook, contenedor o servidor auto-hospedado) e integra con marcos comunes a través de instrumentadores OpenInference.
Instalación
| Método | Comando |
|---|
| pip | pip install arize-phoenix |
| Ejecutar un servidor local | phoenix serve (IU en http://localhost:6006) |
| Docker | docker run -p 6006:6006 arizephoenix/phoenix:latest |
| En un notebook | import phoenix as px; px.launch_app() |
| Extras de instrumentación | pip install openinference-instrumentation-openai (y otros) |
Inicio Rápido de Tracing
from phoenix.otel import register
# Configurar el proveedor de tracer y apuntarlo a un recopilador Phoenix
tracer_provider = register(
project_name="my-llm-app",
endpoint="http://localhost:6006/v1/traces",
)
# Auto-instrumentar una biblioteca (ejemplo: OpenAI)
from openinference.instrumentation.openai import OpenAIInstrumentor
OpenAIInstrumentor().instrument(tracer_provider=tracer_provider)
# ...ahora tus llamadas LLM aparecen como trazas en Phoenix
| Concepto | Significado |
|---|
| Span | Una operación (llamada LLM, llamada de herramienta, paso de recuperador) |
| Trace | Un árbol de spans para una solicitud |
| Project | Una colección nombrada de trazas |
| OpenInference | Las convenciones semánticas que Phoenix usa sobre OTLP |
Instrumentación de Marco
| Biblioteca | Paquete de instrumentador |
|---|
| OpenAI | openinference-instrumentation-openai |
| LangChain | openinference-instrumentation-langchain |
| LlamaIndex | openinference-instrumentation-llama-index |
| Anthropic | openinference-instrumentation-anthropic |
| DSPy | openinference-instrumentation-dspy |
| Auto (muchas) | activar vía register(auto_instrument=True) |
Spans Manuales
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("retrieve") as span:
span.set_attribute("input.value", query)
docs = retriever(query)
span.set_attribute("retrieval.documents", len(docs))
Evaluación
Phoenix puede puntuar trazas (especialmente evaluaciones LLM-as-judge) y adjuntar resultados.
from phoenix.evals import llm_classify, OpenAIModel, HALLUCINATION_PROMPT_TEMPLATE
results = llm_classify(
dataframe=spans_df,
model=OpenAIModel(model="gpt-4o"),
template=HALLUCINATION_PROMPT_TEMPLATE,
rails=["factual", "hallucinated"],
)
| Evaluación | Mide |
|---|
| Hallucination | ¿Está la respuesta fundamentada en el contexto? |
| QA correctness | ¿Es la respuesta correcta versus referencia? |
| Relevance | ¿Son los documentos recuperados relevantes para la consulta? |
| Toxicity | Contenido inseguro/tóxico |
| Custom | Tu propia plantilla LLM-as-judge o de código |
Conjuntos de Datos y Experimentos
| Capacidad | Uso |
|---|
| Datasets | Curar ejemplos de entrada/salida de trazas |
| Experiments | Ejecutar una tarea sobre un conjunto de datos y puntuarla |
px.Client().upload_dataset(...) | Crear un conjunto de datos programáticamente |
| Compare runs | Rastrear calidad entre cambios de prompt/modelo |
Depuración de Recuperación
| Característica | Ayuda con |
|---|
| Atributos de span para documentos recuperados | Ver exactamente qué obtuvo RAG |
| Vistas de embedding/UMAP | Detectar clusters y deriva en embeddings |
| Evaluación de relevancia de recuperación | Cuantificar calidad de recuperación por consulta |
Phoenix vs Otra Observabilidad de LLM
| Aspecto | Arize Phoenix | Langfuse | MLflow |
|---|
| Estándar | OpenTelemetry/OTLP | OTel + SDK | MLflow tracing |
| Enfoque | Tracing + eval + depuración de recuperación | Tracing + prompts + eval | Plataforma ML completa + LLM |
| Auto-hospedado | Sí | Sí | Sí |
| Mejor para | Eval nativa de OTel y depuración RAG | Análisis de productos + prompts | Equipos ya en MLflow |
Recursos