toB 场景的两条硬约束——权限隔离与人机协同

T8-2模块 8 · 场景设计面试权重 更新于 2026-08-20

这篇学完你能回答什么

  1. 企业知识库里不同部门的权限隔离怎么做?为什么不能靠 prompt 让模型「不要透露」?
  2. 权限过滤放在检索前和检索后,差别有多大?
  3. 什么时候该转人工?转人工率高到什么程度说明方案有问题?

从一个真实故障讲起

一家两千人公司的内部知识库助手,上线两个月,风评很好。直到有一天,一个刚入职三个月的运营同事随口问了一句「我们公司调薪一般是什么节奏」,助手回了一段相当详细的答案,里面有职级带宽的区间。

那份文档是 HR 的,密级是「仅 HR 与总监以上」。

排查发现两个问题叠在一起。第一,权限过滤做在了生成之后——检索是全库检索,取回 top-10,然后在 prompt 里写了一句「以下文档中标记为受限的内容,不要向无权限用户透露」。第二,那次的 top-10 里有 7 篇是 HR 文档,模型在拼答案时把其中的数字揉进了一段看起来无害的概述里,输出中没有出现任何「受限」字样,后置的正则过滤也就没拦住。

修法很直接:把权限过滤前移到向量检索的元数据过滤里,检索阶段就只在这个人有权看的集合内召回。上线后又发现了第二个问题——运营同事问 HR 相关的问题,助手开始频繁地答「没有找到相关内容」,而其中有些内容他其实是有权看的:因为过滤后候选集变小,top-k 里塞进了大量弱相关文档,重排也救不回来。最后是把召回数从 10 提到 40、过滤后再重排到 8 才稳住。

这两个问题合起来就是这一篇要讲的第一条硬约束:权限不是一个可以挂在末端的过滤器,它是一条必须贯穿整条链路的不变量,而且它会反过来影响你的检索参数。


泄露的那段话里,没有一个「受限」字样
两千人公司的内网助手:全库检索取 top-10,权限只是 prompt 里的一句叮嘱

  1. 运营同事随口一问

    「我们公司调薪一般是什么节奏」

  2. 全库检索 top-10

    其中 7 篇是 HR 文档

  3. prompt 里叮嘱一句断点

    「标记为受限的内容不要透露」

  4. 数字被揉进概述

    「仅 HR 与总监以上」的职级带宽

  5. 后置正则没拦住

    输出里根本没出现「受限」两个字

过滤放在哪一层生成之后再拦前移到向量检索的元数据过滤
受限内容已经进过上下文你只拦得住输出,拦不住它知道
前移之后的新问题候选集变小,top-k 塞满弱相关召回 10 → 40,过滤后重排到 8
重排能不能救指望重排把对的排上来候选里压根没有,救不回来
修法只有一句:把过滤前移到向量检索的元数据过滤。但前移会缩小候选集,召回从 10 提到 40、过滤后重排到 8 才稳住 —— 安全和好用是同一次调参里的两个约束,很多团队做对了前移、忘了调参。

核心概念:先打比方,再给定义

比方:门禁不能装在出口

一栋楼把门禁装在大门口,和装在每个人离开时的出口处,安全性完全不同。装在出口,意味着人已经进去过、看过、记住了;你只能拦住他把东西带出去,拦不住他知道。

模型就是那个「已经看过」的人。只要受限内容进了上下文,你就已经失去了控制——因为项目的第一条冻结口径就是:模型无法可靠区分「指令」与「数据」,真正的防线在执行层与权限层,不在提示词里。

定义

  • 前置过滤(pre-filtering)——在检索发生之前,把候选集限定在当前身份可见的范围内。代价是召回候选变少、检索参数要重调。
  • 后置过滤(post-filtering)——先全量检索,再从结果里剔除无权限的。代价是受限内容已经进过上下文,且 top-k 会被高相关但无权限的文档占满,导致「有权限的内容反而召不回」。
  • 分级自治(graduated autonomy)——按操作的不可逆程度决定自动执行、先确认、还是只给建议。这是人机协同的骨架,不是「不确定就问人」这么随意的东西。
  • 转人工(escalation)——把会话连同上下文移交给人。注意它有两个独立的问题:什么时候转(触发条件)和转得干不干净(交接质量)。

