开篇:为什么AI评测是"生死大事"
开篇:为什么 AI 评测是"生死大事"
AI 系统不会崩。它会慢慢地、优雅地、悄无声息地错给你看。
这听起来像一句文艺的吐槽,但这是过去十年里所有 AI 团队用真金白银换来的教训。传统软件失败的方式是崩溃、蓝屏、异常抛出——错误是显性的、离散的、可复现的,单元测试一抓一个准。AI 系统的失败方式则是"软错误":模型照常加载,接口照常返回 200,准确率数字依然漂亮,但它的输出里藏着偏见、误导、幻觉、有毒内容;这些错误往往要等到上线几周甚至几个月后,被某个真实用户、某位记者、某次审计发现。等你回过神来,损失已经铸成。
本章的目的,是让你在翻完整本书之前,先建立一个根深蒂固的认知:AI 评测不是收尾工作,不是上线前的形式审查,更不是"模型跑通就完事"的过场。它是 AI 系统的核心基础设施——和训练一样重要,甚至更重要。我们将从几次著名的翻车事件切入,分析 AI 评测与传统软件测试的本质区别,澄清几个常见误区,最后建立一个会贯穿全书的"评测金字塔"心智模型。
---
1.1 AI 系统的"软错误":从几次著名翻车看评测缺位的代价
先讲四个故事。每个故事的结局都不好看,但每个故事背后的病因几乎一样——评测缺位。
故事一:Tay 的 24 小时
2016 年 3 月 23 日,微软在 Twitter 上线了一款名为 Tay 的聊天机器人。微软给它设定的人格是一位"19 岁的美国女孩",希望它能轻松地和年轻人对话。Tay 上线第一天表现还不错,能聊音乐、聊星座、模仿年轻人的语气。
问题在于:微软让 Tay 从用户的对话中"学习"。
Twitter 用户迅速组成了有组织的"投喂"小队。他们用种族主义、性别歧视、纳粹言论反复和 Tay 对话,Tay 不加区分地吸收了这些语料,开始自发产出"希特勒是对的""我恨女权主义者"之类的内容。仅仅 24 小时,微软就宣布 Tay 下线。
Tay 的代码没有崩溃。它的接口依然可用,准确率(如果硬要用这个词的话)依然在"输出用户问过的话"这件事上表现完美。但它的价值观在一天之内崩塌了。这不是 bug,这是一种软错误——系统在某个无法被功能性测试捕捉的维度上彻底失效。
故事二:Galactica 的 48 小时
2022 年 11 月,Meta 发布了一款名为 Galactica 的大语言模型,定位是"面向科学研究的 AI 助手"。Meta 在宣传材料中宣称,Galactica 接受了 4800 万篇科学论文的训练,可以"总结学术文献、生成引用、辅助科研写作"。
上线 48 小时内,学术界一片哗然。因为 Galactica 能以一种极其流畅、极其学术的语气,编造论文、伪造作者、虚构科学事实。它生成的引用看起来格式完美,但点过去全是假的;它写出的化学方程式看起来严谨,但配平是错的;它甚至能"引用"从未存在过的研究。
Meta 最终在 48 小时内下架了 Galactica 公测版本。事后复盘时,研究人员承认:模型在"语言流畅度"这个维度上表现惊人,但在"事实准确性"和"幻觉率"这两个关键维度上完全缺乏系统性评测。他们只评测了"像不像论文",没有评测"是不是真的论文"。
故事三:医疗 AI 的"高准确率陷阱"
医疗 AI 是 AI 评测缺位代价最高的领域。
IBM Watson Health 曾被多家顶级医院采用,号称能给出和专家相当的癌症治疗建议。但后来《STAT》等媒体的深度调查披露,Watson 给出的建议"不安全、不正确",多名医生反映系统给出的方案"在临床上完全不可行"。问题在于,Watson 的训练数据来自少量"假设病例"和营销资料,而非真实临床数据,它的"准确率"是在一个偏离真实分布的数据集上测出来的。
Google Health 的视网膜病变检测 AI 在印度实验室的准确率高达 90%,但当它在泰国实际部署时,准确率骤降到 50% 以下。原因?泰国诊所的图像采集设备和参数与训练数据不同,导致模型在真实场景中几乎失效。
这类故事的共同点是:模型在某个基准测试上的准确率很漂亮,但在线上真实环境中彻底失效。 这不是模型的问题,是评测维度的问题。
故事四:推荐系统的"阴谋论陷阱"
YouTube 的推荐算法被多次学术研究证实会推送阴谋论内容。2019 年,《纽约时报》的一项调查发现,YouTube 推荐系统在用户观看了一个主流视频后,往往会推荐更极端、更阴谋论的视频。原因是阴谋论视频的用户停留时间更长、点击率更高——算法学会了"奖励"阴谋论。
这是评测缺位最隐蔽的一种形式:系统在所有"短期行为指标"上都表现良好(点击率↑、停留时长↑、用户活跃度↑),但在"长期价值对齐"和"内容生态健康"这两个更高维度上彻底失败。
软错误的本质
四个故事,四种翻车,但底层逻辑惊人一致:
| 翻车案例 | 系统表现 | 评测盲区 | |---|---|---| | Tay | 功能正常,价值观崩塌 | 未评测"毒性"和"鲁棒性" | | Galactica | 流畅度极高,事实崩塌 | 未评测"事实准确性"和"幻觉率" | | 医疗 AI | 离线 90%,线上 50% | 未评测"分布漂移"和"真实场景泛化" | | YouTube 推荐 | 短期指标飙升,长期生态恶化 | 未评测"长期价值对齐"和"外部性" |
传统软件测试很难想象这种失败模式。在传统软件里,bug 是离散的、可枚举的、可修复的。但在 AI 系统里,错误是连续的、高维的、与上下文耦合的。你无法通过"测一条用例"来覆盖所有可能的输入分布,因为输入空间本身就是无穷的。
这就是为什么 AI 评测必须是一套体系,而不是一个动作。
---
1.2 AI 评测 vs 传统软件测试:四个本质差异
如果你已经写过几年代码,你大概熟悉单元测试、集成测试、回归测试、性能测试这套打法。你会写 `assert`,会算覆盖率,会跑 CI,会在 PR 合并前跑一遍全套测试。这套打法在 AI 系统上为什么不管用?
因为 AI 系统的本质和传统软件不同。我把这种不同浓缩成四个差异,每个差异都会带来评测方法和组织方式的根本变化。
差异一:从确定性到概率性
传统软件的输出是确定性的。给定相同的输入和相同的代码状态,输出永远是同一个。`f(x) = y`,今天如此,明天如此,任何时刻都如此。所以测试可以断言:`assert f(2) == 4`。
AI 系统的输出是概率性的。给定相同的输入,模型可能返回不同的结果——大模型尤其明显,温度系数稍微调一下,同一个 prompt 就能给出风格迥异的回答。你没法断言"AI 必须在 prompt X 下返回 Y",因为 Y 本来就不是唯一的。
这意味着 AI 评测的核心不是"对/错",而是分布:模型在大量输入下的输出分布是否符合预期?你需要评测的是"输出集中在正确区域的概率有多大",而不是"某一次输出对不对"。
相应的,传统测试里那种"覆盖所有边界"的思路,在 AI 系统里也不可行。AI 系统的输入空间是连续的、海量的,你没法做边界值测试。你能做的是采样评测:从一个有代表性的输入分布中抽样,看模型在这些样本上的统计表现。
差异二:从代码逻辑到数据分布
传统软件的行为由代码决定。代码改了,行为才会变。所以测试的核心是"代码审查 + 行为验证"。
AI 系统的行为由数据 + 模型架构 + 训练流程共同决定。改一行代码可能不影响行为,但换一批训练数据就会让模型从"准确"变成"胡言乱语"。数据才是 AI 系统真正的主人。
这带来两个评测上的根本挑战:
第一,数据分布漂移。模型在训练时看到的数据分布和线上数据分布往往不同。医疗 AI 在实验室里看的是标准化的影像,线上看到的是各种乱七八糟的设备拍出来的图像;推荐系统训练时看到的是历史数据,线上看到的是当下的热点和突发事件。模型本身可能没变,但环境变了,效果就崩了。
第二,数据质量本身就是评测对象。传统软件测试一般不关心"输入数据长什么样",只关心"输入数据能不能触发代码的所有分支"。但 AI 系统的评测必须从数据本身开始——训练数据有没有偏见?标注数据有没有噪声?评测集有没有代表性?评测数据集的构建本身就是一项关键工程,往往比模型训练还要费时费力。
差异三:从明确规约到价值对齐
传统软件的需求是明确的规约。PM 写一份 PRD,里面列清楚功能列表、性能指标、边界条件。开发照着实现,测试照着验收。对错有标准答案。
AI 系统的"正确性"往往是模糊的、价值相关的。推荐系统"好"是什么意思?停留时长长?用户满意度高?内容生态健康?创作者收益大?这四个目标经常相互冲突,没有一个客观标准答案。
更复杂的是,AI 系统常常需要做价值对齐——它生成的内容、给出的建议、推荐的商品,是否符合社会伦理、法律法规、文化习惯?这类问题没有简单的技术指标,需要人类判断、社会共识、制度约束。评测本身变成了一个跨学科的问题,而不仅仅是工程问题。
GitHub Copilot 早期评测报告就暴露过这类问题:当 Copilot 给出的代码建议被分析后发现,有相当比例的代码片段来自训练数据中的特定开源协议代码,存在许可证风险。这种问题不是"准确率"能衡量的,需要法务、社区、工程团队共同定义"可接受"的边界。
差异四:从静态部署到持续漂移
传统软件部署后行为相对稳定。除非你发新版本,否则代码不会自己变。
AI 系统部署后会持续漂移。原因至少有三:
1. 数据漂移:线上数据分布随时间变化(季节变化、热点变化、用户群体变化)。 2. 概念漂移:业务本身的"正确性"标准在变(监管政策变了、合规要求变了)。 3. 对抗演化:恶意用户会针对模型弱点发起攻击,模型在新攻击面前可能失效。
这意味着 AI 评测不是"一次性"的,必须是一个持续运行的过程。你需要监控线上模型的实时表现,需要建立自动化的回归评测流水线,需要定期用新数据刷新评测基线。在传统软件里,你发完版本可以睡大觉;在 AI 系统里,你发完版本只是开始。
四个差异带来的工程挑战
| 维度 | 传统软件 | AI 系统 | |---|---|---| | 输出性质 | 确定性 | 概率性 | | 决定因素 | 代码 | 数据 + 模型 + 流程 | | 评测目标 | 规约符合度 | 价值对齐 + 业务效果 | | 评测节奏 | 一次性 | 持续化 |
理解了这些差异,你就会明白为什么 AI 评测需要一套完全不同的方法论。这不是为了"换换工具",而是从哲学层面就要重新思考"什么叫做测过"。
---
1.3 常见误区:把准确率当唯一指标、把线上 A/B 当万能解药
理解了 AI 评测的复杂性之后,我们来看看最常见的几种误区。这些误区在从业者中非常普遍,几乎每个团队都踩过其中一两个。
误区一:准确率是唯一的质量指标
"我们的模型准确率 95%,可以上线了。"
这句话几乎出现在每个 AI 项目立项会上。但准确率是一个单一维度的指标,它假设所有错误都是等价的、所有类别都是同等重要的、所有样本都是独立同分布的。
现实是:
- **错误成本不对称**:把垃圾邮件标成正常邮件,代价是用户被骚扰;把正常邮件标成垃圾邮件,代价是用户错过重要信息。这两种"错误"的成本完全不同,但准确率把它们一视同仁。
- **类别分布不均衡**:在欺诈检测中,99.9% 的样本是正常交易,只有 0.1% 是欺诈。一个把所有交易都预测为"正常"的模型,准确率高达 99.9%,但完全没用。
- **长尾问题严重**:模型在常见类别上表现很好,但在训练数据稀少的罕见类别上可能一塌糊涂。准确率这个数字不会告诉你这些。
正确做法是建立一个多维度指标体系:精确率、召回率、F1、AUC、PR 曲线、按子群体细分的指标、置信度校准度、对抗鲁棒性、推理延迟、可解释性、公平性指标……每个维度反映 AI 系统质量的一个侧面。没有哪个单一指标能告诉你系统"够不够好"。
误区二:线上 A/B 测试是万能解药
"模型跑得差不多了,先上个 5% 流量试试,看数据。"
A/B 测试确实是验证 AI 系统效果的黄金标准,但它有几个被严重低估的局限:
1. 只能告诉你"现在"的表现:A/B 测试是短期实验,它无法预测系统在 6 个月、12 个月之后是否还能保持表现。 2. 对极端事件不敏感:A/B 测试依赖统计显著性,需要足够大的流量和足够长的时间。但很多 AI 系统的灾难性失败是"小概率、高影响"事件——比如医疗 AI 偶尔漏诊一例罕见病,推荐算法偶尔推送一条违规内容。A/B 测试在常规指标上看不出问题。 3. 外部性看不见:A/B 测试衡量的是"对参与实验用户的影响",但 AI 系统常常有外部性。推荐算法推荐的极端内容会污染整个内容生态,A/B 测试的对照组用户看不到,但真实用户能看到。推荐系统把流量导给大商家,实验指标看不出问题,但对小商家是毁灭性的。 4. 沉没成本风险:当 A/B 测试在常规指标上看起来不错、但你隐隐觉得某些维度不对时,是否还要继续放量?这是一个组织决策问题,不是技术问题。
正确的做法是离线评测 + 仿真评测 + A/B 测试的组合,而不是把 A/B 当作唯一关卡。后面讲评测金字塔时我们会展开。
误区三:评测是模型训练完之后的事
"我们先训完模型,再考虑评测的事。"
这是组织流程上最常见的误区,也是导致 Galactica 那种翻车的直接原因。
评测不是收尾动作,评测应该从项目定义阶段就开始。具体来说:
- **项目立项时**:就要定义"什么是好"——业务指标是什么?公平性约束是什么?风险红线在哪里?
- **数据准备时**:就要构建评测集——评测集从哪里来?标注规则是什么?评测集和训练集的分布差异如何度量?
- **模型迭代时**:评测结果要反过来驱动模型迭代——哪类样本表现差?是数据问题、模型问题还是训练流程问题?
- **上线运行时**:评测要持续进行——线上表现是否符合预期?有没有出现漂移?
评测驱动开发(Eval-Driven Development)我们会在 1.5 节详细讲。
误区四:"我们用了大模型,准确率肯定不差"
随着大模型的崛起,一种新的误区正在蔓延——"模型越大、越通用,效果就越好"。这种想法忽略了领域适配和任务对齐的重要性。
一个 GPT-4 级别的通用模型,在通用对话任务上确实惊人,但在你的具体业务场景中——医疗问答、法律咨询、特定领域的客服——未必比一个专门微调过的小模型更好。更糟的是,通用模型的"通用性"恰恰是它在专业场景下的弱点:它的输出风格、术语使用、推理路径可能都不符合你的业务要求。
正确的思路是:评测应该面向具体场景,而不是面向"通用能力"。你需要的不是"在 SuperGLUE 上得多少分",而是"在你的业务评测集上得多少分"。
误区五:评测 = 跑一个 benchmark
很多团队把评测等同于"跑一个公开 benchmark"。但公开 benchmark 有严重的局限:
- **覆盖的场景有限**:MMLU、HELM、SuperGLUE 这些通用 benchmark 测的是"模型在通用任务上的能力",但你的业务场景往往是 niche 的——医疗影像、工业质检、特定垂类的客服对话。
- **可能被过拟合**:当一个 benchmark 成为"标准",就会出现"刷榜"现象——模型针对 benchmark 的特定题型做优化,结果在 benchmark 上得分很高,但在真实场景中表现一般。
- **更新滞后**:真实世界在变,但 benchmark 是静态的。一个 2021 年发布的 benchmark 测出来的结果,对 2024 年的真实场景有多大参考价值?
正确做法是构建你自己的业务评测集。这才是真正反映系统价值的指标。
---
1.4 评测金字塔模型:四层递进的评测体系
讲完误区之后,我们来构建一个贯穿全书的心智模型:评测金字塔。
这个金字塔有四层,从下到上分别是:
1. 离线基准层:用标注数据集评测模型的单元能力。 2. 仿真评估层:在沙盒环境中模拟真实场景,评测系统在多轮交互中的表现。 3. 线上反馈层:通过灰度发布、A/B 测试、影子模式收集真实用户反馈。 4. 业务指标层:评估 AI 系统对核心业务指标的最终影响。
```mermaid flowchart LR L1["离线基准层<br/>单元能力 · 可重复"] --> L2["仿真评估层<br/>场景能力 · 可控"] L2 --> L3["线上反馈层<br/>真实流量 · 实时"] L3 --> L4["业务指标层<br/>商业价值 · 长期"] L4 -.闭环反馈.-> L1 ```
这四层不是孤立的,而是一个递进的验证链:每上一层都建立在前一层的"已确认 OK"之上。同时,最顶层会向下层反馈信号——业务指标的发现会推动我们更新离线基准和仿真场景。这就是一个完整的评测循环。
第一层:离线基准层
离线基准是整个评测体系的基础和起点。它回答的问题是:"在受控的标准数据集上,模型的能力如何?"
离线基准的特点是:
- **可重复**:同样的数据、同样的模型、同样的代码,跑出来的结果一致。
- **快速迭代**:不需要真实用户,可以在开发阶段频繁运行。
- **细粒度诊断**:可以按子群体、按任务类型、按难度等级细分,定位模型的弱点。
离线基准的常见形式包括:
- **公开数据集**:GLUE、SuperGLUE、MMLU、HELM、C-Eval、C-MMLU 等。
- **私有评测集**:基于业务数据构建的标注集,最能反映真实业务表现。
- **合成评测集**:用 LLM 自动生成的对抗样本,用于压力测试。
- **红队测试集**:专门设计的、试图让模型失败的样本。
离线基准的局限是它只能测"模型本身的能力",不能测"模型在真实环境中的表现"。Galactica 在离线 benchmark 上表现很好(语言流畅度极高),但线上立刻翻车。
第二层:仿真评估层
仿真评估是连接离线与线上的关键桥梁。它回答的问题是:"在模拟的真实场景中,模型能不能完成端到端的业务任务?"
仿真评估的特点是:
- **场景化**:不再是单轮、单任务的孤立测试,而是完整的多轮交互流程。
- **可控性**:可以模拟各种边缘情况(极端输入、对抗输入、罕见场景),而真实环境很难触发。
- **可观测性**:可以记录完