← Back to all spotlights

Arize Phoenix: Open-Source AI Observability via OpenTelemetry

Trace, debug, and evaluate LLM chains locally with Arize Phoenix, the native OpenTelemetry-powered observability engine built for modern AI stacks.

P24
By Pickwise24 Editorial Team
Verified Open-Source Review

Deploying an autonomous agent or a Retrieval-Augmented Generation (RAG) system into production without telemetry is the software engineering equivalent of wandering into a pitch-black cellar while wearing sunglasses. You know something broke because the user is suddenly shouting about their invoice hallucinating a 400% VAT surcharge, but discovering which retrieval step, prompt template, or tool call poisoned the well remains an exercise in pure guesswork.

Proprietary SaaS dashboards will happily bill you a king's ransom to inspect your JSON blobs. If you prefer to keep your sensitive prompts on your own metal, Arize Phoenix provides a fully open-source, vendor-neutral alternative.


+-----------------------------------------------------------+
|                    Arize Phoenix Core                     |
+-----------------------------+-----------------------------+
|    OpenTelemetry Tracing    |     Evals & Benchmarks      |
|  - RAG Pipelines            |  - LLM-as-a-Judge           |
|  - Multi-Agent Spans        |  - Hallucination Metrics    |
|  - Framework Auto-hooks     |  - Tool & Latency Profiling |
+-----------------------------+-----------------------------+
                              |
               [ Interactive Phoenix Web UI ]
               [ Embedding UMAP Projections ]

What Is Arize Phoenix?

Arize Phoenix is an open-source AI observability and evaluation platform developed by Arize AI. Designed specifically for Large Language Model (LLM) applications, it runs natively on OpenTelemetry (OTel) standards to capture traces, visualise complex agent workflows, evaluate retrieval performance, and surface hallucinations—either as an embedded notebook utility, a local binary, or a self-hosted Docker container.

Why Phoenix Matters: The Standardisation Shift

The developer community has grown weary of bespoke logging SDKs. Over the past year, discussions across Reddit's r/LocalLLaMA and technical post-mortems on Hacker News have driven home a single point: coupling your observability directly to a closed-source provider guarantees painful migrations later.

Phoenix sidesteps vendor lock-in by betting entirely on OpenTelemetry. Traces, spans, and attributes follow standard semantic conventions for generative AI. If you decide tomorrow to export your telemetry into Prometheus, Grafana, Jaeger, or Datadog, your instrumentation code remains completely untouched.

FeatureArize PhoenixLangSmithVanilla Logging / ELK
LicenceOpen Source (ELv2)Proprietary SaaSOpen Source / Commercial
Telemetry BaseNative OpenTelemetryProprietary RunTree SDKCustom Logs / JSON
Local Offline ModeFull UI runs locallyLimited / Cloud-firstSelf-managed
RAG EvaluationBuilt-in (Evals library)Built-inRequires bespoke code
Embedding ProjectionsNative UMAP visualisationsNoExternal tools needed

Key Capabilities

  1. Native OpenTelemetry Instrumentation: Phoenix hooks directly into common libraries—LlamaIndex, LangChain, DSPy, LiteLLM, and native OpenAI or Anthropic calls—without rewriting your core application logic.
  2. Interactive Tracing UI: Inspect nested chain executions, tool execution timings, token counts, and input/output payloads inside a snappy local interface.
  3. Automated Evaluations (LLM-as-a-Judge): Benchmark responses using pre-built evaluators for QA correctness, hallucination detection, toxicity, and tool-call accuracy.
  4. Embedding Space Visualisation: Project high-dimensional vector embeddings into 2D or 3D using UMAP directly in the browser, pinpointing retrieval blind spots and semantic clustering failures.

Quickstart Guide: Running Phoenix Locally

Getting a local dashboard running takes under two minutes. Phoenix can launch either as a background daemon on your workstation or embedded straight inside a Jupyter environment.

1. Installation

Install the core package alongside your chosen framework's OpenTelemetry instrumentor:


pip install arize-phoenix openinference-instrumentation-openai openai

2. Launching the Trace Server

Launch the Phoenix web interface from your command line:


python -m phoenix.server.main serve

The UI initialises locally at http://localhost:6006.

3. Instrumenting an Application

With the server running, instrument your application using OpenInference auto-tracers. Every call to your model automatically emits structured spans into your Phoenix backend.


import os
from openai import OpenAI
from openinference.instrumentation.openai import OpenAIInstrumentor
from phoenix.otel import register

# 1. Register Phoenix as your OpenTelemetry tracer provider
tracer_provider = register(
    project_name="customer-support-agent",
    endpoint="http://localhost:6006/v1/traces",
)

# 2. Automatically wrap OpenAI client calls
OpenAIInstrumentor().instrument(tracer_provider=tracer_provider)

# 3. Execute normal code—spans stream directly to Phoenix
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "You are a concise technical assistant."},
        {"role": "user", "content": "Why should my team adopt OpenTelemetry for LLMs?"}
    ]
)

print(response.choices[0].message.content)

Fire up http://localhost:6006 in your browser. You will see a waterfall view detailing the full request cycle: duration, token consumption, model hyperparameters, and the exact payload schema.


Running In-Memory Evals

Where Phoenix genuinely shines is closing the loop between logging and evaluation. Instead of manually inspecting output samples, use Phoenix’s evaluation engine to test your answers programmatically:


import pandas as pd
from phoenix.evals import (
    HallucinationEvaluator,
    OpenAIModel,
    run_evals,
)

# Define test dataset
df = pd.DataFrame({
    "input": ["What colour is the sky on Mars?"],
    "context": ["Mars has a thin atmosphere resulting in a butterscotch or reddish-pink sky."],
    "output": ["The Martian sky is typically bright neon green during the day."]
})

eval_model = OpenAIModel(model="gpt-4o-mini")
evaluator = HallucinationEvaluator(eval_model)

eval_results = run_evals(
    dataframe=df,
    evaluators=[evaluator],
    provide_explanation=True
)

print(eval_results[0])
# Returns label: 'hallucinated' with chain-of-thought justification

Key Takeaways for AI Builders

  • Data Privacy First: You retain full ownership of enterprise prompts and responses; traces never need to transit third-party cloud infrastructure.
  • Architectural Flexibility: Because it relies on open-source OpenTelemetry standards, you evade proprietary lock-in.
  • Root-Cause Clarity: Visualise complex multi-agent handoffs, diagnose latency spikes across chained retrievals, and catch hallucinated tool invocations before your users do.

🛡️ Editorial Standards & Methodology

Every repository featured on Pickwise24 undergoes testing on local workstation hardware before publication. We verify CLI installation steps, review open-source repository licensing, benchmark computational footprint, and evaluate architectural trade-offs to provide genuine, high-utility developer intelligence.