装在出口的门禁,拦不住他已经知道
模型就是那个已经进去过的人 —— 受限内容一旦进上下文,控制权就丢了

门禁装在大门口

没权限的人根本进不来

代价是能走的门变少了,楼里的动线得重新排一遍

对应
前置过滤 · pre-filtering

检索发生之前就把候选集限定在可见范围

代价是召回候选变少、检索参数要重调

元数据过滤分区路由召回放大 3–5 倍
门禁装在出口处

只拦得住他把东西带出去

拦不住他已经进去过、看过、记住了

对应
后置过滤 · post-filtering

先全量检索,再从结果里剔除无权限的

受限内容已经进过上下文;top-k 被高相关但无权限的文档占满

已进上下文top-k 被占满有权限的召不回
「在 prompt 里怎么写才能保证它不泄露」是个前提就错的问题 —— 模型无法可靠区分「指令」与「数据」,真正的防线在检索层与执行层,不在提示词里。被这么问,正确反应是先把前提掀掉。

原理拆解

撤不回来的事,模型不能按最后一下
「模型不确定就转人工」是错的设计:置信度只是输入,主轴是操作的不可逆程度

  1. 查询、汇总自动执行,事后抽样
  2. 草稿、打标记自动执行 + 通知
  3. 工单状态、库存先确认,展示将要做什么
  4. 付款、发信、删数据必须人工签字 + 二次确认
撤得回来撤不回来
最后一下谁按模型自己人签字
确认在什么时候事后抽样事前展示将要做什么
置信度的位置触发信号之一再高也不替人签字

主轴之上再叠三个转人工的触发信号:置信度低(检索没命中、答案与证据不一致)、用户情绪或表述升级(重复提问、明确表达不满)、命中黑名单主题(法律、投诉、医疗、资金)。它们是触发条件,不是分级依据。

交接质量比触发时机更容易被忽略。合格的交接要带三样过去:用户的原始诉求(不是模型的复述)、已经尝试过什么、模型判断的不确定点。缺了这三样,用户得从头再说一遍,转人工反而变成负体验。

置信度再高也不能替不可逆操作签字:撤不回来的事,确认页要用自然语言写清「将要做什么」,而不是甩一屏原始参数。

一、权限的四个落点,缺一个就漏

原文示意
入库时  ── 检索时 ── 组装时 ── 输出时
打标签     前置过滤   二次校验   引用校验
  │          │          │          │
  │          │          │          └ 每条引用都要回查一次权限,防「引用了看不到的文档」
  │          │          └ 拼 prompt 前再校验一次,防缓存和并发带来的漂移
  │          └ 元数据过滤 / 分区路由,**必须在向量检索之前**
  └ 文档、分块都要带密级与归属,且分块继承文档权限

四个落点里,检索时的前置过滤是主防线,其余三个是纵深。只做主防线会漏并发和缓存场景,只做纵深等于没做。

二、三种隔离级别的取舍

级别 做法 解决什么 代价是什么 什么时候不该用
物理隔离 每租户 / 每密级一个独立索引或库 隔离最彻底,误配的爆炸半径最小 索引数量爆炸、跨域检索做不了、资源利用率低 租户多且小、需要跨部门检索时
逻辑隔离 单索引 + 元数据前置过滤 成本低、跨域检索容易 过滤条件写错就是全量泄露;过滤后候选变少要重调参数 强合规、审计要求物理边界时
混合 高密级物理隔离 + 其余逻辑隔离 把爆炸半径按密级分层 两套机制都要维护 团队小、维护不动两套时

多数企业场景的正确答案是混合,但答题时必须说清「哪一部分走物理、判据是什么」,否则等于没选。

三、权限是会变的——一致性才是真难点

这是分水岭最深的一层。权限不是静态的:人会调岗,文档会改密级,项目组会解散。三个必须处理的点:

  1. 索引里的权限标签是快照。文档改密级后,索引里的标签、已经切好的分块、以及缓存里的检索结果都要失效。很多系统栽在缓存上。
  2. 前缀缓存与语义缓存要按身份分桶。同一个问题,不同权限的人应该拿到不同答案;如果缓存键里没有身份维度,缓存本身就是泄露通道。这是语义缓存「正确性责任转移到你」这条口径在权限场景的具体形态。
  3. 权限变更要能追溯。审计要问的是「他在那个时间点有没有权限」,所以日志要记当时的判定依据,不能只记结果。

