Agent读到的数据有PII、有跨境数据,合规怎么做?
本文目录
30秒版回答
我会先画出 Agent 链路上的数据流向图:数据从源系统出来,会经过检索和工具调用进入上下文,被发送给模型服务,再写进对话日志、记忆、评测集和缓存。每个节点都要有控制。
具体手段分四类:分类分级——先知道哪些字段是敏感数据,等级多高;最小化——Agent 能不拿就不拿,能拿脱敏的就不拿原文,高敏数据默认不进 Agent 可见范围;发送前脱敏——进入模型上下文之前做识别和替换,必要时可逆令牌化,结果返回时再还原;留存与审计——日志分级存储、设置保留期,所有敏感数据访问可审计。
跨境方面,原则是数据在哪个区域产生,就尽量在哪个区域处理:选择对应区域部署的模型服务,确认服务商的数据使用和保留条款,需要出境的按当地法规走评估和告知流程,具体以法务意见为准。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
面试官:「Agent 要读业务数据、读工单、读用户对话,里面难免有手机号、身份证、地址这类个人信息,有的业务还涉及海外用户。你怎么保证合规?」
合规题在 Agent 面试里越来越常见,尤其是金融、医疗、出海类公司。原因是 Agent 让数据流动的路径变多了:数据不仅被人查询,还会被发送给模型服务、写进对话日志、存进记忆、出现在评测集里。每一个环节都可能是泄露点。
这道题不要求你是法务专家,不需要背法条。面试官想看的是:你能不能识别出 Agent 链路上所有的数据流向,并在每个环节设计出技术控制手段。这是数据开发做数据安全和数据治理的延伸。
面试官在考什么
• 能否识别 Agent 场景特有的数据流向:发给模型、写入日志、进入记忆、进入评测集。
• 是否有分类分级的意识:不同敏感级别的数据,处理方式不同。
• 能否给出具体的技术手段:识别、脱敏、最小化、权限、审计、留存期。
• 是否了解跨境数据的基本原则:数据驻留、出境评估、模型服务的部署区域。
展开一:画出 Agent 链路的数据流向
源系统(业务库/工单/文档)
│ ① 检索/工具调用:Agent 拿到了哪些字段?
▼
模型上下文
│ ② 发送给模型服务:服务部署在哪里?会不会被留存或用于训练?
▼
模型输出 → 返回给用户 ③ 输出里有没有泄露用户无权看的信息?
│
├─▶ ④ 对话日志 / Trace:原文存了多久?谁能看?
├─▶ ⑤ 长期记忆:有没有把敏感信息记下来?
├─▶ ⑥ 评测集 / 微调数据:线上样本进入评测集前脱敏了吗?
└─▶ ⑦ 缓存:缓存键里有没有带上权限维度?
传统数仓的数据安全主要关注①(谁能查什么)。Agent 场景下,②到⑦都是新增的风险点,很多团队只做了①,忽略了日志、记忆和评测集,结果敏感数据在这些“副产品”里大量沉淀。
展开二:分类分级——一切控制的前提
不知道哪些数据敏感,就谈不上保护。我会基于数仓已有的元数据做字段级分类分级,并把等级作为 Agent 访问控制的输入:
| 等级 | 示例 | Agent 访问策略 |
|---|---|---|
| L1 公开 | 产品名称、公开文档 | 可直接使用 |
| L2 内部 | 业务指标、内部制度 | 按用户权限使用,日志正常保留 |
| L3 敏感 | 手机号、邮箱、地址、订单明细 | 默认脱敏后进入上下文;原文需要明确授权 |
| L4 高敏 | 身份证号、银行卡、健康信息、薪资 | 默认不进入 Agent 可见范围 |
-- 字段级分类分级元数据:作为 Agent 访问控制和脱敏的依据
CREATE TABLE meta_column_classification (
table_name STRING,
column_name STRING,
data_category STRING, -- 联系方式/身份标识/金融/健康/业务
level STRING, -- L1/L2/L3/L4
mask_rule STRING, -- 手机号保留前3后4 / 全部替换 / 令牌化
agent_policy STRING, -- allow / mask / deny
region STRING, -- 数据产生的区域,用于跨境判断
updated_by STRING,
updated_at TIMESTAMP
);
-- 工具层查询前读取该表:deny 的列直接拒绝,mask 的列自动套用脱敏函数
分类分级不能全靠人工打标,几千张表人工做不完。通常是规则 + 采样识别:先按字段名和数据样本做自动识别(手机号、身份证号格式很好识别),再由数据负责人确认。新表上线时把分类分级作为必填项,纳入数据开发规范。
展开三:发送前脱敏与可逆令牌化
有些场景 Agent 确实需要处理含个人信息的数据,比如客服 Agent 要帮用户查订单。这时可以用可逆令牌化:发送给模型之前把敏感信息替换成令牌,模型基于令牌推理,返回结果时再把令牌还原。
# 发送给模型前做识别和令牌化,返回后还原
def protect(text: str, vault: TokenVault) -> str:
for match in pii_detector.find(text): # 手机号、邮箱、证件号等
token = vault.tokenize(match.value, match.type) # 如 <PHONE_1>
text = text.replace(match.value, token)
return text
def restore(text: str, vault: TokenVault, user_ctx) -> str:
for token in vault.tokens_in(text):
if user_ctx.can_view(token.type): # 只对有权限的用户还原
text = text.replace(token.key, vault.reveal(token))
return text
prompt = protect(raw_context, vault) # 模型只看到令牌
answer = restore(llm.chat(prompt), vault, user_ctx) # 用户看到还原后的结果
log.write(prompt, answer_masked=protect(answer, vault)) # 日志只存令牌化版本
注意最后一行:日志里存的是令牌化之后的版本。这样即使日志被更多人访问,也不会泄露原始的个人信息。令牌和原文的映射存在单独的、权限严格的令牌库里,并设置较短的保留期。
展开四:日志、记忆、评测集——容易被遗忘的角落
| 环节 | 风险 | 控制措施 |
|---|---|---|
| 对话日志 | 原文永久保存,排查时被大范围查看 | 分级存储(第 13 题)、原文短保留期、访问审批 |
| 长期记忆 | Agent 把用户的证件号“记住了” | 写入记忆前过滤敏感信息,用户可查看和删除自己的记忆 |
| 评测集 | 线上真实样本带着个人信息进入评测集,被很多人反复查看 | 入库前强制脱敏,记录样本来源 |
| 缓存 | A 用户的结果被 B 用户命中 | 缓存键包含权限维度,敏感结果不缓存 |
| 模型服务 | 数据被服务商留存或用于训练 | 确认服务条款,选择不留存或企业级协议,敏感场景考虑私有化部署 |
还要考虑删除权:用户要求删除个人数据时,不仅要删业务库,还要删对话日志、记忆、评测集里的相关数据,以及向量索引里的相关 Chunk。这就要求从一开始就在这些数据里保留 user_id 等可追溯的标识,否则根本找不到要删什么。
展开五:跨境数据的基本原则
做出海业务的数据开发,对跨境数据问题应该都不陌生:不同国家和地区对个人信息的处理和出境都有各自的法规要求,比如欧盟的 GDPR、中国的《个人信息保护法》及数据出境相关规定等。Agent 场景下,跨境问题最容易出现在“把数据发给哪里的模型服务”这一步。
• 数据驻留:按数据产生的区域选择同区域部署的模型服务和存储,比如欧洲用户的数据用部署在欧洲的服务处理。
• 路由控制:在网关层根据数据的 region 标签决定请求发往哪个区域的模型服务,而不是所有请求都发往同一个默认端点。
• 出境合规流程:确实需要跨境处理的,按当地法规要求做评估、告知、签署相应合同,具体要求以法务和合规团队的意见为准。
• 留存证据:记录每次数据处理发生的区域和服务,审计时可以证明合规。
面试时有一个很重要的表达技巧:承认法律细节不是你的专业领域,但强调你能把合规要求转化为技术控制。“具体条款我会和法务确认,我负责的是让这些要求在数据链路上可执行、可审计”——这句话比背法条更显专业。
追问链
追问一:脱敏会不会影响 Agent 的效果?
会有一定影响,比如地址脱敏后 Agent 无法按地址做精细分析。所以要按场景设计:大部分分析场景只需要聚合结果或分类信息,不需要原文,脱敏几乎不影响效果;确实需要原文的场景(比如客服查具体订单),用可逆令牌化,模型基于令牌推理,用户端还原。另外脱敏规则要保留分析需要的信息,比如手机号保留号段、地址保留到城市级别。
追问二:怎么检测模型输出里有没有泄露敏感信息?
在输出端也加一道识别:模型返回的内容在发给用户之前,过一遍敏感信息检测,如果出现了该用户无权查看的类型(比如普通员工的回答里出现了完整身份证号),就拦截或脱敏后再返回,同时告警。输入端和输出端双向检测,加上底层的权限控制,形成纵深防御。
追问三:你们怎么证明自己是合规的?
靠审计数据。每次敏感数据访问记录谁、通过哪个 Agent、访问了什么级别的数据、是否经过脱敏、发往了哪个区域的模型服务。这些审计日志本身要防篡改、长期保留。定期出合规报告:敏感数据访问量、拦截次数、删除请求的处理时效等。
加分说法 vs 减分说法
| ✔ 加分说法 | ✘ 减分说法 |
|---|---|
| 画出 Agent 链路的完整数据流向 | 我们用的是正规模型服务,应该没问题 |
| 字段级分类分级,作为访问控制的输入 | 只管查询权限,不管日志和记忆 |
| 发送前脱敏,可逆令牌化,日志存令牌版本 | 所有数据原文直接发给模型 |
| 日志、记忆、评测集、缓存都要管 | 背一堆法条但讲不出技术方案 |
| 合规要求转化为可执行、可审计的技术控制 | 不考虑用户的删除请求 |
怎么挂到你的项目上
话术模板:“Agent 的合规我会先画数据流向:检索、发送模型、日志、记忆、评测集、缓存,每个节点都有控制。基础是字段级分类分级,高敏数据默认不进 Agent 可见范围,敏感数据发送前令牌化,日志只存令牌版本。跨境方面按数据产生区域路由到同区域的模型服务,具体条款和法务确认,我负责让要求在链路上可执行、可审计。”
总结
合规题的核心是数据流向 + 分类分级 + 技术控制。Agent 让数据多了“发给模型、进日志、进记忆、进评测集”这些新路径,每条路径都要有控制。不需要背法条,但要能把合规要求变成可执行、可审计的工程方案。这一题答完,第三轮工程深挖就结束了。
下一篇进入最后一轮:面试官问“你平时怎么用 AI 写代码?AI 写的 SQL 你敢直接上线吗?”应该怎么答?
你们的 AI 应用会把用户数据发给外部模型服务吗?有做脱敏吗?评论区聊聊~
关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长