[ PROMPT_NODE_22788 ]
Observability Phoenix 高级用法
[ SKILL_DOCUMENTATION ]
# Phoenix 高级用法指南
## 自定义评估器
### 基于模板的评估器
python
from phoenix.evals import OpenAIModel, llm_classify
eval_model = OpenAIModel(model="gpt-4o")
# 用于特定评估的自定义模板
CUSTOM_EVAL_TEMPLATE = """
你正在评估 AI 助手的回复。
用户查询: {input}
AI 回复: {output}
参考答案: {reference}
根据以下标准评估回复:
1. 准确性: 信息是否正确?
2. 完整性: 是否完全回答了问题?
3. 清晰度: 是否易于理解?
提供 1-5 分的评分并解释你的理由。
格式: SCORE: [1-5]nREASONING: [解释]
"""
def custom_evaluator(input_text, output_text, reference_text):
result = llm_classify(
model=eval_model,
template=CUSTOM_EVAL_TEMPLATE,
input=input_text,
output=output_text,
reference=reference_text,
rails=["1", "2", "3", "4", "5"]
)
return {
"score": float(result.label) / 5.0,
"label": result.label,
"explanation": result.explanation
}
### 多标准评估器
python
from phoenix.evals import OpenAIModel, llm_classify
from dataclasses import dataclass
from typing import List
@dataclass
class EvaluationResult:
criteria: str
score: float
label: str
explanation: str
def multi_criteria_evaluator(input_text, output_text, criteria: List[str]):
"""根据多个标准评估输出。"""
results = []
for criterion in criteria:
template = f"""
评估以下回复的 {criterion}。
输入: {{input}}
输出: {{output}}
该回复在 {criterion} 方面表现如何?
回答 'good' (好), 'acceptable' (可接受), 或 'poor' (差)。
"""
result = llm_classify(
model=eval_model,
template=template,
input=input_text,
output=output_text,
rails=["good", "acceptable", "poor"]
)
score_map = {"good": 1.0, "acceptable": 0.5, "poor": 0.0}
results.append(EvaluationResult(
criteria=criterion,
score=score_map.get(result.label, 0.5),
label=result.label,
explanation=result.explanation
))
return results
# 用法
results = multi_criteria_evaluator(
input_text="什么是 Python?",
output_text="Python 是一种编程语言...",
criteria=["accuracy", "completeness", "helpfulness"]
)
### 批量评估