四、人机协同:按不可逆程度分级,不是按置信度

常见的错误设计是「模型不确定就转人工」。置信度只是一个输入,真正的主轴是操作的不可逆程度

原文示意
只读查询          → 自动执行,事后抽样
可逆写入(草稿、标记)→ 自动执行 + 通知
难逆写入(工单状态、库存)→ 先确认,展示将要做什么
不可逆(付款、发信、删数据)→ 必须人工签字,且要有二次确认

在这条主轴之上,再叠三个转人工的触发信号:置信度低(检索没命中、答案与证据不一致)、用户情绪或表述升级(重复提问、明确表达不满)、命中黑名单主题(法律、投诉、医疗、资金)。

转人工的交接质量比触发时机更容易被忽略。合格的交接要带三样东西过去:用户的原始诉求(不是模型的复述)、已经尝试过什么、以及模型判断的不确定点。缺了这三样,用户要从头再说一遍,转人工反而变成负体验。

五、转人工率是一个被低估的零成本信号

它不需要标注、不需要 judge,实时可得,而且方向明确

  • 转人工率突然升高 → 通常是检索侧或上游数据出了问题;
  • 转人工率长期偏高且稳定 → 说明覆盖面不够,该扩知识库或扩流程,不是该换模型;
  • 转人工率过低 → 反而是危险信号,说明兜底门槛设得太高,模型在硬答。

最后一条最容易被漏。评估一个 toB 助手,只看「答对率」不看「该转没转的比例」,是在奖励它硬答。


工程实践(截至 2026-08)

参数经验值

经验值
前置过滤后的召回数 过滤会显著缩小候选集,召回数要比无过滤时放大 3–5 倍再重排(例如 10 → 40,重排回 8)
缓存分桶 缓存键必须含身份或权限组维度;跨身份共享缓存等于开了泄露通道
引用校验 每条引用回查权限,命中不可见文档时整条答案降级为「无法回答」,而不是删掉那条引用
转人工率 稳态一般落在个位数到十几个百分点;长期低于 2% 要怀疑是不是在硬答
不可逆操作 一律人工签字,且确认页要展示「将要做什么」的自然语言摘要而不是原始参数

避坑清单

  1. 绝不用 prompt 做权限。「不要透露受限内容」这类写法在第一条冻结口径下就是无效的。
  2. 过滤必须前置,并且要重调召回参数——很多团队做对了前置、忘了调参,结果是「安全了但不好用」,然后被业务压回后置。
  3. 别忘了缓存。权限做得再好,一个不分桶的语义缓存就能全漏。
  4. 引用要回查。答案里给出用户看不到的文档链接,是最容易被安全评审抓到的低级错误。
  5. 分级自治按不可逆程度设计,置信度只是触发信号之一。
  6. 转人工要带上下文,否则用户体验比没有 AI 更差。
  7. 监控「该转没转」,不要只监控答对率。

过滤前置是主防线,另外三道是纵深
入库打标 → 检索前置过滤 → 组装二次校验 → 输出引用回查,四道各防一类

权限的四个落点
落点做什么主防线还是纵深
入库时 · 打标签文档、分块都要带密级与归属纵深 —— 分块继承文档权限,不是只给文档打标
检索时 · 前置过滤主防线元数据过滤 / 分区路由必须在向量检索之前;放到之后就成了后置过滤
组装时 · 二次校验拼 prompt 之前再校验一次纵深 —— 防缓存和并发带来的权限漂移
输出时 · 引用校验每条引用都回查一次权限纵深 —— 防「引用了看不到的文档」,安全评审最爱抓这条
隔离级别与参数经验值
隔离级别怎么选
多数企业是混合:高密级走物理隔离、其余逻辑隔离;答题必须说清哪部分走物理、判据是什么
前置过滤后的召回数
过滤会显著缩小候选集,召回数要比无过滤时放大 3–5 倍再重排(10 → 40,重排回 8)
缓存分桶
缓存键必须含身份或权限组维度;跨身份共享缓存等于开了一条泄露通道
引用校验
命中不可见文档时整条答案降级为「无法回答」,而不是把那条引用删掉了事
转人工率
稳态一般落在个位数到十几个百分点;长期低于 2% 要怀疑是不是在硬答
不可逆操作
一律人工签字,确认页展示「将要做什么」的自然语言摘要,而不是原始参数
两头都不能省:只做主防线会漏并发和缓存场景,只做纵深等于没做。权限做得再好,一个不分桶的语义缓存就能全漏 —— 缓存键里没有身份维度,缓存本身就是泄露通道。

