Arize Phoenix - Observabilidade e Avaliação de LLM
Arize Phoenix é uma plataforma de observabilidade e avaliação de código aberto para aplicações LLM e agentes. É nativa do OpenTelemetry: a instrumentação emite traces OTLP padrão que Phoenix coleta, para que você possa ver cada prompt, chamada de modelo, invocação de ferramenta e passo de recuperação, depois execute avaliações sobre eles. Executa localmente (notebook, contêiner ou servidor auto-hospedado) e se integra com frameworks comuns através de instrumentadores OpenInference.
Instalação
| Método | Comando |
|---|
| pip | pip install arize-phoenix |
| Executar um servidor local | phoenix serve (UI em http://localhost:6006) |
| Docker | docker run -p 6006:6006 arizephoenix/phoenix:latest |
| Em um notebook | import phoenix as px; px.launch_app() |
| Extras de instrumentação | pip install openinference-instrumentation-openai (e outros) |
Início Rápido de Rastreamento
from phoenix.otel import register
# Configurar o tracer provider e apontá-lo para um coletor Phoenix
tracer_provider = register(
project_name="my-llm-app",
endpoint="http://localhost:6006/v1/traces",
)
# Auto-instrumentar uma biblioteca (exemplo: OpenAI)
from openinference.instrumentation.openai import OpenAIInstrumentor
OpenAIInstrumentor().instrument(tracer_provider=tracer_provider)
# ...agora suas chamadas de LLM aparecem como traces no Phoenix
| Conceito | Significado |
|---|
| Span | Uma operação (chamada de LLM, chamada de ferramenta, passo de recuperador) |
| Trace | Uma árvore de spans para uma solicitação |
| Project | Uma coleção nomeada de traces |
| OpenInference | As convenções semânticas que Phoenix usa sobre OTLP |
Instrumentação de Framework
| Biblioteca | Pacote instrumentador |
|---|
| OpenAI | openinference-instrumentation-openai |
| LangChain | openinference-instrumentation-langchain |
| LlamaIndex | openinference-instrumentation-llama-index |
| Anthropic | openinference-instrumentation-anthropic |
| DSPy | openinference-instrumentation-dspy |
| Auto (muitos) | habilitar via register(auto_instrument=True) |
Spans Manuais
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))
Avaliação
Phoenix pode pontuar traces (especialmente avaliações LLM-as-judge) e anexar 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"],
)
| Avaliação | Mede |
|---|
| Hallucination | A resposta é fundamentada no contexto? |
| QA correctness | A resposta está correta em relação à referência? |
| Relevance | Os documentos recuperados são relevantes para a consulta? |
| Toxicity | Conteúdo inseguro/tóxico |
| Custom | Seu próprio template de LLM-as-judge ou código |
Datasets & Experimentos
| Capacidade | Uso |
|---|
| Datasets | Curar exemplos de entrada/saída de traces |
| Experiments | Executar uma tarefa sobre um dataset e pontuá-lo |
px.Client().upload_dataset(...) | Criar um dataset programaticamente |
| Compare runs | Rastrear qualidade através de mudanças de prompt/modelo |
Depuração de Recuperação
| Recurso | Ajuda com |
|---|
| Atributos de span para documentos recuperados | Ver exatamente o que RAG buscou |
| Visualizações de embedding/UMAP | Detectar clusters e drift em embeddings |
| Avaliação na relevância de recuperação | Quantificar qualidade de recuperação por consulta |
Phoenix vs Outras Observabilidades de LLM
| Aspecto | Arize Phoenix | Langfuse | MLflow |
|---|
| Padrão | OpenTelemetry/OTLP | OTel + SDK | MLflow tracing |
| Foco | Rastreamento + avaliação + depuração de recuperação | Rastreamento + prompts + avaliação | Plataforma ML completa + LLM |
| Self-host | Sim | Sim | Sim |
| Melhor para | Avaliação nativa OTel & depuração de RAG | Product analytics + prompts | Times já no MLflow |
Recursos