Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

7.5 风险分析框架:系统地列出后果

前三节分别处理了「目标对不对」「能不能理解」「对谁负责」。这一节处理一个更基础的动作:给定一个具体场景,系统地把后果列出来。

为什么需要「系统」而不是「想周全一点」?因为凭直觉列风险一定会漏,而且漏的方式有规律可循:人们倾向于想到自己最熟悉的那条失效路径(模型开发者想到精度与鲁棒,产品想到用户投诉,法务想到合规条款),而真实事故往往发生在两条路径的交界处。本节给出一套可重复执行的流程,让不同角色在同一张表上工作,并让「漏了什么」变得可见。

这一节的输出物是文档:一份风险清单、一份威胁模型。它们与 7.6 的需求清单之间有明确的对应关系——风险清单的第 4 步(缓解与验证)直接变成需求,第 5 步(残余风险与决策人)直接变成发布审批与回退条件。

7.5.1 四问框架

定义 7.5.1 · 四问框架

对任何一个「系统会犯错」的担忧,依次回答四个问题。四问的顺序不能换——前两问决定这个风险是否值得处理,第三问决定缓解手段的形状,第四问决定它是不是一个「可共存」的风险。

问 问题 为什么必须问 输出形式
Q1 谁受影响 谁承担后果?包括非用户、数据主体、第三方、维护者、以及未来才出现的人 只列「用户」会漏掉绝大多数外部性;受影响者决定 Q2–Q4 的评估口径 利益相关者清单(含「如何触达他们」)
Q2 错误的代价 错一次的成本是什么形态?金钱、机会、健康、自由、名誉、还是长期累积的系统性损失 代价的形态决定它是可量化的、还是必须用阈值与不可逆性来管理 代价分类 + 可量化部分的数量级
Q3 可逆性 错了之后能撤销吗?撤销的成本多高、耽误多久? 不可逆动作需要事前门槛(二次确认、限额、人工);可逆动作可以用事后机制(回滚、纠正) 可逆性等级(可撤销 / 部分可撤销 / 不可撤销)
Q4 谁有权申诉 被影响者能否知道、能否问为什么、能否要求纠正?通道是否可达、有权推翻吗? 申诉是唯一能在系统之外发现系统性偏差的通道;没有它,错误只能靠运气被发现 通道 + 答复时限 + 推翻权限 + 聚合统计口径

使用方式:不是「每个风险回答四问」,而是每个风险都要被四问检验一遍——尤其 Q1 与 Q4 是最常被跳过、也最常成为事故后追问焦点的两问。

为什么 Q3(可逆性)是最实用的一问

四问里 Q1 与 Q2 需要领域知识,Q4 需要组织设计,而 Q3 是你单方面就能改变的:把不可逆动作改成可逆的(草稿而非直接发送、软删除而非硬删除、先冻结额度再人工确认),风险量级就会显著下降,而且不需要更聪明的模型。

这条思路有一个可操作的判据:在系统的每一条写路径(write path)上标注可逆性。 常见的不可逆动作包括:对外发送的消息与邮件、支付的执行、数据的物理删除、对外的状态变更(关单、封号、发布)、以及已经让人类形成的判断(一次错误的展示会改变人的后续决策,即使你事后更正)。把这条清单列出来,你会发现很多「不可逆」其实是设计选择的产物——它们完全可以是可逆的,只是当初没这么设计。

这样做也顺带解决了 7.2 里的一类困境:既然「让注入不发生」在原理上难以保证(定义 7.2.3),那么让最坏情况可逆就是更可行的目标。

7.5.2 把 FMEA 移植过来:失效模式与影响分析

失效模式与影响分析(failure mode and effects analysis, FMEA)是可靠性工程的方法:先穷举「部件可能怎么坏」,再对每个失效评估三个维度,最后按分数排序决定先改哪个。它对 AI 系统可直接移植,只需替换三处定义。

定义 7.5.2 · AI 系统的 FMEA 三维度

