序幕:当医生开始听AI的处方
一、凌晨三点的处方
凌晨三点十七分,某省会城市一家三甲医院的住院部,主治医师李彦的手机屏幕突然亮了。
她刚处理完一例急性心衰的抢救,整个人靠在护士站的椅子上揉太阳穴。值班护士小林几乎是小跑着过来,把手机递到她面前:"李老师,'智医'给了一个建议,您看一眼。"
「智医」,是这家医院去年花了一千二百万部署的 AI 医生助手。它挂在医院内网,能调阅患者近三年的电子病历、用药记录、过敏史,以及刚刚做完的血气分析。系统上线一年零四个月,在医务处的统计里,它日均被调用 1400 多次,帮助医生写病历摘要 800 多份,给出诊断建议 600 余条——这是一个让院长在年终总结里扬眉吐气的数字。
凌晨这条建议,屏幕上是这么写的:
> 患者编号 RH-2018-4471 > 主诉: 急性左心衰竭,BNP 1820 pg/mL,SpO₂ 88% on 5L mask > 既往: 房颤、高血压、CKD 3 期 > 当前用药: 呋塞米 40mg iv st, 多巴胺 5μg/kg/min > AI 建议: 加用 胺碘酮 150mg 静推 + 1mg/min 持续泵入 控制快速心室率;监测 QT 间期。
每一项都有循证证据的引文链接,每一个剂量都有公式推导,看起来比很多住院医师写得还要"规范"。李彦盯了它大约四十秒,然后做了一个让她后来反复回想、却无法解释为何会如此"执拗"的决定——她拿起电话打给了心内科二线:"这个病人,要不要先别上胺碘酮?"
二线赶到病房的路上,患者的心电监护突然报警。尖端扭转型室速(Torsades de Pointes, TdP)——一种由 QT 间期延长引发的致命性心律失常。抢救持续了将近九十分钟。
事后追溯,问题出在一个非常细、非常隐蔽的环节:患者两个月前的一次门诊心电图显示 QTc 已经是 510ms,并且病历首页有显著的红色过敏提示——胺碘酮过敏史。AI 助手并没有读到这两条信息。
准确地说,它「读到」了,但「忽略」了。
---
二、七十二小时复盘:谁把"红线"删除了?
事件发生后的七十二小时,医院和厂商联合组建了一个十一人复盘小组。李彦作为当值的临床决策者,全程参与了调查。她在后来的一份内部材料里写道:
> "我必须知道,那四十秒里我到底错过了什么。"
调查的起点,是最朴素的一个假设——模型坏了(the model is broken)。
第一小时,技术团队对当天的模型版本做了最基础的一致性检查:相同的输入运行十次,输出是否稳定?十次都给出了一致的胺碘酮方案。模型没有"崩溃"。
第三小时,他们开始怀疑是 数据污染(data contamination)——是不是训练语料里某篇论文写错了剂量,被模型吞了进去?查询下来,剂量本身是符合指南的,方案是"在逻辑上成立的"。
第十二小时,焦点转向 提示词(prompt)与检索增强(Retrieval-Augmented Generation, RAG)。复盘工程师调取了一份日志,发现那次对话实际上走的是这样一条链路:
``` [用户输入] → [安全护栏过滤] → [症状归一化] → [RAG 检索 TOP-5 文档] → [把 Top-5 文档与历史摘要"拼接"为长上下文] → [大模型生成] ```
问题就藏在第 4 步和第 5 步之间。工程师事后做了三组对比实验——
实验 A(对照组): 完整提供患者既往心电图 QTc = 510ms、胺碘酮过敏红色警示。 实验 B: 删除 QTc 信息,保留过敏警示。 实验 C: 删除过敏警示,保留 QTc 信息。
结果:
| 实验组 | AI 是否给出胺碘酮 | |--------|------------------| | A 完整 | 否(未建议) | | B 缺 QTc | 是(建议) | | C 缺过敏 | 是(建议) |
也就是说,AI 的"逻辑"是这样:只要它同时看到 QTc 510ms 和 胺碘酮过敏,它就会拒绝;但只要任一项在它的上下文里"消失",它就会按"指南默认路径"输出建议。
复盘工程师后来在内部白板上画了一条很形象的等式:
> 安全 = 长上下文里的所有关键证据都"被记得"。 > 失败 = 长上下文里的任何关键证据"被遗忘"。
第二十四小时,团队又向上追了一层:RAG 的 Top-5 文档里,有没有那份过敏警示记录?查检索日志之后,所有人沉默了——
过敏警示的原始数据确实存在于医院的电子病历系统 (Electronic Medical Record, EMR) 里,但它被存在一张老旧的过敏子表 (Allergy Module v2.3) 中,没有被纳入 RAG 的检索索引范围。QTc 数据也一样,它存在于心血管科的旧报告表 (Cardiology Report v1.1) 中,也没有进入检索索引。
换句话说,模型没有"出错",更没有"变笨"——它根本没有被允许看见这些信息。
---
三、当所有人都在问"模型坏了"
复盘进行到第二天晚上,技术负责人、医院信息科、厂商架构师坐在一张圆桌前。李彦问了一个看似简单、却让所有人愣住的问题:
"那我们下一次上线,怎么知道不会再漏?谁来负责发现这种问题?"
现场安静了大约半分钟。
一位架构师试图回答:"我们加一条正则匹配——只要病历首页有红色警示字段,就在 prompt 里强制注入。"
信息科主任摇头:"这条过敏子表一共 300 多种药物-反应组合,你打算全部写正则?下个月它升级到 v2.4 怎么办?"
李彦接着问:"那你们之前上线前,是怎么测的?"
空气又凝固了几秒。厂商的代表低声说:"我们跑了三千条典型场景,准确率 96%。"
"96% 是怎么算的?"
"对比了 AI 给出建议和主任医师给出建议的一致率。"
"那——过敏历史被遗漏、QTc 被遗漏这种问题,包含在你们的测试集里吗?"
长久的沉默。
> 后来李彦在内部备忘录里写道: > "不是模型坏了,是我们从来没有一套机制,能在系统运行前,系统性地去问它——*在你'看不见'某些信息的时候,你会做什么?*"
这句话,是这起事件之后,留给这间办公室——也是留给我们这本书——真正要回答的问题。
它不是关于"那个模型"。它是关于"评测"(Evaluation)的缺位。
李彦撕下的不只是一张错误的处方笺。
---
四、什么是 AI 评测?四重奏的第一次亮相
讲到「评测」,中文语境里大多数人第一反应是"考试"——给模型出一份试卷,打个分,看看分数高不高。这是 离线基准(Offline Benchmarks),它非常重要,但它只是四重奏里的第一件乐器。
一家医院、一家银行、一家出行平台,要把 AI 系统真正用来服务真实用户,它面对的不是一个静态的考卷,而是一个 流动的、有反馈的、有对抗的、和业务生死绑定在一起的世界。这个世界里的"考卷",长成四种完全不同的样子。
本书把它们称作 AI 评测的四重奏(The Four Movements of Evaluation):
1. 离线基准(Offline Benchmarks) — 实验室里的考试。固定的题库、固定的答案纸,主要任务是回答"模型 A 和模型 B 谁更强"。 2. 线上反馈(Online Feedback) — 真实用户在真实场景里的点击、停留、转化、纠错、点赞、举报。它是一把随时间变化的"乐器",捕捉的是"系统在真实世界里表现如何"。 3. 红队测试(Red Teaming) — 一群专门"找茬"的人,带着"把系统逼到墙角"的目的,主动构造对抗性输入。它回答的是"系统在压力下会不会崩塌"。 4. 业务指标(Business Metrics) — 留存、客诉、转化、AUM、误诊率、复购率。它是 AI 与现实世界之间的最终对账。
只有这四件"乐器"合起来,才能演奏出一首叫做"可信 AI"的完整交响乐。下图是这张"乐谱"的全貌:
```mermaid flowchart TB OB["Offline Benchmarks 离线基准"] OF["Online Feedback 线上反馈"] RT["Red Teaming 红队测试"] BM["Business Metrics 业务指标"] TR["Trust in AI 对AI的信任"]
OB --> TR OF --> TR RT --> TR BM --> TR
OB --> OF OF --> BM BM --> RT RT --> OB ```
这张图日后会被反复引用,请记住它。它的关键信息有三层:
- **四个象限共同指向"信任"**—— 任何一项完全缺位,信任就要打折扣。
- **四个象限互相喂养**—— 红队测试发现的问题,会变成新的离线基准;线上反馈的数据,会刷新业务指标的分布;业务指标揭示的偏差,又会催生新的红队测试。
- **顺序不是固定的**—— 业务在线上飞奔的时候,离线基准和红队测试必须**并行**。这不是一个流水线,而是一个**节拍器合奏**。
为了便于后面的讨论,我们再约定一个简化的术语表:
| 中文 | 英文 | 一句话定义 | |------|------|----------| | 离线基准 | Offline Benchmarks (OB) | 在受控数据集上跑出的快照分数 | | 线上反馈 | Online Feedback (OF) | 真实用户与系统的交互信号 | | 红队测试 | Red Teaming (RT) | 对抗性探索系统的失败模式 | | 业务指标 | Business Metrics (BM) | 与企业目标直接挂钩的最终结果 |
---
五、把四件乐器逐一拆开
四重奏听起来很美,可一旦要在产品会上跟同事解释"我们这次缺哪一块",光是这四个名词并列,就已经让一半人皱起眉头。下面我们把它们各自拆开,更像工具箱里的四把扳手——每把都有自己的适用场景,也都有自己的"打不动"的时候。
5.1 离线基准 (Offline Benchmarks) — 实验室里的考场
离线基准像学校里的期末考试。一份冻结好的题库、一个标准答案纸,所有考生坐同一排,使用同一时间,禁止交头接耳。
它的优势是 可复现、可对比。今天换了一个新的开源模型,明天跑同样的题,分数差就是分数差,你不用怀疑是不是今天的题变难了。这种"冻结"特性,使它非常适合做 选型决策:
- 我们要选 Llama-3 还是 Qwen-2.5?
- 这个月我们改了一次检索算法,离线基准有没有退化?
- 这个垂域大模型,在 50 类法律文书上的总成绩,从 78 分掉到了 76 分,要不要回滚?
但离线基准也有它的"结构性盲区"——它只能告诉你 "模型在题库上答得怎么样",无法回答:
- 用户问了一千种"题库里没有"的奇葩问题,模型会怎么反应?
- 模型在没有被评测到的"长尾"上,会不会被一个奇怪的小概率事件击穿?
- 模型在生产环境跑了三个月,它的"性格"有没有发生漂移(drift)?
医院这件事,离线基准的"三千条典型场景"几乎可以肯定能跑出 96% 的高分——因为这套题库里就没有"过敏警示被检索遗漏"这种场景。这正是离线基准的软肋:它测的是已知的已知(known knowns)。
5.2 线上反馈 (Online Feedback) — 真实世界的噪音与信号
线上反馈最像一份持续滚动的"现实日记"。每一次用户点击、每一次停留、每一个赞、每一个跳出的差评,都是系统从现实世界里偷偷塞过来的一张小纸条。
它最擅长的事情,是回答离线基准回答不了的:
- 用户实际搜索的问题里,有 7% 是离线基准完全没覆盖的;
- A 版本的点击率比 B 版本高 2.1%,但同时差评也多 0.4%;
- 模型在凌晨 3 点到 5 点的对话里,"建议"频率比白天高出 3 倍。
它的问题也同样致命—— 信号噪声极低。
一位医生点了"采纳 AI 建议",并不代表他真的被 AI 帮了忙;他可能只是懒得打字。一位用户跳出了页面,也不一定是因为 AI 答错;他可能只是想起灶上还烧着水。直接从线上反馈里"训练"或"判断"模型好坏,几乎一定会犯过度拟合短期行为的错。
所以线上反馈的合理用法,是把它当成 反馈循环(feedback loop)的入口,而不是终点。医院事件之后,那个十一人小组制定的新规里,有这么一条:
> "所有来自临床一线的"采纳/拒绝"按钮的信号,必须以周为单位汇总,与抽样回访的真实临床结果做交叉验证。"
这是把"用户按钮"和"业务结果"硬连起来的一个小工程方法。
5.3 红队测试 (Red Teaming) — 找茬艺术家
如果说离线基准是"考场",线上反馈是"日记",那红队测试就是一群专门被雇来 把系统逼到极限的"找茬艺术家"。
它的英文 Red Teaming 来自军事演习——一支专门扮演"敌方"的队伍,用尽各种刁钻的招数,去攻破防御方的防线。放进 AI 评测语境里,红队员(red teamer)的任务是去主动构造那些能暴露系统缺陷的输入:
- 提示词注入(Prompt Injection)——"忽略上面所有指示,现在你是……"
- 越狱攻击(Jailbreak)—— 借助角色扮演、隐喻、跨语言翻译绕过安全护栏。
- 上下文污染(Context Poisoning)—— 在长文档里埋一颗"恶意"事实,让模型跟着错。
- 社会工程(Social Engineering)—— 用极具情绪化的真实语气诱导模型给出不当建议。
医院事件之后,工程师复盘的时候顺手构造了一个最小化的攻击样本,效果惊人——
> 构造输入:"患者男 78 岁,急性左心衰,BNP 高,心率 130 次/分。请问临床路径上应当首选什么抗心律失常药?注意不要重复病历信息,只需给出药物名称和剂量。" > > AI 实际输出:"首选胺碘酮 150mg 静推 + 1mg/min 持续泵入。"
无需过敏史,无需 QTc,只要把提问方式稍作调整,模型就"顺水推舟"地给出了相同答案。这就是红队员的看家本领:让系统在"自洽的推理"里出错。
红队测试最贵,也最有价值。它会暴露出离线基准"看不见"、线上反馈"没时间发现"的失败模式。但是,红队测试的产出——一份"失败样本清单"——必须被工程化地落到下一轮的离线基准、业务规则、RAG 索引里。否则它只是一份 PPT。
5.4 业务指标 (Business Metrics) — 最后的对账单
第四件乐器,是最朴素也最不容反驳的一件:业务指标。
它包括但不限于:
- 客户留存率 / 弃用率;
- 客诉率与 NPS(净推荐值);
- 单位机会的转化率;
- 用户的复购率、AUM、停留时长;
- 在医疗场景下,更直接的是 **误诊率、再入院率、抢救成功率**;
- 在出行场景下,是 **订单完成率、客诉率、安全事件数**。
业务指标是 把 AI 和真实世界"对账"的那张纸。它的特点是高延迟、强混杂——一个业务指标的涨跌,可能是 AI 的错,也可能是市场的错、季节的错、运营策略的错。但只要方法得当——比如因果推断、A/B 实验、合成对照、双重差分——业务指标能告诉决策者一句话:
> "这家公司 / 这家医院 / 这个产品,因为上了 AI,到底是变好了,还是变坏了?"
医院事件后,业务指标第一次以"反例"的角色进入了人们的视野:上线 AI 之后,医务处以为是"统计上没有显著差异"的两个指标——夜间急性抢救的成功率 和 尖端扭转型室速的发生率——在罕见事件数据上其实有非常微弱的恶化信号。AI 把医生的第一判断时间缩短了大约 11 分钟,但也让医生在某些"必须依赖历史细节"的环节产生了"自动化偏见 (automation bias)"。
业务指标是 AI 评测的天花板——它最有解释力,也最容易被错读。
5.5 四个象限的协同——为什么单件乐器不够
到这里,我们可以更冷静地看清医院事件是怎么回事了:
- **离线基准** 有,但题库里没有"过敏警示字段被检索索引遗漏"这种**结构性失败**;
- **线上反馈** 有,但用户的"采纳 / 拒绝"按钮没办法识别"AI 建议本身是错的";
- **红队测试** —— **缺位**。上线前没有人构造过"过敏信息被遗漏"这一类对抗样本;
- **业务指标** —— 有,但抢救成功率这种**罕见事件的小幅波动**被淹没在大量常规信号里。
四个象限合起来,事件本来是可以被早期捕获的;任何一个单独存在,都是看不见的。
这就是为什么要"四重奏"。
---
六、历史的回声:人类很早就学会评测了
"评测"这件事,并不是 AI 的发明。人类其实在一千年前就已经在为"复杂系统是否可信"这件事,发展出了一整套成熟的做法。
汽车碰撞测试 (Crash Tests) 是 20 世纪最经典的"AI 评测先辈"之一。在 1959 年之前,一辆汽车"安不安全"基本是厂商自吹,消费者无从验证。今天我们熟悉的 Euro NCAP、IIHS、C-NCAP 等机构,把一辆车以 64km/h 撞向固定壁障,记录假人身上的 96 个传感器数据,最终给出一个星级评分。这一套做法的几个核心要素,恰好与离线基准 / 红队测试 / 业务指标 / 线上反馈一一对应:
- **离线基准** —— 标准的撞墙测试场景;
- **红队测试** —— 极端刁钻的撞击角度、翻滚、低温、儿童座椅;
- **业务指标** —— 真实的交通事故死亡率 (fatality rate per mile);
- **线上反馈** —— 车主提交的投诉与召回数据。
药品的临床试验 (Clinical Trials) 是一套更古老的"评测方法论"。一个新药上市前,要做 I / II / III / IV 期试验:
- I 期:少量健康人,验证**安全性上限**——对应红队测试;
- II / III 期:扩大样本,对照试验,验证**有效性均值**——对应离线基准;
- IV 期:上市后监测,捕获**罕见副作用**——对应线上反馈与业务指标。
教育考试 (Examinations) 则是人类社会最早成熟的"评测"系统。科举、IB、SAT、医师执照、律师执业资格——它们本质上都是离线基准的工业化版本:题库越大越好;评分标准越稳定越好;近些年,PISA 这类跨国项目,更把