面试视角

陷阱题的正确答法,是先说前提错了
权限按四落点 → 隔离级别 → 一致性三段讲,一致性那段才是拉开差距的地方

  1. 先掀掉前提被问「prompt 怎么写才不泄露」,第一反应是说这个前提错了
  2. 权限讲三段四个落点 → 三种隔离级别 → 一致性,缺一段就露怯
  3. 把一致性讲透调岗、改密级、索引与缓存失效 —— 多数人只讲到元数据过滤
  4. 人机协同讲四件不可逆主轴 + 三个触发信号 + 交接三要素 + 转人工率三种读法
  5. 主动交出转人工率把「该转没转的比例」摆上来,而不是只报一个答对率
只读过:这些回答会暴露你
  • 「在 prompt 里说明权限规则,让它不要透露」
  • 「加个元数据过滤就行」,不提候选集会因此变小
  • 只讲检索时过滤,说不出另外三个落点,也不提缓存
  • 「权限配好就完事了」,没有调岗和改密级这一层
  • 「模型不确定就转人工」,转人工只讲触发不讲交接
真做过:这些细节骗不了人
  • 知道模型不可靠区分指令与数据,防线在检索层与执行层
  • 知道前置过滤缩小候选集,召回要放大 3–5 倍再重排
  • 讲得出入库打标、组装二次校验、引用回查;缓存键含身份维度
  • 讲得出调岗、改密级、索引与缓存失效的一致性问题
  • 主轴是不可逆程度;交接带三要素,且知道转人工率过低更危险
只看答对率不看「该转没转」,就是在奖励它硬答。转人工率不用标注、不用 judge、实时可得:突然升高多半是检索侧或上游数据坏了,长期偏高说明该扩知识库或扩流程而不是换模型。配套题目:Q8-02Q8-03Q3-19

面试官会怎么问

toB 场景题里,权限和转人工是必然会被追到的两点,而且往往以「陷阱式」提问出现:「你在 prompt 里怎么写才能保证它不泄露?」——正确反应不是回答怎么写,而是指出这个问题的前提就是错的

答题结构建议

权限部分按「四个落点 + 三种隔离级别 + 一致性」三段讲,其中一致性那段是拉开差距的地方——大多数人只讲到「元数据过滤」。人机协同部分按「不可逆程度主轴 + 三个触发信号 + 交接三要素 + 转人工率的三种读法」讲。

分水岭信号

只读过 真做过
「在 prompt 里说明权限规则」 知道模型不可靠区分指令与数据,防线在检索与执行层
「加个元数据过滤就行」 知道前置过滤会缩小候选集,召回数要放大 3–5 倍再重排
只讲检索时过滤 讲得出入库打标、组装二次校验、引用回查四个落点
不提缓存 知道缓存键必须含身份维度,否则缓存就是泄露通道
「权限配好就完事了」 讲得出调岗、改密级、索引与缓存失效的一致性问题
「模型不确定就转人工」 主轴是不可逆程度,置信度只是触发信号之一
转人工只讲触发 讲得出交接三要素,知道交接差会让体验比没 AI 更糟
只看答对率 把转人工率当零成本信号,并且知道过低是危险信号

小结与延伸

收口三句:

  1. 权限是贯穿链路的不变量,不是末端的过滤器。门禁不能装在出口。
  2. 前置过滤会改变检索的统计特性,安全和好用是同一次调参里的两个约束,不是两件事。
  3. 人机协同的主轴是不可逆程度,转人工率过低比过高更危险。

延伸:T8-1 是本章的答题通法,本篇是它在 toB 场景下必然撞到的两条硬约束;Q3-19(分级自治)给了不可逆操作的完整设计;Q6-07(语义缓存)解释了为什么缓存分桶是正确性责任问题而不是性能问题。

继续深入

本篇归属第 8 章「场景设计题」,去做这一章的题