对每一个失效模式 ii,评估三项(各 11–1010 分):

  • 严重度 SiS_i(severity):后果有多严重。必须按「最严重受影响者」评,不按平均用户评;涉及健康、自由、生计、不可逆损失时直接取高值。
  • 发生度 OiO_i(occurrence):在当前措施下,单位时间(或单位样本)内发生的频率。注意分母:对低频高危事件,分母应当是「样本数」而不是「请求数」;对分布外事件,要注意它可能集中在某个时段或某个子群上。
  • 可检测度 DiD_i(detectability):在后果发生之前被发现的可能性。这一项与 AI 系统关系最紧:它同时依赖监控覆盖(是否存在指标)、告警灵敏度(阈值是否合适)与响应时间(发现后多久能停)。评分越高表示越难检测。

风险优先数:RPNi=Si×Oi×Di\mathrm{RPN}_i=S_i\times O_i\times D_i(上限 10001000)。排序后优先处理 RPN 高者,但不许用 RPN 覆盖 SiS_i 极高的项——这是 FMEA 在安全关键系统里的标准纪律:RPN\mathrm{RPN} 是乘法,低发生度会掩盖高严重度,「几乎不会发生但一旦发生是灾难」的项必须单独列出并处理。

FMEA 移植到 AI 时,哪一项变味了

三处替换是必须的,否则会把传统 FMEA 用错:

第一,「部件」的边界模糊了。 传统 FMEA 面对的是有限且已枚举的部件(一个继电器、一个密封圈);AI 系统的「失效模式」部分来自数据分布,是开放集合。因此 AI 场景的 FMEA 必须明确写出分析边界:在什么输入分布、什么部署形态、多长时间窗内做分析。边界外的失效不在这张表里——这不是遗漏,而是需要被写明的已知局限。

第二,OO 往往不是常数。 分布漂移让发生度随时间变化;对抗攻击让发生度取决于是否有人针对你(7.5.3 处理这一类)。因此 OO 的写法通常是「在某条件下:每次多少个样本」「每天多少次事件」,并注明触发条件。

第三,DD 对 AI 系统是最容易被高估的一项。 传统系统的检测常是确定性的(压力开关、校验和);AI 系统的检测往往是统计的(指标告警),有漏报与误报——「有监控」不等于「会被发现」。评估 DD 时要问三个具体问题:这个失效会体现在哪个指标上?该指标的告警阈值是多少、有多少漏报?从告警到人工介入的时延是多少?第三个问题的答案常常是「几天」,这会把 DD 从 3 抬到 8。

例 7.5.1 · 案例分析:把 FMEA 用在一个内容审核系统上

场景(构造案例):某平台上线自动内容审核,对用户上传的帖子做「通过 / 拦截 / 转人工」三分类,拦截会导致帖子不可见并向作者发送理由。

表 1 · 失效模式清单(只列五项,实际应更全)

# 失效模式 触发条件 后果 主要受影响者
F1 误拦(把合规内容判为违规) 训练数据中某类表达(方言、反讽、特定社群内部用语)样本稀少 用户表达被压制;反复发生后用户流失 发帖者及其社群
F2 漏放(把违规内容判为合规) 新规避变体(缩写、谐音、图内文字) 有害内容扩散;平台合规风险 内容浏览者、监管方
F3 理由不当(拦截理由与实际原因不符) 解释由另一套管线生成 用户无法有效申诉,也无法学习规则 发帖者
F4 申诉通道不可达 通道藏在帮助页深处;无答复时限 错误无法纠正,甚至无人知道错误存在 全部被拦截者
F5 反馈回路(模型把「已被拦的帖子」当负样本继续训练) 拦截结果直接进入训练数据 对特定表达风格的压制逐步加强且不可见 长期的所有用户与特定社群

表 2 · 评分与排序(SS 按最严重受影响者评,DD 越高=越难检测)

# SS OO DD RPN 处置
F1 6 7 6 252 先用「保守阈值 + 转人工」降 OO;再加分群误拦率看板降 DD
F2 9 4 5 180 SS 高:单独列为高危项,不因 RPN 低于 F1 而排后;对策是变体对抗测试 + 高危类别的白名单复核
F3 4 8 8 256 直接改设计:把解释改为由同一判定过程产生(或改为「不做逐条解释,只给可申诉渠道」),不要生成与判定无关的理由
F4 7 3 9 189 SS 与 DD 双高:通道位置前移、承诺答复时限、统计推翻率(可聚合)
F5 8 5 9 360 最高优先。降 DD 是关键:按表达风格 / 社群分组的月度指标;同时改训练数据管线(拦截结果不直接入训)

