一次隐私评审批准了你的脱敏层。姓名、邮箱、账号、电话——所有这些都在提示词送达模型之前被清理掉了。你的单轮分类器仍然能跑到 94% 的准确率。六周后,你的多步骤智能体开始对类似"Sarah 用于登录的邮箱和她账单记录里的邮箱是同一个吗?"这样的问题给出自信但错误的答案,而且没人能在开发环境里复现。
脱敏层做到了 infosec 团队要求它做到的一切。它同时也悄悄地摧毁了你的智能体推理所依赖的性质:在不同轮次中出现的两个实体指代是同一回事。这个智能体并没有产生幻觉,它读到的是一份转录文本,其中 Sarah 变成了三个不同的人,"同一个"邮箱地址变成了两个互不相同的占位符。
这就是隐私评审抓不到的失败模式,因为评审审计的是离开边界的内容,而不是边界保留下来的内容。占位符对审计者而言是不透明的——这正是它存在的意义——而对衡量智能体质量的团队同样不透明,他们看到一个回归却无法追踪,因为造成它的转换发生在他们保留的所有日志的上游。
脱敏保留了分类效用,却摧毁了推理效用
PII 占位符背后最初的直觉来自单轮任务。"将这条工单分类为账单/技术/其他"在 Sarah Chen 变成 [NAME_1] 之后依然能正常工作,因为分类器从来不需要知道她是 Sarah。这种替换在信息上有损,但这种损失对它要回答的问题无关紧要。
多步骤智能体在做一件不同性质的工作。它们在跨轮次追踪实体、对它们做比较、跨工具调用做连接、判断两个指称是否共指。一旦映射不稳定,分类器能容忍的占位符格式就会同时破坏上述三项操作。
三种常见的转换方式,三种不同的失败形态:
逐句随机 token (第 1 轮里 [NAME_4f9a],第 3 轮里同一个人变成 [NAME_7b2c])——共指被摧毁了。用户写了同一个名字两次,智能体却读到了两个陌生人。
按类型固定 token (每个人名都变成 [NAME])——共指被过度合并。智能体把"顾客和客服"读成了同一个人,因为两者都叫 [NAME]。
会话级稳定 token ([PERSON_47] 在一次对话内始终指代同一个人)——共指被保留了,但前提是上游的 token 化器在一开始就正确地解析了哪些跨度是共指的。如果"Sarah"和"陈女士"因为基于规则的提取器没把它们链接起来而拿到不同的 token,智能体就继承了这个链接错误。
隐私评审衡量的是 Sarah Chen 是否曾经越过边界。推理 bug 则存在于你选择了上述三种机制的哪一种、以及你的 token 化器对共指的判断是否正确。
infosec 视角和推理视角不是同一个评审
当安全团队批准一个脱敏层时,他们在问:PII 是否会到达模型供应商?它是否会落在我们无法控制的日志里?审计轨迹是否能证明合规?这些都是真实的问题,脱敏层对它们都给出了很好的回答。
推理团队问的则是一个安全评审表格里没有这一列的问题:脱敏之后,智能体还能不能正确回答涉及实体关系的问题?"这个用户以前联系过我们吗?""这是不是档案里那张支付方式?""开过之前那张工单的是不是同一个账户?"每一个都是身份连续性问题,答案取决于脱敏是否保留了两个跨度之间的相等关系。
这两个视角并不矛盾,但它们也不能互相替代。infosec 评审可以批准一个通过它自己的测试但同时以任何隐私指标都测不出的方式损害智能体的层。两个团队通常都不会发现,因为评估套件跑在真实数据上(脱敏之前),而生产跑在脱敏后的数据上——所以评估测量的根本就不是生产里那个系统。
让两个团队都保持诚实的几种模式
修复的办法不是在两种视角之间二选一,而是让它们通过一种两边都能审视的产物来对话。
会话级稳定的实体 token。 在一次对话或一次智能体运行内,同一个实体始终拿到同一个占位符。微软的 Presidio 通过确定性映射来支持这一点——同样的输入每次运行都得到同样的 token。类似 PII Shield 的隐私代理把 token 作用域绑到 context_id,让一致性贯穿整段转录文本。token 后缀按会话随机化,因此没有本地映射就无法反解,但它在会话内保持稳定,所以共指得以保留。这是最便宜的模式,也填上了大部分缺口。
结构化脱敏,保留类型和相等性。 不要把一切都替换成 [REDACTED],而是输出 [EMAIL_3] 和 [ACCOUNT_3],这样智能体仍然可以推理"属于 3 号人物的邮箱和属于 3 号人物的账户"。这种结构会泄露类型——对隐私来说通常没问题——但保留了智能体需要的关系图。
对智能体必须运算的字段使用保留格式加密。 当智能体需要做的不只是相等性推理——比如校验邮箱格式、核对账号校验位、按区号比较两个电话——不透明的占位符会把这些操作搞坏。保留格式加密产生的密文保留了原值的形态,所以智能体可以做格式校验和相等性连接,而不必看到底层的值。确定性加密保证相同的明文总是加密成相同的密文,这正是维持引用完整性的关键。
在工具边界解析占位符,而不是在推理之前。 一个常见错误是在提示词边界做脱敏,并且直到面向用户的响应才解析回来。这对分类没问题。对调用工具的智能体来说,脱敏层应当在工具调用内部(在推理步骤决定调用什么、用什么参数之后)把占位符解析回真实值,这样实际的副作用——发送邮件、退款、更新记录——使用的是真实数据,而推理完全发生在占位符之上。这个模式有时被称为"感知脱敏的工具层"或"延迟解析网关"。
专门面向脱敏输入的智能体任务评估套件。 大多数智能体评估套件都建立在真实数据上,从未见过脱敏层。结果就是你的评估认证的是一个你并不在生产中运行的系统。构建一个并行的评估,把生产里的脱敏层注入到评估管线,并衡量实体关系类问题:"给定两个指称,它们是否是同一个实体?""给定一段历史,这个人以前联系过我们吗?""给定一个工作流,操作是否落在了正确的账户上?"把这个分数和分类评估分开追踪,盯着它和未脱敏基线之间的差距。这个差距就是隐私层向智能体收取的代价。
为什么这种东西仍然会被发布 即便团队怀疑这个问题存在,仍然有三个原因让它们把破损版本发出去。
第一是隐私团队和智能体团队没有共享的评估。隐私团队衡量泄漏率。智能体团队衡量未脱敏开发数据上的任务成功率。没有谁的考核包含那个联合属性——脱敏数据上的任务成功率——而 bug 就完整地藏在这个联合属性里。
第二是失败模式分布不均。智能体做的很多任务并不需要共指(一次性分类、对单条消息的无状态回答)。这些在脱敏后照常工作,让所有人相信脱敏层没问题。失败只会出现在那些依赖身份连续性的多步骤流程里,而这些流程通常恰恰是价值最高的——因为它们才是真正做跨轮次推理的部分。于是脱敏层在大部分流量上看起来正确,却恰好在最重要的那部分流量上失效。
第三是修复的成本花在协调上,而不在代码上。稳定实体 token 本身在脱敏库里只是一处小改动。难的是重建生产脱敏管线,让一个会话 id 贯穿每一次调用;难的是重建评估套件,让它在脱敏输入上衡量智能体任务;难的是让隐私团队和智能体团队共享一个回归看板。没有哪一步需要新的研究。所有这些都需要两个平时不共同拥有同一份产物的团队开始共同拥有一份产物。
架构层面的领悟 "我们把 PII 屏蔽掉了"不是一个完整的隐私故事。它是一种转换选择,会改变智能体能做什么。一支团队在不衡量推理代价的前提下就把它发出去,并没有"无代价地"保护隐私——它把一种泄漏风险换成了一种正确性风险,而第二种风险从来没有被命名。
这种正确性风险与 2026 年发布的许多智能体失败有着相同的形态:一种来自单轮的直觉被推广到了多步骤系统,评估建立在单轮假设之上,而多步骤的失败模式藏在没有哪个团队完整拥有的组件接缝里。命名这种取舍并不会让它消失,但它能让取舍变得可审计——而这正是走向"选择一种与智能体真正要做的推理相匹配的脱敏机制"的第一步,无论那是随机 token、固定 token、稳定 token、结构化 token,还是保留格式加密。
最便宜的修复版本只是脱敏配置里的一行:把 token 的作用域绑到会话级,而不是单次调用。最贵的版本则是那种评估纪律——能在六个月后某个工具改了响应形状、脱敏层重新开始把两个实体合并成一个时,抓住这种 bug 的下一个变体。两件事都值得做。便宜的那件今天就值得做。
会员专享
余下内容仅对会员开放。 会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。
— 完整文章,包含未公开存档的部分 — 可落地的工作框架,附带权衡与决策依据 — 新文章抢先看,先于公开发布 登录以继续阅读→ 随时取消 · 一次订阅,畅读全部