OpenEvals 快速入门:LLM 评估指南
什么是 OpenEvals?
OpenEvals 是一个轻量级的 LLM 评估框架,使用 LLM 作为裁判(LLM-as-a-Judge)来评估模型输出质量。
特点:
- 开源免费
- 简单易用
- 内置多种评估提示词
- 支持自定义评估
安装
pip install openevals langchain-community
配置环境变量:
# Windows PowerShell
$env:DASHSCOPE_API_KEY="your-api-key"
# Linux/Mac
export DASHSCOPE_API_KEY="your-api-key"
核心用法
3 步完成评估
from langchain_community.chat_models import ChatTongyi
from openevals.prompts import CORRECTNESS_PROMPT
from openevals.llm import create_llm_as_judge
# 步骤 1:创建评估模型
eval_llm = ChatTongyi(
model_name="qwen-turbo",
dashscope_api_key="your-key",
temperature=0
)
# 步骤 2:创建评估器
evaluator = create_llm_as_judge(
prompt=CORRECTNESS_PROMPT,
feedback_key="correctness",
judge=eval_llm,
continuous=True,
use_reasoning=False
)
# 步骤 3:运行评估
result = evaluator(
inputs="什么是机器学习?",
outputs="机器学习是让计算机从数据中学习的技术。",
reference_outputs="机器学习是从数据中学习的技术。"
)
# 获取分数
score = result.get("score")
print(f"评估分数: {score}")
内置评估提示词
OpenEvals 提供多种内置评估场景:
| 提示词 | 用途 | 需要参数 |
|---|---|---|
CORRECTNESS_PROMPT |
正确性评估 | inputs, outputs, reference_outputs |
ANSWER_RELEVANCE_PROMPT |
答案相关性 | inputs, outputs |
HALLUCINATION_PROMPT |
幻觉检测 | context, inputs, outputs |
CONCISENESS_PROMPT |
简洁性 | inputs, outputs |
TOXICITY_PROMPT |
毒性检测 | outputs |
常用评估场景
1. 正确性评估
from openevals.prompts import CORRECTNESS_PROMPT
evaluator = create_llm_as_judge(
prompt=CORRECTNESS_PROMPT,
feedback_key="correctness",
judge=eval_llm
)
result = evaluator(
inputs="什么是Python?",
outputs="Python是一种高级编程语言。",
reference_outputs="Python是一种高级编程语言,具有简洁语法。"
)
score = result.get("score") # 0.0-1.0,越高越正确
2. 相关性评估
from openevals.prompts import ANSWER_RELEVANCE_PROMPT
evaluator = create_llm_as_judge(
prompt=ANSWER_RELEVANCE_PROMPT,
feedback_key="relevance",
judge=eval_llm
)
result = evaluator(
inputs="什么是机器学习?",
outputs="机器学习是AI的一个分支。"
)
score = result.get("score") # 0.0-1.0,越高越相关
3. 幻觉检测
from openevals.prompts import HALLUCINATION_PROMPT
evaluator = create_llm_as_judge(
prompt=HALLUCINATION_PROMPT,
feedback_key="hallucination",
judge=eval_llm
)
result = evaluator(
context="Python在1991年发布。",
inputs="Python何时发布?",
outputs="Python在1991年发布。"
)
score = result.get("score") # 0.0-1.0,越高幻觉越少
批量评估
# 准备测试用例
test_cases = [
{
"inputs": "什么是机器学习?",
"outputs": "机器学习是从数据中学习的技术。",
"reference_outputs": "机器学习是AI分支"
},
{
"inputs": "什么是Python?",
"outputs": "Python是编程语言。",
"reference_outputs": "Python是高级编程语言"
}
]
# 批量评估
evaluator = create_llm_as_judge(
prompt=CORRECTNESS_PROMPT,
feedback_key="correctness",
judge=eval_llm
)
for i, case in enumerate(test_cases, 1):
result = evaluator(
inputs=case["inputs"],
outputs=case["outputs"],
reference_outputs=case["reference_outputs"]
)
score = result.get("score")
print(f"测试 {i}: {score:.3f}")
自定义评估
使用自定义提示词:
from openevals.llm import create_llm_as_judge
CUSTOM_PROMPT = """评估回答的专业性。
问题:{inputs}
回答:{outputs}
请评分(0-1):"""
evaluator = create_llm_as_judge(
prompt=CUSTOM_PROMPT,
feedback_key="professionalism",
judge=eval_llm
)
result = evaluator(
inputs="如何治疗感冒?",
outputs="建议多休息,多喝水,必要时就医。"
)
评估器参数
evaluator = create_llm_as_judge(
prompt=CORRECTNESS_PROMPT, # 评估提示词
feedback_key="correctness", # 评估键
judge=eval_llm, # 评估模型
continuous=True, # True: 连续分数(0-1), False: 二值(0/1)
use_reasoning=False # True: 返回(分数,理由), False: 返回字典
)
结果格式
use_reasoning=False(默认)
{
"key": "correctness",
"score": 0.8,
"comment": None,
"metadata": None
}
use_reasoning=True
(0.8, "回答基本正确,但缺少部分细节")
支持多种模型
通义千问
from langchain_community.chat_models import ChatTongyi
eval_llm = ChatTongyi(
model_name="qwen-turbo",
dashscope_api_key="your-key"
)
OpenAI
from langchain_openai import ChatOpenAI
eval_llm = ChatOpenAI(
model="gpt-4o-mini",
api_key="your-key"
)
最佳实践
1. 选择合适的评估场景
# 有参考答案 → CORRECTNESS_PROMPT
evaluator(inputs, outputs, reference_outputs)
# 无参考答案 → ANSWER_RELEVANCE_PROMPT
evaluator(inputs, outputs)
# 检测幻觉 → HALLUCINATION_PROMPT
evaluator(context, inputs, outputs)
2. 设置温度参数
# 评估时使用 temperature=0,保证一致性
eval_llm = ChatTongyi(
model_name="qwen-turbo",
temperature=0 # 重要!
)
3. 理解分数含义
正确性/相关性:
0.8-1.0: 高质量
0.5-0.8: 中等质量
0.0-0.5: 低质量
幻觉检测:
分数越高,幻觉越少
与 LangChain 集成
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
from openevals.llm import create_llm_as_judge
# 构建应用
llm = ChatOpenAI(model="gpt-3.5-turbo")
chain = llm | StrOutputParser()
# 评估输出
response = chain.invoke("什么是机器学习?")
evaluator = create_llm_as_judge(
prompt=CORRECTNESS_PROMPT,
judge=eval_llm
)
result = evaluator(
inputs="什么是机器学习?",
outputs=response,
reference_outputs="标准答案"
)
总结
OpenEvals 的优势
| 维度 | 说明 |
|---|---|
| 简单 | 3 步完成评估 |
| 灵活 | 支持多种模型和场景 |
| 轻量 | 依赖少,易集成 |
| 开源 | 免费使用 |
适用场景
- ✅ 快速验证 LLM 输出质量
- ✅ 对比不同模型效果
- ✅ 提示词优化评估
- ✅ 批量自动化测试
开始使用 OpenEvals,让 LLM 评估更简单!🚀
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!
浙公网安备 33010602011771号