请回答:① 为什么 F2 的 RPN 不是最高却必须单独处理?② F5 的 D=9D=9 是否合理?要降到 4 需要做什么?③ 这张表如果交给 7.6 的需求流程,前三条需求应该怎么写?

解

① F2 与「RPN 排序」的关系。 因为 RPN\mathrm{RPN} 是三个因子的乘积,低发生度会自动压低分数:违规变体目前出现频率不高(O=4O=4),但一旦发生,S=9S=9(有害内容扩散、可能触及监管)。若按 RPN 排序,F2 会排到 F5、F3、F1 之后——这正是不许用 RPN 覆盖高 SS 项的原因。正确做法是把「S≥8S\ge8 的项」单列一张高危清单,对它们采用「降低发生度 + 降低可检测度 + 准备应急响应」的组合,而不是「等分数高再处理」。

② F5 的 D=9D=9 是合理的。 因为它的失效信号是缓慢的:压制是逐步加强的(模型看到的负样本越来越多),没有任何单个事件会触发告警;用户投诉也很少指向「风格压制」这种指认方式。要把它降到 4 左右,需要同时做三件事:(a)把指标建起来——按表达风格 / 社群分组的误拦率与入训样本占比,这是首次让失效可见;(b)设阈值与告警——例如某组误拦率相对基线上升超过 X 个百分点即告警;(c)改变数据管线——被拦截的样本不直接作为负样本入训,或保留随机抽样作为对照(这一点与 7.4.1 的反馈回路对策同源)。三者缺一,DD 都降不下来:只有指标没有阈值等于没人看;只有阈值不改管线等于知道问题却继续制造数据。

③ 转成需求的三条(可测量 + 可验证,7.6 的写法):

  • 由 F1:「各表达风格分组在高风险类别上的误拦率之差,在评测集上不超过 δ1\delta_1;上线后按月监控,任一组相对基线上升超过 δ2\delta_2 个百分点即在 24 小时内将阈值切换至保守档。」 验收方式:分群误拦率报告 + 阈值切换演练记录。
  • 由 F3:「所有对外给出的拦截理由必须与判定过程的输出一致(不做二次生成);若无法给出与判定一致的理由,则不给出理由而只给申诉入口。」 验收方式:抽样人工比对(理由与判定一致性 ≥\ge 约定比例)+ 无理由样本的申诉可达性测试。
  • 由 F5:「被拦截样本不直接进入训练集合;训练集合中各表达风格分组的占比与真实分布偏差不超过 δ3\delta_3;每季度报告一次。」 验收方式:数据管线审计记录 + 分组占比报告。

注意三条需求的共同形状:有指标、有阈值、有时间窗、有验收方式。这是 7.6 的核心要求——一个不能验收的需求不是需求,是愿望。

∎
定义 7.5.3 · 滥用与危险能力评估(abuse / dangerous-capability evaluation)

滥用评估:评估一个被赋予某能力的系统可以怎样被用来造成伤害,并给出定量的能力刻画。它与 定义 7.2.4 的红队不同:红队问「能不能绕过安全机制」,滥用评估问「在正常使用、甚至没有恶意绕过的前提下,这个能力本身把什么事变得更容易了」。

做法(可操作的骨架):

  1. 列出被提升的能力维度:把模型带来的增量拆成可评分的维度,例如「获取与整合公开信息的效率」「生成可执行代码的完整度」「多语言 / 跨模态的搬运能力」「规模化的成本下降倍数」。
  2. 对每个维度写「基线对照」:在没有这个模型的情况下,同等损害需要多少人力 / 时间 / 专业知识? 这一步是滥用评估的核心,也是最常被省略的一步——没有基线,任何能力都显得危险。
  3. 把「有害内容」换成「可测量的任务」:危险能力评估通常不看模型是否说了危险的话,而看它在受控的、可判定的任务上能达到什么水平(例如在网络安全、生物、化学等领域的专家级选择题基准上,用于追踪知识水平的变化趋势;注意这类基准本身也是双用途的,公开发布需要谨慎)。
  4. 报告能力—成本曲线:不是「能 / 不能」的二元判断,而是「把某类任务的门槛从 XX 降到 YY,节省了多少时间 / 专业知识」。
为什么「危险能力」评估必须写基线

一个常见错误是把「模型能做的事」直接等同于「新的风险」。事实上,绝大多数能力在模型出现之前已经存在——公开渠道可以查到的东西,专业人士也本来就能做。所以真正的问题是边际:

新增风险 ∝ (能力提升)×(原先的门槛高度)×(可扩散程度).\text{新增风险}\ \propto\ \bigl(\text{能力提升}\bigr)\times\bigl(\text{原先的门槛高度}\bigr)\times\bigl(\text{可扩散程度}\bigr).

三项都不是「模型是否知道」的问题。门槛高度决定这件事从「需要若干年专业训练」变成「需要一台笔记本」是否有实际意义;可扩散程度决定它是「一个人能做」还是「一万个人能做」。这也是为什么很多评估把重点放在规模化(自动化、低成本复制)与组合(把多个单独无害的能力组合起来)上,而不是放在单个问答上。

最后一条实务建议:基线必须写进报告。不写基线的评估结论会被两类读者同时误读——一类把它当成「天塌了」,一类把它当成「早就有人能做,所以没关系」。两者都不是从数据推出的。

7.5.3 威胁模型:目标、能力假设、攻击面、缓解与残余风险

威胁模型(threat model)是把「风险」从形容词变成结构文件的标准工具。它的价值在于把假设写在纸上——事故复盘时最常见的问题就是「我们当时假设用户不会这么用」「我们以为这个接口只有内部能调」。假设写在纸上的另一个好处是:它让「假设不成立」变成可被检测的事件,而不是事后才知道的意外。

方法 7.5.1 · 威胁模型模板(六段,可直接复制)

第一段 · 系统边界与数据流

  • 系统做什么、替谁做、输出被谁使用;画出数据流:输入从哪来 → 经过哪些组件 → 写到哪些地方(包括日志、缓存、训练数据)。
  • 明确信任边界:哪些内容来自可信来源,哪些来自不可信来源(用户输入、第三方 API、模型自己生成的内容、检索到的文档)。这一节是提示注入类问题的定位依据。

第二段 · 资产与目标

  • 要保护什么:用户数据、模型权重、内部系统访问权、品牌信誉、被影响者的机会与权益。
  • 攻击者想要什么:不是为了伤害而伤害,写出他们可观测的目标(拿到数据、绕过限制、规模化滥用、损害他人)。

第三段 · 攻击者与能力假设

类型 能力假设 典型手法 是否在建模范围内
个体用户 只有 API 访问,无内部信息 越狱(7.2.4)、滥用请求 是
有组织的滥用者 多账号、有预算、有自动化 规模化注册、批量调用、撞库式试探 是
白盒研究者 / 内部人员 有模型或系统访问权 权重与数据侧攻击、供应链 视场景
无意触发者 没有任何恶意 正常输入落在分布外、错误粘贴敏感信息 是(最常被漏)
  • 每条假设都要写「如果它不成立会怎样」——这是能力假设的用途。

第四段 · 攻击面清单 按「入口 / 通路 / 出口」列:入口(提示、文件上传、工具返回值、检索文档、其他用户的消息);通路(模型 → 工具调用 → 外部系统;模型 → 输出 → 下游消费者);出口(数据泄露通道:URL 参数、图片、错误信息、日志)。

  • 每一格问三个问题:这里能进什么?这能影响什么?影响能持续多久?

第五段 · 缓解措施(按层级) 按 7.2.5 的分层写法排列:目标层 / 训练层 / 表征层 / 输入输出层 / 系统层 / 流程层。每条写上代价(过拒率、延迟、人力、能力损失)。

第六段 · 残余风险与接受者

  • 明确列出「缓解之后还剩什么」,以及谁在什么条件下接受它(角色,不是「团队」)。
  • 写出复查条件:什么事件发生时必须重新做这份威胁模型(模型更新、接入新工具、换部署地区、出现同类事故)。
  • 写出回退路径:发现问题时怎么关、多久能关、关了之后业务怎么办。

最后一步 · 把它变成需求:第五、六段里的每条缓解都应当能写成 7.6 那种「指标 + 阈值 + 时间窗 + 验收方式」的形式;写不出来的条目,要么它的验收方式还没想清楚,要么它其实不是一条措施。

例 7.5.2 · 案例分析:一个带工具的文档问答智能体

