RousselTMLEARNING

Observabilité

Installer Phoenix et tracer sa première application LLM

Installer Arize Phoenix (pip, Docker), envoyer ses premières traces OpenInference depuis une application OpenAI ou un modèle local Ollama, et lire les traces : messages, jetons, latence.

1. Démarrer Phoenix #

En une commande.

Options #

Phoenix en local
# Docker
docker run -d --name phoenix -p 6006:6006 -p 4317:4317 arizephoenix/phoenix:latest

# ou Python
pip install arize-phoenix
phoenix serve
PortUsage
6006Interface web et OTLP/HTTP (/v1/traces)
4317OTLP/gRPC
À savoir : Par défaut, Phoenix stocke les données dans SQLite, dans son répertoire de travail : avec Docker, sans volume, tout disparaît à la suppression du conteneur. Pour conserver les données, montez un volume ou utilisez PostgreSQL (PHOENIX_SQL_DATABASE_URL).

2. Tracer une application #

OpenAI ou modèle local.

Avec un modèle local (gratuit) #

La bibliothèque openai peut parler à tout serveur compatible, par exemple Ollama : l'instrumentation OpenInference d'OpenAI capte alors aussi ces appels.

ollama pull llama3.2
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_API_KEY=ollama           # valeur quelconque pour Ollama
export MODEL=llama3.2

Le code #

# app.py
import os
from phoenix.otel import register

register(project_name="support-bot", endpoint="http://localhost:6006/v1/traces", auto_instrument=True)

from openai import OpenAI
client = OpenAI()
model = os.getenv("MODEL", "gpt-4o-mini")

for question in ["Comment réinitialiser mon mot de passe ?", "Quels sont vos horaires ?"]:
    r = client.chat.completions.create(
        model=model,
        messages=[{"role": "system", "content": "Tu es l'assistant du support. Réponds en deux phrases."},
                  {"role": "user", "content": question}])
    print(r.choices[0].message.content)
pip install arize-phoenix-otel openinference-instrumentation-openai openai
python app.py

3. Lire les traces #

Ce que montre Phoenix.

Dans l'interface #

  • Le projet support-bot liste une trace par appel, avec latence, statut et nombre de jetons.
  • Le span LLM affiche les messages (système, utilisateur, assistant), le modèle, les paramètres et les jetons.
  • Les filtres permettent de retrouver les appels lents, en erreur, ou contenant un mot.
  • Les colonnes de jetons servent à estimer le coût par requête et par utilisateur.

Diagnostiquer #

SymptômeCause probable
Aucune traceregister() appelé après la création du client, mauvais port, instrumentation non installée
Spans sans messagesMasquage activé (OPENINFERENCE_HIDE_*)
Traces arrivant par paquetsNormal : export par lots ; elles apparaissent quelques secondes plus tard
Bonne Pratique : Appelez register() au tout début du programme, avant d'importer et de créer les clients des SDK instrumentés.

Articles liés

Arize AI : observabilité et évaluation des applications LLM et des agents

Comprendre Arize AI : Phoenix (open source) et Arize AX (plateforme), traces OpenInference, évaluations par L…

OpenInference : les conventions OpenTelemetry pour tracer les applications d'IA

Guide détaillé d'OpenInference : conventions sémantiques et instrumentations OpenTelemetry pour LLM, RAG et a…

Tracer un RAG et un agent avec OpenInference et Phoenix

Instrumenter une application RAG et un agent : spans RETRIEVER, RERANKER, TOOL et AGENT, sessions de conversa…

Pour aller plus loin