简介
Phoenix Evals 在 trace 或数据集上跑 LLM-as-judge 评估 —— 用经过实战的 prompt 模板给输出打分:幻觉、retrieval 相关性、QA 正确性、毒性、摘要质量、代码可读性。返回 pandas DataFrame;merge 回 span 在 UI 里筛差的。适合发版前 prompt 回归测试、找出 agent 运行最差的 5%、从生产 trace 建人工策划的数据集。兼容 OpenAI、Anthropic、Bedrock、VertexAI、任何能做 judge 的模型。装机时间 5 分钟。
快速评估 —— 幻觉 + 相关性
import pandas as pd
from phoenix.evals import (
HallucinationEvaluator, RelevanceEvaluator, OpenAIModel, run_evals,
)
df = pd.DataFrame({
"input": ["谁是美国第一任总统?"] * 3,
"reference": ["乔治·华盛顿是美国第一任总统,任期 1789–1797。"] * 3,
"output": [
"乔治·华盛顿是美国第一任总统。", # 对
"托马斯·杰斐逊是美国第一任总统。", # 幻觉
"乔治·华盛顿是美国第三任总统。", # 事实错
],
})
judge = OpenAIModel(model="gpt-4o", temperature=0.0)
hallucination_evals, relevance_evals = run_evals(
dataframe=df,
evaluators=[HallucinationEvaluator(judge), RelevanceEvaluator(judge)],
provide_explanation=True,
)
print(hallucination_evals[["label", "score", "explanation"]])在生产 trace 上跑
import phoenix as px
from phoenix.evals import HallucinationEvaluator, OpenAIModel
# 拉最近 24 小时的 trace
spans_df = px.Client().query_spans("my-rag-app", project_name="my-rag-app")
# 把 span 列适配到 eval 输入
spans_df = spans_df.rename(columns={
"attributes.input.value": "input",
"attributes.output.value": "output",
"attributes.retrieval.documents": "reference",
})
(evals_df,) = run_evals(spans_df, [HallucinationEvaluator(OpenAIModel("gpt-4o"))])
# 评分回灌 Phoenix UI
px.Client().log_evaluations(SpanEvaluations(eval_name="hallucination", dataframe=evals_df))内置评估器模板
| 评估器 | 分数 | 判什么 |
|---|---|---|
HallucinationEvaluator |
factual / hallucinated | 输出有 reference 支撑吗? |
RelevanceEvaluator |
relevant / unrelated | 拉到的 chunk 跟 query 配吗? |
QAEvaluator |
correct / incorrect | 答案跟 ground-truth 配吗? |
ToxicityEvaluator |
toxic / non-toxic | 仇恨、骚扰、暴力 |
SummarizationEvaluator |
good / poor | 摘要忠实覆盖原文吗? |
CodeReadabilityEvaluator |
readable / unreadable | 生成代码干净 idiomatic 吗? |
FAQ
Q: 为啥用更小的 LLM 当 judge? A: 成本。gpt-4o-mini 判 1 万条 ~2 美元,gpt-4o ~30 美元。事实评估上 mini 跟 gpt-4o 大约 90% 一致。仅在分歧解决跑里用 gpt-4o。
Q: 能写自定义 evaluator 吗?
A: 能 —— 继承 LLMEvaluator,提供带 {input} / {output} / {reference} 占位符的 prompt 模板,再给一个允许标签 rail。框架处理 batching、重试、解析。
Q: 生产环境能用它做门禁吗? A: 当冒烟测试用,别当门禁。LLM judge 在标准任务上跟人类大约 85-92% 一致。用 eval 把候选筛出来给人复核,别静默阻塞发版。