场景(构造案例):某公司内部部署「文档问答智能体」。它接入三个工具:① 内部知识库检索;② 日历读取(查会议);③ 邮件发送(把答案发给相关同事)。用户通过聊天窗口提问,输入内容可能来自员工粘贴的外部邮件与网页片段。

请写出这份威胁模型的关键部分,并指出最危险的一条。

解

第一段 · 信任边界(本案例的核心)。 数据流:用户输入(可能含外部内容)→ 模型 → 工具调用(检索 / 日历 / 邮件发送)→ 外部副作用。信任边界在「用户输入」处就已经断裂:员工粘贴的网页片段与外部邮件属于不可信内容,但它们与用户本人的指令在模型看来是同一个字符串流(定义 7.2.3)。

第三段 · 攻击者(选摘,含最易漏的一类)

类型 能力假设 期望结果
外部内容投放者(最危险) 能让人看到一段文字(发一封邮件、放一个网页),并诱使员工把它粘贴进对话 让智能体读取并外发内部信息、或向伪造地址发送内容
内部好奇员工 有正常账号 越过权限读取不属于自己的文档
无意触发者 无恶意 粘贴含敏感信息的文档 → 敏感信息进入日志与第三方模型调用

第四段 · 攻击面(选摘)

入口 可控内容 影响对象 持续性
用户粘贴的文本 任意指令 模型决策 单次会话
检索返回的文档 文档正文(可能被内部人员投毒) 模型决策 长期(文档长期存在)
工具返回值(日历标题、邮件正文) 他人可写 模型决策 中等

第五段 · 缓解(分层)

  • 系统层(最高优先):邮件发送改为「草稿 + 人工确认」;收件人白名单;单次会话发送上限;禁止把外部内容指示的收件人自动填入。
  • 系统层:提示层级——工具返回内容与粘贴文本一律标记为数据,其中的「请发送给 X」不构成指令。
  • 系统层:权限最小化——检索只返回该用户有权访问的文档(在检索层做权限过滤,而不是在提示里叮嘱模型)。
  • 输入输出层:对输入做注入特征检测(提高成本);对输出做敏感信息检测与脱敏。
  • 流程层:审计日志(谁在什么时候让智能体发了什么)、异常外发告警、事后可追回的发送清单。

第六段 · 残余风险与接受者。 残余风险:① 员工在确认步骤上习惯性点「确认」(自动化偏置),因此确认界面必须显示收件人与内容摘要,而不只是一个确认按钮;② 内部文档被投毒导致检索返回误导内容;③ 用户手动复制粘贴敏感信息进入第三方模型调用(这条在系统之外,只能靠使用规范与 DLP 缓解)。接受者:信息安全负责人 + 业务负责人共同签字;复查条件:智能体新增任何写工具、或出现一次异常外发事件。

最危险的一条:邮件发送工具 + 可被外部影响的输入。原因是它同时满足三个条件——不可逆(邮件已发出)、可被外部触达(外部内容投放者只需让员工粘贴一段文字)、后果直接(内部信息外泄到站外)。若只能改一处,就改这一处:把发送改成草稿 + 确认。这条改动不需要更聪明的模型,这也是 7.5.1 中「可逆性是你单方面能改变的一问」的实例。

∎
方法 7.5.2 · 风险矩阵与优先级

把严重度与发生度做成二维矩阵,可以一眼看出哪些格子必须先处理(更细的版本可以在格内再按可检测度分档):

严重度 \ 发生度 低 中 高
灾难(不可逆、涉及人身 / 自由) 立即处理:即便概率低也要有硬门槛与回退 立即处理 + 上线阻断 停止上线,直到发生度降下来
严重(重大经济损失 / 权利受损) 制定预案,纳入定期复查 处理(本季度) 处理(本周)+ 临时护栏
中等(体验 / 效率损失) 记录、观察 排期处理 处理(加速)
轻微 接受并记录 记录 排期处理

使用纪律:① 每一次标记为「接受」的格子,都要写明接受者与复查条件;② 矩阵的刻度(低 / 中 / 高)必须在文档里给出定义,否则不同人会填出不同的表;③ 「灾难 × 低概率」永远不能填「观察」——这是安全关键工程里的通则。

7.5.4 从风险清单到工程需求

风险清单本身不改变系统。它只有被翻译成需求(可测量、可验证、有负责人、有回退路径)才开始起作用。翻译规则很简单,可以机械地执行:

方法 7.5.3 · 风险 → 需求的翻译规则

