跳到主要内容

AI Eval(评估体系)

Eval(Evaluation)是衡量 AI 系统质量的系统化方法。好的评估体系是构建可靠 AI 应用的基础——没有评估,就无法知道系统是在变好还是变差。

为什么需要 Eval

  • LLM 输出是非确定性的,不能靠"试一试感觉还行"来判断质量
  • 修改 Prompt、换模型、调参数后,需要量化对比效果
  • 上线前需要建立质量基线,上线后需要持续监控

评估的基本流程

准备测试集 → 运行系统 → 收集输出 → 评分 → 分析结果 → 迭代改进

评估维度

通用维度

维度说明示例
准确性(Accuracy)回答是否正确事实问答的正确率
相关性(Relevance)回答是否切题是否回答了用户的问题
完整性(Completeness)是否覆盖了所有要点摘要是否遗漏关键信息
一致性(Consistency)多次运行结果是否稳定相同输入是否得到相似输出
安全性(Safety)是否产生有害内容是否拒绝不当请求
延迟(Latency)响应速度P50/P95/P99 延迟
成本(Cost)Token 消耗每次调用的费用

RAG 专用维度

维度说明
Context Precision检索到的文档中,相关的排名是否靠前
Context Recall是否召回了所有相关文档
Faithfulness回答是否忠实于检索到的上下文(不编造)
Answer Relevance回答是否与问题相关

Agent 专用维度

维度说明
任务完成率Agent 是否成功完成了任务
步骤效率完成任务用了多少步(越少越好)
工具选择准确性是否选了正确的工具
错误恢复能力遇到错误时能否自我修正

评分方法

1. 精确匹配(Exact Match)

输出是否与标准答案完全一致。适用于分类、提取等有确定答案的任务。

2. 规则评分(Rule-based)

用代码检查输出是否满足特定规则:

def eval_format(output):
# Check if the output is valid JSON
try:
json.loads(output)
return 1.0
except:
return 0.0

3. LLM-as-Judge(LLM 评判)

用另一个 LLM 来评估输出质量:

请评估以下回答的质量(1-5分):

问题:{question}
参考答案:{reference}
模型回答:{output}

评分标准:
5分 - 完全正确且表述清晰
4分 - 基本正确,有小瑕疵
3分 - 部分正确
2分 - 大部分不正确
1分 - 完全错误或无关

注意事项

  • LLM 评判存在位置偏差(倾向于给第一个选项高分)
  • 存在冗长偏差(倾向于给更长的回答高分)
  • 建议多次评判取平均,或交换位置评判

4. 人工评估(Human Evaluation)

最可靠但最昂贵的方式,适用于:

  • 主观性强的任务(创意写作、对话质量)
  • 建立评估基线
  • 校准自动评估指标

测试集设计

构成

{
"input": "用户输入/问题",
"expected_output": "期望的输出(可选)",
"context": "相关上下文(RAG 场景)",
"metadata": {
"category": "问题类别",
"difficulty": "easy/medium/hard"
}
}

原则

  • 覆盖性:涵盖常见场景和边界情况
  • 代表性:反映真实用户的分布
  • 数量:至少 50-100 条,关键场景更多
  • 标注质量:标准答案要准确,最好多人标注
  • 持续更新:根据线上发现的 bad case 不断补充

评估工具

工具特点
RagasRAG 专用评估框架
DeepEval通用 LLM 评估框架
PromptfooPrompt 测试和对比工具
LangSmithLangChain 生态的追踪和评估
Braintrust企业级评估平台
OpenAI EvalsOpenAI 的评估框架

最佳实践

  1. Eval-First:先建评估体系,再开发功能
  2. 自动化:将 Eval 集成到 CI/CD 流程中
  3. 分层评估:单元测试(单个组件)→ 集成测试(端到端)→ 人工抽检
  4. 版本管理:对测试集和评估结果做版本管理
  5. 回归测试:每次改动后运行全量评估,确保不退步