数据截至 (上游 commit 2301e2dc16a8)
Phoenix evals:给 LLM 输出打分
本章讲什么:
phoenix-evals是一个可独立 pip 安装的子包(packages/phoenix-evals/),不依赖 Phoenix 服务也能用。它提供"评估器(Evaluator)"的统一抽象,以及把任意数据形状对接到评估器的input_mapping机制。本章讲它的三块积木:Score、Evaluator、ClassificationEvaluator。
3.1 这是什么:打分的统一形状
问题: "这次回答好不好"有无数种判法——有没有幻觉、相不相关、有没有毒性、引用对不对。每种判法输入不同(有的要 question+answer,有的要 documents),输出也想统一(都能存进 Phoenix 当标注)。
思路: 用两个抽象统一一切。
Score= 一次评估的结果,统一形状(evaluators.py:159):name、score(数值)、label(类别)、explanation(解释)、metadata、kind(human/llm/heuristic/code)、direction(maximize/minimize)。任何评估器都吐Score,所以下游统一处理。Evaluator= 一个评估器(evaluators.py:303),抽象基类,核心方法是evaluate(eval_input)→List[Score]。
最小用法(来自 README):
# 示意,基于 packages/phoenix-evals README + evaluators.py
from phoenix.evals import create_classifier
from phoenix.evals.llm import LLM
llm = LLM(provider="openai", model="gpt-4o")
sentiment = create_classifier(
name="sentiment",
prompt_template="Classify the sentiment: {text}",
llm=llm,
choices=["positive", "negative", "neutral"],
)
result = sentiment.evaluate({"text": "I love this product!"})
print(result[0].label) # "positive"
print(result[0].explanation) # LLM 的理由