name: evaluating-llms description: 使用自动化指标、LLM作为裁判和基准来评估LLM系统。适用于测试提示质量、验证RAG管道、测量安全性(幻觉、偏见)或比较模型用于生产部署。
LLM 评估
使用自动化指标、LLM作为裁判模式和标准化基准来评估大型语言模型(LLM)系统,以确保生产质量和安全性。
何时使用此技能
应用此技能当:
- 测试个别提示的正确性和格式
- 验证RAG(检索增强生成)管道质量
- 测量LLM输出中的幻觉、偏见或毒性
- 比较不同模型或提示配置(A/B测试)
- 运行基准测试(MMLU、HumanEval)以评估模型能力
- 设置LLM应用程序的生产监控
- 将LLM质量检查集成到CI/CD管道中
常见触发场景:
- “如何测试我的RAG系统是否正常工作?”
- “如何测量LLM输出中的幻觉?”
- “应使用哪些指标来评估生成质量?”
- “如何为我的用例比较GPT-4与Claude?”
- “如何检测LLM响应中的偏见?”
评估策略选择
决策框架:选择哪种评估方法?
按任务类型:
| 任务类型 | 主要方法 | 指标 | 工具 |
|---|---|---|---|
| 分类(情感、意图) | 自动化指标 | 准确率、精确率、召回率、F1分数 | scikit-learn |
| 生成(摘要、创意文本) | LLM作为裁判 + 自动化 | BLEU、ROUGE、BERTScore、质量评分 | GPT-4/Claude 用于评判 |
| 问答 | 精确匹配 + 语义相似度 | 精确匹配、F1、余弦相似度 | 自定义评估器 |
| RAG系统 | RAGAS框架 | 忠实性、答案/上下文相关性 | RAGAS库 |
| 代码生成 | 单元测试 + 执行 | Pass@K、测试通过率 | HumanEval、pytest |
| 多步骤代理 | 任务完成 + 工具准确性 | 成功率、效率 | 自定义评估器 |
按样本量和成本:
| 样本数 | 速度 | 成本 | 推荐方法 |
|---|---|---|---|
| 1,000+ | 即时 | $0 | 自动化指标(正则表达式、JSON验证) |
| 100-1,000 | 分钟 | $0.01-0.10每个 | LLM作为裁判(GPT-4、Claude) |
| < 100 | 小时 | $1-10每个 | 人工评估(成对比较) |
分层方法(推荐用于生产):
- 层1: 对所有输出使用自动化指标(快速、便宜)
- 层2: 对10%样本使用LLM作为裁判(细粒度质量)
- 层3: 对1%边缘案例进行人工审查(验证)
核心评估模式
单元评估(个别提示)
测试单个提示-响应对的正确性。
方法:
- 精确匹配: 响应与预期输出完全匹配
- 正则表达式匹配: 响应遵循预期模式
- JSON模式验证: 结构化输出验证
- 关键词存在: 响应中出现必需术语
- LLM作为裁判: 使用评估提示进行通过/失败判断
示例用例:
- 邮件分类(垃圾/非垃圾)
- 实体提取(日期、名称、地点)
- JSON输出格式验证
- 情感分析(正面/负面/中性)
快速入门(Python):
import pytest
from openai import OpenAI
client = OpenAI()
def classify_sentiment(text: str) -> str:
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "将情感分类为正面、负面或中性。仅返回标签。"},
{"role": "user", "content": text}
],
temperature=0
)
return response.choices[0].message.content.strip().lower()
def test_positive_sentiment():
result = classify_sentiment("我爱这个产品!")
assert result == "正面"
完整单元评估示例,参见 examples/python/unit_evaluation.py 和 examples/typescript/unit-evaluation.ts。
RAG(检索增强生成)评估
使用RAGAS框架指标评估RAG系统。
关键指标(优先级顺序):
-
忠实性(目标:> 0.8)- 最关键
- 测量:答案是否基于检索到的上下文?
- 防止幻觉
- 如果失败:调整提示以强调基于上下文,要求引用
-
答案相关性(目标:> 0.7)
- 测量:答案如何很好地处理查询?
- 如果失败:改进提示指令,添加少量示例
-
上下文相关性(目标:> 0.7)
- 测量:检索到的块是否与查询相关?
- 如果失败:改进检索(更好的嵌入、混合搜索)
-
上下文精确度(目标:> 0.5)
- 测量:相关块是否排名高于无关块?
- 如果失败:在检索管道中添加重新排序步骤
-
上下文召回(目标:> 0.8)
- 测量:是否检索到所有相关块?
- 如果失败:增加检索数量,改进分块策略
快速入门(Python 使用 RAGAS):
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_relevancy
from datasets import Dataset
data = {
"question": ["法国的首都是什么?"],
"answer": ["法国的首都是巴黎。"],
"contexts": [["巴黎是法国的首都。"]],
"ground_truth": ["巴黎"]
}
dataset = Dataset.from_dict(data)
results = evaluate(dataset, metrics=[faithfulness, answer_relevancy, context_relevancy])
print(f"忠实性:{results['faithfulness']:.2f}")
全面RAG评估模式,参见 references/rag-evaluation.md 和 examples/python/ragas_example.py。
LLM作为裁判评估
使用强大LLM(GPT-4、Claude Opus)评估其他LLM输出。
何时使用:
- 生成质量评估(摘要、创意写作)
- 细粒度评估标准(语气、清晰度、帮助性)
- 自定义评分标准用于领域特定任务
- 中等量评估(100-1,000个样本)
与人类判断的相关性: 0.75-0.85对于设计良好的评分标准
最佳实践:
- 使用清晰、具体的评分标准(1-5分,详细标准)
- 在评估提示中包含少量示例
- 平均多次评估以减少方差
- 注意偏见(位置偏见、冗长偏见、自偏好)
快速入门(Python):
from openai import OpenAI
client = OpenAI()
def evaluate_quality(prompt: str, response: str) -> tuple[int, str]:
"""返回(分数1-5,推理)"""
eval_prompt = f"""
根据相关性和帮助性评估以下LLM响应。
用户提示:{prompt}
LLM响应:{response}
提供:
分数:[1-5,其中5为最佳]
推理:[1-2句话]
"""
result = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": eval_prompt}],
temperature=0.3
)
content = result.choices[0].message.content
lines = content.strip().split('
')
score = int(lines[0].split(':')[1].strip())
reasoning = lines[1].split(':', 1)[1].strip()
return score, reasoning
详细LLM作为裁判模式和提示模板,参见 references/llm-as-judge.md 和 examples/python/llm_as_judge.py。
安全性和对齐性评估
测量LLM输出中的幻觉、偏见和毒性。
幻觉检测
方法:
-
忠实性到上下文(RAG):
- 使用RAGAS忠实性指标
- LLM检查声明是否基于上下文
- 分数:支持的声明 / 总声明
-
事实准确性(闭卷):
- LLM作为裁判访问可靠来源
- 事实检查API(谷歌事实检查)
- 实体级验证(日期、名称、统计)
-
自我一致性:
- 对同一问题生成多个响应
- 测量响应之间的一致性
- 低一致性暗示幻觉
偏见评估
偏见类型:
- 性别偏见(刻板印象关联)
- 种族/民族偏见(歧视性输出)
- 文化偏见(西方中心假设)
- 年龄/残疾偏见(能者或年龄歧视语言)
评估方法:
-
刻板印象测试:
- BBQ(偏见基准问答):58,000个问题-答案对
- BOLD(开放生成中的偏见)
-
反事实评估:
- 生成带人口统计交换的响应
- 示例:“史密斯博士(他/她)推荐…” → 比较输出
- 测量跨变体的一致性
毒性检测
工具:
- Perspective API(谷歌): 毒性、威胁、侮辱分数
- Detoxify(HuggingFace): 开源毒性分类器
- OpenAI Moderation API: 仇恨、骚扰、暴力检测
全面安全评估模式,参见 references/safety-evaluation.md。
基准测试
使用标准化基准评估模型能力。
标准基准:
| 基准 | 覆盖范围 | 格式 | 难度 | 用例 |
|---|---|---|---|---|
| MMLU | 57个主题(STEM、人文) | 多项选择 | 高中 - 专业 | 一般智能 |
| HellaSwag | 句子补全 | 多项选择 | 常识 | 推理验证 |
| GPQA | 博士级科学 | 多项选择 | 非常高(专家级) | 前沿模型测试 |
| HumanEval | 164个Python问题 | 代码生成 | 中等 | 代码能力 |
| MATH | 12,500个竞赛问题 | 数学解决 | 高中竞赛 | 数学推理 |
领域特定基准:
- 医学: MedQA(USMLE)、PubMedQA
- 法律: LegalBench
- 金融: FinQA、ConvFinQA
何时使用基准:
- 比较多个模型(GPT-4 vs Claude vs Llama)
- 为特定领域选择模型
- 基线能力评估
- 学术研究和发表
快速入门(lm-evaluation-harness):
pip install lm-eval
# 评估GPT-4在MMLU上
lm_eval --model openai-chat --model_args model=gpt-4 --tasks mmlu --num_fewshot 5
详细基准测试模式,参见 references/benchmarks.md 和 scripts/benchmark_runner.py。
生产评估
监控和优化生产环境中的LLM质量。
A/B测试
比较两个LLM配置:
- 变体A: GPT-4(昂贵、高质量)
- 变体B: Claude Sonnet(便宜、快速)
指标:
- 用户满意度分数(点赞/点踩)
- 任务完成率
- 响应时间和延迟
- 每次成功交互的成本
在线评估
实时质量监控:
- 响应质量: LLM作为裁判对每个第N个响应评分
- 用户反馈: 显式评分、点赞/点踩
- 业务指标: 转化率、支持票解决
- 成本跟踪: 使用的令牌、推理成本
人类在环
基于样本的人工评估:
- 随机抽样: 评估10%的响应
- 基于置信度: 评估低置信度输出
- 错误触发: 标记可疑响应进行审查
生产评估模式和监控策略,参见 references/production-evaluation.md。
分类任务评估
用于离散输出任务(情感、意图、类别)。
指标:
- 准确率: 正确预测 / 总预测
- 精确率: 真正例 / (真正例 + 假正例)
- 召回率: 真正例 / (真正例 + 假反例)
- F1分数: 精确率和召回率的调和平均
- 混淆矩阵: 预测错误的详细分解
快速入门(Python):
from sklearn.metrics import accuracy_score, precision_recall_fscore_support
y_true = ["正面", "负面", "中性", "正面", "负面"]
y_pred = ["正面", "负面", "中性", "中性", "负面"]
accuracy = accuracy_score(y_true, y_pred)
precision, recall, f1, _ = precision_recall_fscore_support(y_true, y_pred, average='weighted')
print(f"准确率:{accuracy:.2f}")
print(f"精确率:{precision:.2f}")
print(f"召回率:{recall:.2f}")
print(f"F1分数:{f1:.2f}")
完整分类评估示例,参见 examples/python/classification_metrics.py。
生成任务评估
用于开放文本生成(摘要、创意写作、响应)。
自动化指标(谨慎使用):
- BLEU: 与参考文本的N-gram重叠(0-1分数)
- ROUGE: 召回导向重叠(ROUGE-1、ROUGE-L)
- METEOR: 带词干提取的语义相似度
- BERTScore: 上下文嵌入相似度(0-1分数)
局限性: 自动化指标与人类判断对于创造性/主观生成相关性较弱。
推荐方法:
- 自动化指标: 快速反馈客观方面(长度、格式)
- LLM作为裁判: 细粒度质量评估(相关性、连贯性、帮助性)
- 人工评估: 主观标准的最终验证(偏好、创意性)
详细生成评估模式,参见 references/evaluation-types.md。
快速参考表
评估框架选择
| 如果任务是… | 使用此框架 | 主要指标 |
|---|---|---|
| RAG系统 | RAGAS | 忠实性 > 0.8 |
| 分类 | scikit-learn指标 | 准确率、F1 |
| 生成质量 | LLM作为裁判 | 质量评分标准(1-5) |
| 代码生成 | HumanEval | Pass@1、测试通过率 |
| 模型比较 | 基准测试 | MMLU、HellaSwag分数 |
| 安全性验证 | 幻觉检测 | 忠实性、事实检查 |
| 生产监控 | 在线评估 | 用户反馈、业务KPI |
Python库推荐
| 库 | 用例 | 安装 |
|---|---|---|
| RAGAS | RAG评估 | pip install ragas |
| DeepEval | 一般LLM评估,pytest集成 | pip install deepeval |
| LangSmith | 生产监控,A/B测试 | pip install langsmith |
| lm-eval | 基准测试(MMLU、HumanEval) | pip install lm-eval |
| scikit-learn | 分类指标 | pip install scikit-learn |
安全评估优先级矩阵
| 应用 | 幻觉风险 | 偏见风险 | 毒性风险 | 评估优先级 |
|---|---|---|---|---|
| 客户支持 | 高 | 中等 | 高 | 1. 忠实性,2. 毒性,3. 偏见 |
| 医学诊断 | 关键 | 高 | 低 | 1. 事实准确性,2. 幻觉,3. 偏见 |
| 创意写作 | 低 | 中等 | 中等 | 1. 质量/流畅性,2. 内容政策 |
| 代码生成 | 中等 | 低 | 低 | 1. 功能正确性,2. 安全性 |
| 内容审核 | 低 | 关键 | 关键 | 1. 偏见,2. 假正例/假反例 |
详细参考文献
特定主题的全面文档:
- 评估类型(分类、生成、问答、代码):
references/evaluation-types.md - RAG评估深入(RAGAS框架):
references/rag-evaluation.md - 安全评估(幻觉、偏见、毒性):
references/safety-evaluation.md - 基准测试(MMLU、HumanEval、领域基准):
references/benchmarks.md - LLM作为裁判最佳实践和提示:
references/llm-as-judge.md - 生产评估(A/B测试、监控):
references/production-evaluation.md - 所有指标定义和公式:
references/metrics-reference.md
工作示例
Python示例:
examples/python/unit_evaluation.py- 使用pytest的基本提示测试examples/python/ragas_example.py- RAGAS RAG评估examples/python/deepeval_example.py- DeepEval框架使用examples/python/llm_as_judge.py- GPT-4作为评估器examples/python/classification_metrics.py- 准确率、精确率、召回率examples/python/benchmark_testing.py- HumanEval示例
TypeScript示例:
examples/typescript/unit-evaluation.ts- Vitest + OpenAIexamples/typescript/llm-as-judge.ts- GPT-4评估examples/typescript/langsmith-integration.ts- 生产监控
可执行脚本
无需将代码加载到上下文中运行评估(无令牌成本):
scripts/run_ragas_eval.py- 在数据集上运行RAGAS评估scripts/compare_models.py- A/B测试两个模型scripts/benchmark_runner.py- 运行MMLU/HumanEval基准scripts/hallucination_checker.py- 检测输出中的幻觉
示例用法:
# 在自定义数据集上运行RAGAS评估
python scripts/run_ragas_eval.py --dataset data/qa_dataset.json --output results.json
# 比较GPT-4与Claude在基准上
python scripts/compare_models.py --model-a gpt-4 --model-b claude-3-opus --tasks mmlu,humaneval
与其他技能集成
相关技能:
building-ai-chat: 评估AI聊天应用程序(此技能测试该技能构建的内容)prompt-engineering: 测试提示质量和有效性testing-strategies: 将测试金字塔应用于LLM评估(单元 → 集成 → E2E)observability: 生产监控和LLM质量警报building-ci-pipelines: 将LLM评估集成到CI/CD中
工作流集成:
- 编写提示(使用
prompt-engineering技能) - 单元测试提示(使用
llm-evaluation技能) - 构建AI功能(使用
building-ai-chat技能) - 集成测试RAG管道(使用
llm-evaluation技能) - 部署到生产(使用
deploying-applications技能) - 监控质量(使用
llm-evaluation+observability技能)
常见陷阱
1. 过度依赖生成任务的自动化指标
- BLEU/ROUGE与人类判断对于创意文本相关性较弱
- 解决方案:分层LLM作为裁判或人工评估
2. 忽略RAG系统中的忠实性
- 幻觉是RAG失败的第一大原因
- 解决方案:优先忠实性指标(目标 > 0.8)
3. 无生产监控
- 模型可能随时间退化,提示可能在更新中损坏
- 解决方案:设置连续评估(LangSmith、自定义监控)
4. 偏见的LLM作为裁判评估
- 评估器LLM有偏见(位置偏见、冗长偏见)
- 解决方案:平均多次评估,使用多样化的评估提示
5. 基准覆盖不足
- 单个基准不捕获完整模型能力
- 解决方案:使用3-5个跨不同领域的基准
6. 缺失安全评估
- 生产LLM可能生成有害内容
- 解决方案:添加毒性、偏见和幻觉检查到评估管道