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 #
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_experiments'importe depuisphoenix.experimentsou 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.
