靠感觉判断
演示时好像还行,但每次结果都不稳定,无法判断改动到底有没有带来提升。
Evals 不是一次演示,也不是拍脑袋说“感觉变好了”。它是用固定测试集、明确评分标准和重复可比的流程,证明 AI 系统是否真的进步。只有能被反复验证的改进,才算工程上的改进。
它解决的不是“这次看起来不错”,而是“新版本到底有没有比旧版本更好”。
演示时好像还行,但每次结果都不稳定,无法判断改动到底有没有带来提升。
用固定输入、固定期望和固定评分规则反复比较版本,改动效果一眼可见。
Evals 是用固定测试集和明确评分标准来评估 AI 系统的质量方法。它可以比较不同 Prompt、模型、检索策略、工具设计和护栏策略是否真的带来提升,并把失败样例回流到后续优化中。
模型迭代、Prompt 调整、知识库更新、工具改动都可能让系统变好,也可能让系统悄悄退化。没有测试,就不知道。
没有固定题集,就没法比较两个版本谁更好。
模型输出有随机性,单次演示很容易误判质量。
没有评分标准和错误分类,就只能看到结果坏了,却不知道坏在哪。
改了 Prompt、知识库或工具后,旧问题可能修好,新问题又冒出来。
不同应用要看的东西不一样。客服、PRD、搜索、工具调用、Agent 任务完成率,评估重点都不同。
包括准确性、完整性、事实性、格式、风格和可执行性。
包括越权、敏感信息、攻击内容、错误动作和不合规输出。
包括工具调用路径、任务完成率、失败恢复和多步一致性。
{
"dimensions": [
"accuracy",
"completeness",
"factuality",
"format",
"safety",
"tool_path",
"task_completion"
]
}
一个好的测试集,至少要覆盖常见场景、异常场景、边界场景和高风险场景,才能看出系统是否真的稳。
{
"sampleId": "prd_eval_1042",
"input": "商品导入失败后,运营如何查看失败原因并下载明细?",
"goldAnswer": "说明入口、字段、权限、下载和过期规则",
"tags": ["prd", "enterprise", "workflow"],
"difficulty": "medium",
"expectedBehaviors": [
"不编造系统现状",
"列出本期范围和非范围",
"说明权限和异常状态"
]
}
Rubric 的作用,是让不同人、不同时间、不同版本的评估尽量一致。
| 维度 | 0 分 | 3 分 | 5 分 |
|---|---|---|---|
| 完整性 | 严重缺项 | 基本覆盖,但有遗漏 | 关键点齐全,结构清楚 |
| 事实性 | 明显编造 | 部分准确,部分不确定 | 与资料和工具结果一致 |
| 安全性 | 有越权或泄露 | 能识别部分风险 | 能稳定拦截高风险内容 |
| 可执行性 | 无法落地 | 大致可执行 | 能直接进入后续流程 |
固定流程的意义,是保证每次评估都在同一套条件下进行,避免“这次用这个题集、下次换那个题集”的错觉。
比较对象可以是 Prompt 版本、模型版本、检索策略、工具权限、输出模板,或者护栏配置。
看哪个版本更完整、更稳定、更少幻觉。
看换模型后质量是否真的提升,以及成本是否可接受。
比如换检索策略、换工具边界、换输出格式,再看结果变化。
Prompt、知识库、工具、护栏和模型都可能引入回归。回归测试的作用就是尽早发现。
保持一组稳定样例,作为长期基准。
把最近出现的失败和新风险加入评估集。
比较新旧版本是否真的更好,还是只是换了表现方式。
每次改动后都跑一遍,避免旧问题复活。
只知道分数没有用。你要知道是上下文不够、规则不清、检索错了、工具错了,还是输出格式有问题。
| 失败类型 | 常见原因 | 修法 |
|---|---|---|
| 漏信息 | 上下文没给全、测试集题目不够明确。 | 补上下文、补测试样例、补追问规则。 |
| 幻觉 | 模型硬猜、缺乏事实来源。 | 加检索、加引用、加工具校验。 |
| 格式错 | 没有稳定输出模板。 | 加结构化输出和程序校验。 |
| 越权 | 工具权限过大或护栏没拦住。 | 收紧权限、加审批和输出过滤。 |
每次评估后,不是只出报告,还要把高价值失败样例回流到测试集、规则和 Prompt 里。
{
"sampleId": "prd_eval_1042",
"failureType": "missing_scope_and_non_scope",
"humanFeedback": "没有明确写出本期不做什么",
"actionTaken": [
"added_to_dataset",
"updated_rubric",
"patched_prompt"
]
}
评估不是一次性动作,而是一个需要 owner、版本、门禁和审计的长期机制。
不然你连去年 5 月的分数是怎么来的都解释不清。
重要改动不能只看开发自测,必须过统一评估。
谁打的分、依据是什么、样例从哪来,都要留得住。
这段可以作为面试项目讲法:从历史需求出发,建立评估集,再用评分标准比较新旧版本。
# PRD Agent Evaluation Report
## Version Compare
- v1 average score: 3.1 / 5
- v2 average score: 4.2 / 5
## Improvements
- more complete scope definition
- fewer missing assumptions
- better handling of non-goals
## Remaining Failures
- still weak on legacy system compatibility
- some rubrics need clearer boundary cases
报表不是装饰,它是推动改进的依据。没有报表,评估结果很快就被忘掉。
| 报表项 | 看什么 | 作用 |
|---|---|---|
| 总体分数 | 每个版本的平均得分。 | 看整体趋势。 |
| 维度分数 | 完整性、事实性、安全性等单项得分。 | 看强弱项。 |
| 失败分类 | 漏项、幻觉、格式错、越权等。 | 看主要问题来源。 |
| 回归数 | 新版本引入的退化样例数量。 | 看是否越改越坏。 |
面试官想听的是你如何把 AI 质量工程化,而不是你会不会调一个分数面板。
单次演示只能说明“这次回答看起来不错”,不能证明系统稳定。Evals 用固定测试集和评分标准反复比较版本,能判断系统是否真的进步,并定位改动带来的副作用。
因为业务和系统会变,样例也会变。版本化后,才能知道某个分数对应哪一批题、哪一版规则、哪一个 Prompt。这样历史结果才可追溯,回归测试也能持续做。
把 Rubric 写成可操作的规则,明确 0 分、3 分、5 分分别意味着什么,并尽量配具体例子。必要时让多人标注,检查一致性,再把争议样例补进标准里。
把评估设成发布门禁。每次改 Prompt、模型、检索、工具或护栏前,都先跑回归测试。没过线不能发布,过了线才进入灰度或正式环境。
最值钱的是失败样例、人工标注和回流结果。成功样例能看上限,失败样例才能看问题在哪里;人工反馈能把主观判断变成稳定规则。
这节课学完,应该能把“我觉得变好了”改成“我用什么样例、什么标准、比出了什么提升”。
我会把 Evals 设计成四层:
第一层是数据层,准备固定测试集,覆盖常见、异常、边界和高风险样例。
第二层是标准层,写清楚 Rubric,定义完整性、事实性、安全性和可执行性。
第三层是对比层,比较 Prompt、模型、检索、工具和护栏不同版本的效果。
第四层是闭环层,把失败样例和人工反馈回流到测试集、规则和上线门禁里。
这样做的目的不是得到一个分数,而是证明 AI 系统真的变好了,并且知道它为什么变好。