RousselTMLEARNING

Observabilité

Datasets, expériences et prompts avec Phoenix

Améliorer une application LLM avec méthode : construire des datasets à partir des traces, lancer des expériences, comparer des versions de prompt ou de modèle, et versionner les prompts avec le playground.

1. Les datasets #

Des exemples qui comptent.

Constituer un dataset #

  • À partir des traces : sélectionnez dans Phoenix des traces (mal notées, signalées par les utilisateurs, cas typiques) et ajoutez-les à un dataset.
  • À partir d'un fichier : questions et réponses attendues rédigées par les experts métier.
  • Mélangez cas courants, cas limites et cas déjà ratés : un dataset de non-régression doit contenir les erreurs passées.
import pandas as pd
from phoenix.client import Client

px = Client(base_url="http://localhost:6006")
df = pd.DataFrame({
    "question": ["Comment réinitialiser mon mot de passe ?", "Quels sont vos horaires ?"],
    "answer": ["Mot de passe oublié sur la page de connexion", "9 h à 18 h"],
})
dataset = px.datasets.create_dataset(name="support-faq", dataframe=df,
                                     input_keys=["question"], output_keys=["answer"])

2. Les expériences #

Mesurer avant de déployer.

Lancer une expérience #

Expérience comparant deux versions de prompt
SYSTEM_V2 = "Tu es l'assistant du support. Réponds en une phrase, avec le lien utile si possible."

def task(input):
    r = client.chat.completions.create(model=model, messages=[
        {"role": "system", "content": SYSTEM_V2},
        {"role": "user", "content": input["question"]}])
    return r.choices[0].message.content

def contains_expected(output, expected):
    return expected["answer"].lower() in output.lower()

def short_enough(output):
    return len(output) < 300

px.experiments.run_experiment(dataset=dataset, task=task,
                              evaluators=[contains_expected, short_enough],
                              experiment_name="prompt-v2")

Chaque expérience garde ses sorties, ses scores et ses traces ; Phoenix affiche côte à côte les expériences d'un même dataset pour voir les exemples améliorés et ceux qui ont régressé.

À savoir : Selon la version, run_experiment s'importe depuis phoenix.experiments ou s'appelle via le client (px.experiments). Les évaluateurs reçoivent les arguments qu'ils déclarent (input, output, expected, metadata).

3. Les prompts #

Versionner ce qui change le plus.

Playground et versions #

  • Le playground rejoue un span LLM avec un autre prompt, un autre modèle ou d'autres paramètres, sans toucher au code.
  • Les prompts enregistrés sont versionnés et étiquetés ; l'application peut charger une version par son nom ou son étiquette.
  • Le gabarit utilisé apparaît dans les traces (llm.prompt_template.*) : chaque réponse est reliée à sa version de prompt.
Bonne Pratique : Règle simple : aucun changement de prompt ou de modèle en production sans une expérience sur le dataset de référence qui montre un score au moins égal.

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…

Installer Phoenix et tracer sa première application LLM

Installer Arize Phoenix (pip, Docker), envoyer ses premières traces OpenInference depuis une application Open…

Pour aller plus loin