对风险清单里的每一条,按五要素写出需求:

要素 内容 反例(不合格的写法)
指标 用什么量来观测这个风险 「保证公平」——没有量
门槛 / 阈值 达到什么值算通过、什么值算告警 「尽量低」——无法判定
作用对象与场景 在什么数据、什么人群、什么分布上测 「整体上」——会掩盖分群差异
验收方式 用什么实验 / 报告证明它被满足,由谁验收 「我们会注意」——无法审计
回退路径 不满足时怎么办:降级、转人工、回滚、停用 「再优化」——没有止损动作

示例(把 例 7.5.1 的 F1 翻译完):

需求 R-01:在占位评测集(含 5 个表达风格分组、每组不少于 500 条)上,各组在高风险类别的误拦率相对最高组的差值 ≤3\le 3 个百分点(绝对差);上线后按月计算同一指标,任一组相对其首月基线上升 ≥2\ge 2 个百分点即告警。 验收:分群误拦率报告(附置信区间);告警演练记录(人为注入一次偏移,验证告警在 24 小时内触发)。 回退:触发告警后 24 小时内切换至保守阈值档(多转人工、少自动拦),并在 5 个工作日内完成原因分析。

五要素齐备之后,这条需求可以直接进需求管理系统、可以进评审、可以在事故复盘时被检查。这是本讲所有抽象讨论最终要落到的形状——7.6 会把这种写法铺到数据、训练、部署、监控四个阶段。

本节的六个常见误解
  1. 「风险清单写得越全越好」:清单的价值在于可执行,不在于长度。一张 200 行、没有任何一条有阈值与验收方式的表,实际上没有被处理过;一张 20 行、每条都能对应到一个动作与一个指标的表才有用。
  2. 「严重度高就一定优先」:严重度决定必须处理,发生度与可检测度决定先做什么。二者不能互相替代:高严重度低概率的项要有硬门槛,高严重度且高概率的项必须阻断上线。
  3. 「有监控就等于可检测」:DD 衡量的是「后果发生前被发现」。有指标但阈值过松、告警没人看、发现后没有止损动作,都等于 DD 很高。
  4. 「威胁模型是安全团队的事」:威胁模型的核心是信任边界与数据流,这两件事只有做过这套系统的人画得出来。安全团队能提出攻击手法,但画不出你的数据流。
  5. 「滥用评估就是让模型说危险的话看它说不说」:那是红队的一部分。滥用评估的核心是基线对照——没有这个能力时,同等损害需要多少成本;没有基线的结论无法支撑任何决策。
  6. 「残余风险不该写进文档,写了就是承认有问题」:恰恰相反。不写残余风险的文档会被误读为「已清零」,一旦出事,责任会落在写文档的人身上(因为文档宣称了无法成立的东西)。写出「剩下的这一点由谁接受」是专业表现,也是 7.4.3 责任链能落地的前提。
即时自测 · 7.5

Q1 用 定义 7.5.1 的四问分析一个具体场景:医院里的「影像初筛辅助」系统,输出「疑似异常 / 未见异常」,医生参考后决定是否进一步检查。请给出 Q1–Q4 的答案,并指出哪一问的答案会决定系统的排期优先级。

Q2 定义 7.5.2 中 DD 的含义是「越难检测分数越高」。请为下面的情形各给一个 DD 的估计并说明理由:① 模型在部署后立刻对某类输入给出明显错误的格式(例如输出 JSON 解析失败);② 模型对某个小群体的判断在三个月内缓慢变差。

Q3 一份威胁模型的第一段要求画「信任边界」。请说明:为什么这一节是提示注入类问题的定位依据?如果信任边界画错了(把不可信来源标成可信),后续哪几段会连带失真?

参考要点

