关于 evaluating-llms
面向工程师的 LLM 评估技能,涵盖提示词测试、RAG 质量、安全性、基准测试和生产监控,并提供自动指标、LLM 评审及人工复核方法。
主要功能
- 01自动指标与 LLM 评审
- 02使用 RAGAS 评估 RAG
- 03检测幻觉、偏见与毒性
- 04运行标准基准测试
- 05生产监控与 A/B 测试
适用场景
- 01验证提示词输出及格式
- 02衡量 RAG 流程质量
- 03比较模型或提示词配置
- 04监控生产环境中的 LLM 应用
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ancoleman/ ai-design-components --skill evaluating-llms安装后在 Claude Code 中输入/evaluating-llms确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
outputs.yamlexamples/python/benchmark_testing.pyclassification_metrics.pydeepeval_example.pyllm_as_judge.pyragas_example.pyunit_evaluation.pyexamples/typescript/langsmith-integration.tsllm-as-judge.tsunit-evaluation.tsreferences/benchmarks.mdevaluation-types.mdllm-as-judge.mdmetrics-reference.mdproduction-evaluation.mdrag-evaluation.mdsafety-evaluation.md详细介绍
大模型评估
使用自动化指标、大模型裁判模式和标准化基准测试来评估大语言模型(LLM)系统,确保其达到生产质量和安全要求。
何时使用此技能
在以下情况下使用此技能:
- 测试单个提示词的正确性和格式
- 验证 RAG(检索增强生成)工作流的质量
- 衡量大模型输出中的幻觉、偏见或毒性
- 比较不同模型或提示词配置(A/B 测试)
- 运行基准测试(MMLU、HumanEval)以评估模型能力
- 为大模型应用设置生产监控
- 将大模型质量检查集成到 CI/CD 工作流中
常见触发问题:
- “如何测试我的 RAG 系统是否正常工作?”
- “如何衡量大模型输出中的幻觉?”
- “应该使用哪些指标来评估生成质量?”
- “如何针对我的使用场景比较 GPT-4 和 Claude?”
- “如何检测大模型响应中的偏见?”
评估策略选择
决策框架:选择哪种评估方法?
按任务类型划分:
| 任务类型 | 主要方法 | 指标 | 工具 |
|---|---|---|---|
| 分类(情感、意图) | 自动化指标 | 准确率、精确率、召回率、F1 | scikit-learn |
| 生成(摘要、创意文本) | 大模型裁判 + 自动化评估 | BLEU、ROUGE、BERTScore、质量评分标准 | 用于评判的 GPT-4/Claude |
| 问答 | 精确匹配 + 语义相似度 | EM、F1、余弦相似度 | 自定义评估器 |
| RAG 系统 | RAGAS 框架 | 忠实度、答案/上下文相关性 | RAGAS 库 |
| 代码生成 | 单元测试 + 执行 | Pass@K、测试通过率 | HumanEval、pytest |
| 多步 Agent | 任务完成度 + 工具准确性 | 成功率、效率 | 自定义评估器 |
按样本量和成本划分:
| 样本量 | 速度 | 成本 | 建议方法 |
|---|---|---|---|
| 1,000+ | 即时 | $0 | 自动化指标(正则表达式、JSON 验证) |
| 100-1,000 | 数分钟 | 每个 $0.01-0.10 | 大模型裁判(GPT-4、Claude) |
| < 100 | 数小时 | 每个 $1-10 | 人工评估(成对比较) |
分层方法(生产环境推荐):
- 第 1 层: 对所有输出使用自动化指标(快速、低成本)
- 第 2 层: 对 10% 的样本使用大模型裁判(评估细微的质量差异)
- 第 3 层: 人工审查 1% 的边缘案例(验证)
核心评估模式
单元评估(单个提示词)
测试单个提示词-响应对的正确性。
方法:
- 精确匹配: 响应与预期输出完全一致
- 正则匹配: 响应符合预期模式
- JSON Schema 验证: 验证结构化输出
- 关键词检查: 响应中包含必需词语
- 大模型裁判: 使用评估提示词进行二元通过/失败判定
快速入门(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": "Classify sentiment as positive, negative, or neutral. Return only the label."},
{"role": "user", "content": text}
],
temperature=0
)
return response.choices[0].message.content.strip().lower()
def test_positive_sentiment():
result = classify_sentiment("I love this product!")
assert result == "positive"
完整的单元评估示例请参阅 examples/python/unit_evaluation.py 和 examples/typescript/unit-evaluation.ts。
RAG(检索增强生成)评估
使用 RAGAS 框架指标评估 RAG 系统。
关键指标(优先级顺序):
-
忠实度(目标:> 0.8)- 最关键
- 衡量:答案是否以检索到的上下文为依据?
- 防止幻觉
- 如果未达标:调整提示词以强调依据上下文作答,并要求提供引用
-
答案相关性(目标:> 0.7)
- 衡量:答案在多大程度上回应了查询?
- 如果未达标:改进提示词说明,添加少样本示例
-
上下文相关性(目标:> 0.7)
- 衡量:检索到的文本块是否与查询相关?
- 如果未达标:改进检索(使用更好的嵌入、混合搜索)
-
上下文精确率(目标:> 0.5)
- 衡量:相关文本块的排名是否高于不相关文本块?
- 如果未达标:在检索流水线中添加重排序步骤
-
上下文召回率(目标:> 0.8)
- 衡量:是否检索到了所有相关文本块?
- 如果未达标:增加检索数量,改进文本分块策略
快速开始(使用 RAGAS 的 Python):
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_relevancy
from datasets import Dataset
data = {
"question": ["What is the capital of France?"],
"answer": ["The capital of France is Paris."],
"contexts": [["Paris is the capital of France."]],
"ground_truth": ["Paris"]
}
dataset = Dataset.from_dict(data)
results = evaluate(dataset, metrics=[faithfulness, answer_relevancy, context_relevancy])
print(f"Faithfulness: {results['faithfulness']:.2f}")
如需了解全面的 RAG 评估模式,请参阅 references/rag-evaluation.md 和 examples/python/ragas_example.py。
LLM 作为评判者的评估
使用强大的大模型(GPT-4、Claude Opus)评估其他大模型的输出。
适用场景:
- 生成质量评估(摘要、创意写作)
- 细致的评估标准(语气、清晰度、实用性)
- 针对特定领域任务的自定义评分标准
- 中等规模的评估(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]:
"""Returns (score 1-5, reasoning)"""
eval_prompt = f"""
Rate the following LLM response on relevance and helpfulness.
USER PROMPT: {prompt}
LLM RESPONSE: {response}
Provide:
Score: [1-5, where 5 is best]
Reasoning: [1-2 sentences]
"""
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('\n')
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。
安全与对齐评估
衡量大模型输出中的幻觉、偏见和毒性。
幻觉检测
方法:
-
对上下文的忠实度(RAG):
- 使用 RAGAS 忠实度指标
- 由大模型检查陈述是否得到上下文支持
- 得分:有支持的陈述数 / 陈述总数
-
事实准确性(闭卷):
- 使用可访问可靠来源的大模型评判者
- 事实核查 API(Google Fact Check)
- 实体级验证(日期、姓名、统计数据)
-
自一致性:
- 针对同一问题生成多个回答
- 衡量回答之间的一致程度
- 一致性低可能意味着存在幻觉
偏见评估
偏见类型:
- 性别偏见(刻板关联)
- 种族/族裔偏见(歧视性输出)
- 文化偏见(以西方为中心的假设)
- 年龄/残障偏见(歧视残障者或年龄歧视的语言)
评估方法:
-
刻板印象测试:
- BBQ(QA 偏见基准):58,000 组问答对
- BOLD(开放式语言生成中的偏见)
-
反事实评估:
- 通过替换人口统计属性生成回答
- 示例:“Dr. Smith(他/她)建议……”→ 比较输出
- 衡量不同变体之间的一致性
毒性检测
工具:
- Perspective API(Google): 毒性、威胁、侮辱得分
- 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、Claude 与 Llama)
- 为特定领域选择模型
- 评估基线能力
- 学术研究与发表
快速入门(lm-evaluation-harness):
pip install lm-eval
# Evaluate GPT-4 on MMLU
lm_eval --model openai-chat --model_args model=gpt-4 --tasks mmlu --num_fewshot 5
有关详细的基准测试模式,请参阅 references/benchmarks.md 和 scripts/benchmark_runner.py。
生产环境评估
在生产环境中监控并优化大模型质量。
A/B 测试
比较两种大模型配置:
- 变体 A: GPT-4(成本高、质量高)
- 变体 B: Claude Sonnet(成本较低、速度快)
指标:
- 用户满意度评分(点赞/点踩)
- 任务完成率
- 响应时间和延迟
- 每次成功交互的成本
在线评估
实时质量监控:
- 响应质量: 使用大模型作为评判者,对每第 N 条响应进行评分
- 用户反馈: 明确评分、点赞/点踩
- 业务指标: 转化率、支持工单解决率
- 成本跟踪: 使用的 Token 数、推理成本
人工参与评估
基于抽样的人工评估:
- 随机抽样: 评估 10% 的响应
- 基于置信度: 评估低置信度输出
- 错误触发: 标记可疑响应以供审核
有关生产环境评估模式和监控策略,请参阅 references/production-evaluation.md。
分类任务评估
适用于输出离散结果的任务(情感、意图、类别)。
指标:
- 准确率: 正确预测数 / 预测总数
- 精确率: 真阳性 /(真阳性 + 假阳性)
- 召回率: 真阳性 /(真阳性 + 假阴性)
- F1 分数: 精确率与召回率的调和平均值
- 混淆矩阵: 详细列出预测错误
快速入门(Python):
from sklearn.metrics import accuracy_score, precision_recall_fscore_support
y_true = ["positive", "negative", "neutral", "positive", "negative"]
y_pred = ["positive", "negative", "neutral", "neutral", "negative"]
accuracy = accuracy_score(y_true, y_pred)
precision, recall, f1, _ = precision_recall_fscore_support(y_true, y_pred, average='weighted')
print(f"Accuracy: {accuracy:.2f}")
print(f"Precision: {precision:.2f}")
print(f"Recall: {recall:.2f}")
print(f"F1 Score: {f1:.2f}")
完整的分类评估示例请参阅 examples/python/classification_metrics.py。
生成任务评估
适用于开放式文本生成(摘要、创意写作、回复)。
自动化指标(谨慎使用):
- BLEU: 与参考文本的 N-gram 重叠度(0-1 分数)
- ROUGE: 面向召回率的重叠度(ROUGE-1、ROUGE-L)
- METEOR: 使用词干提取的语义相似度
- BERTScore: 上下文嵌入相似度(0-1 分数)
局限性: 对于创意性或主观性生成,自动化指标与人工判断的相关性较弱。
推荐方法:
- 自动化指标: 快速反馈客观方面(长度、格式)
- 大模型作为评判者: 细致评估质量(相关性、连贯性、实用性)
- 人工评估: 对主观标准(偏好、创造力)进行最终验证
有关详细的生成评估模式,请参阅 references/evaluation-types.md。
快速参考表
评估框架选择
| 如果任务是…… | 使用此框架 | 主要指标 |
|---|---|---|
| RAG 系统 | RAGAS | 忠实度 > 0.8 |
| 分类 | scikit-learn 指标 | 准确率、F1 |
| 生成质量 | LLM-as-judge | 质量评分标准(1-5) |
| 代码生成 | HumanEval | Pass@1、测试通过率 |
| 模型比较 | 基准测试 | MMLU、HellaSwag 得分 |
| 安全验证 | 幻觉检测 | 忠实度、事实核查 |
| 生产监控 | 在线评估 | 用户反馈、业务 KPI |
Python 库推荐
| 库 | 使用场景 | 安装 |
|---|---|---|
| RAGAS | RAG 评估 | pip install ragas |
| DeepEval | 通用大模型评估、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-as-judge 最佳实践和提示词:
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- 检测输出中的幻觉
用法示例:
# Run RAGAS evaluation on custom dataset
python scripts/run_ragas_eval.py --dataset data/qa_dataset.json --output results.json
# Compare GPT-4 vs Claude on benchmark
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: 将测试金字塔应用于大模型评估(单元 → 集成 → E2E)observability: 监控生产环境并针对大模型质量设置告警building-ci-pipelines: 将大模型评估集成到 CI/CD 中
工作流集成:
- 编写提示词(使用
prompt-engineering技能) - 对提示词进行单元测试(使用
llm-evaluation技能) - 构建 AI 功能(使用
building-ai-chat技能) - 对 RAG 流水线进行集成测试(使用
llm-evaluation技能) - 部署到生产环境(使用
deploying-applications技能) - 监控质量(使用
llm-evaluation和observability技能)
常见陷阱
1. 过度依赖生成任务的自动化指标
- BLEU/ROUGE 与创意文本的人类评判结果相关性较弱
- 解决方案:结合使用 LLM-as-judge 或人工评估
2. 忽视 RAG 系统中的忠实度
- 幻觉是 RAG 最常见的故障模式
- 解决方案:优先关注忠实度指标(目标 > 0.8)
3. 缺少生产环境监控
- 模型可能随时间推移而退化,提示词也可能因更新而失效
- 解决方案:设置持续评估(LangSmith、自定义监控)
4. LLM-as-Judge 评估存在偏差
- 评估器大模型存在偏差(位置偏差、冗长偏差)
- 解决方案:对多次评估取平均值,并使用多样化的评估提示词
5. 基准测试覆盖不足
- 单一基准测试无法全面反映模型能力
- 解决方案:使用 3-5 个涵盖不同领域的基准测试
6. 缺少安全性评估
- 生产环境中的大模型可能生成有害内容
- 解决方案:在评估流水线中加入毒性、偏见和幻觉检查