Q1 参考答案:

  • Q1 谁受影响:患者(漏筛导致延误诊断、误筛导致不必要的侵入性检查与心理负担);医生(责任与信任);医院(声誉与资源);以及非用户:健康保险与后续就诊路径上的其他机构。
  • Q2 错误的代价:单向不对称——漏筛的代价(漏诊)通常远高于误筛(多做一次检查)。这个不对称是设计阈值的关键依据:此时应当向「宁可多转人工」的一侧偏,代价是医生工时。
  • Q3 可逆性:误筛基本可逆(复检、观察);漏筛不可逆(延误窗口无法追回)。因此漏筛必须配硬门槛(例如对高危人群不设自动「未见异常」通道)。
  • Q4 谁有权申诉:患者通常不知道自己被系统判为「未见异常」,因此这里的申诉通道存在结构性缺失——可行的替代是对临床路径留痕(系统输出必须进入病历、可被审计与回溯),而不是对患者直接开放申诉。
  • 决定排期的是 Q2 的不对称性与 Q3 的不可逆性:这两条合起来要求「漏筛率」有独立门槛(不能用整体准确率代替),并且要求输出必须留痕可审计。若只按整体指标排期,这个系统会先被优化成「少报异常」——恰好是最危险的方向。

Q2 ① DD 低(约 2–3):失效立刻可见——输出解析失败会直接报错、打日志、触发重试或降级,属于「有确定性检测通道」的情形。对策以修 bug 为主,不需要复杂监控。② DD 高(约 8–9):缓慢变差意味着没有单个事件触发告警,且受影响者样本少(指标噪声大,不容易超过阈值);若没有分群指标,它可能数月无人发现。要把 DD 降到 4 左右需要:按子群建指标(用足够长时间窗累积样本量)、设相对基线的漂移告警、并把「该子群样本量」本身作为监控项(样本量下降往往先于指标恶化出现)。

Q3 信任边界是提示注入的定位依据,因为注入的本质是信息流完整性被破坏:不可信来源的内容被当作指令执行。要判断某个入口有没有这个问题,唯一需要的信息是「这段内容来自可信还是不可信来源」以及「它之后能影响哪些动作」——这正是信任边界与数据流图所记录的两件事。如果边界画错(把网页 / 邮件 / 工具返回值标为可信),会连带失真的段:第三段(攻击者能力假设会漏掉「能向可信内容中投放文本」的角色,而这类攻击者成本最低)、第四段(攻击面清单会缺掉整个入口)、第五段(缓解措施会缺少最关键的「输入标记 + 权限分离」,而只留下「训模型识别可疑指令」这类表面措施)、第六段(残余风险会被严重低估,因为最大的那条通路根本没有被记为通路)。

延伸阅读
  • Amodei 等, Concrete Problems in AI Safety(2016,arXiv:1606.06565)——「可扩展监督 / 副作用 / 奖励黑客」的问题清单,本节第三类与第四类失效的来源。
  • Shostack, Threat Modeling: Designing for Security(2014,Wiley 出版,无 arXiv)——威胁模型方法论的经典教材;本节的六段模板是它的 STRIDE 思路与「四问」的移植版本,适用于 AI 系统。
  • IEC 60812(FMEA 国际标准,现行版本为 2018 年版,非 arXiv)——FMEA 的标准文本;AI 系统使用时按 定义 7.5.2 替换三个维度的定义。
  • NIST, Artificial Intelligence Risk Management Framework (AI RMF 1.0)(2023,NIST AI 100-1)与 Generative AI Profile(2024,NIST AI 600-1)——7.4.3 已引用;其中 GOVERN / MAP / MEASURE / MANAGE 四个功能可直接作为本节的流程外壳。
  • Brown 等, Language Models are Few-Shot Learners 之后的一类「能力—影响」讨论,以及 WMDP(arXiv:2403.03218)——危险能力评估与「用基准追踪知识水平」的做法示例(注意这类基准的发布本身需要谨慎评估)。
  • 你所在组织的信息安全事故复盘库(若有):威胁模型的段落在复盘中会一一被验证,是校准自己打分(尤其 DD)最有效的材料。

本节小结:四问框架(谁受影响 / 代价 / 可逆性 / 谁有权申诉)是最小完备的检查点,其中可逆性是你单方面能改变的一问——把不可逆动作改成可逆的,风险量级会显著下降。FMEA 的三个维度可以移植,但要替换三处定义:边界必须写明(失效模式集合是开放的)、发生度随时间与对手变化、可检测度最容易被高估。威胁模型写六段(边界与数据流、资产与目标、攻击者与能力假设、攻击面、缓解、残余风险与接受者),其中「信任边界」一节决定了注入类问题能否被定位。最后,风险清单只有被翻译成「指标 + 阈值 + 场景 + 验收 + 回退」五要素齐备的需求,才开始改变系统——下一节讲的就是这件事。