跳到主要内容

64 篇博文 含有标签「compliance」

查看所有标签

在 18 个月后复现 AI 决策

· 阅读需 11 分钟
Tian Pan
Software Engineer

一位客户对贷款被拒提出异议。监管机构开启调查。原告律师提交证据开示请求。这三者都带着同一个看似简单实则棘手的问题:你的系统做了什么决定,以及为什么? 决策发生在 18 个月前。你调出案例,发现产生原始输出的每一个组件都已经发生了变化。托管模型版本已被弃用并迁移。系统提示词(System Prompt)被修改了 9 次。你的智能体(Agent)检索到的文档被重新分块(re-chunked)、重新嵌入(re-embedded)并重新排序(re-ranked)到了一个新的索引中。而让整个过程具有非确定性的采样设置从一开始就根本没有记录。

你无法复现该决策。这不是因为你疏忽大意,而是因为你的技术栈中没有任何东西是为了可复现性而构建的。事后解释性(Explainability-after-the-fact)归根结底是一个伪装成解释问题的可复现性问题——而可复现性这种东西,你要么在决策发生的时刻就通过工程手段将其固化,要么就会永远失去它。

令人不安的事实是,大多数团队发现这个漏洞时,恰恰是他们最承受不起后果的时候。重建决策的需求几乎从不会在正常运营期间出现。它往往伴随着诉讼、审计,或是带着监管机构电话号码的愤怒客户而来。到那时,捕获正确证据的窗口期早在一年半前就已经关闭了。

你的智能体对话记录是可被取证的,且法务从未批准过

· 阅读需 10 分钟
Tian Pan
Software Engineer

你按照每一份可观测性指南的要求对代理(agent)进行了插桩。每一个回合都有一个 span:完整的 prompt、检索到的块(chunks)、模型的思维链、它考虑过的工具调用、它起草随后又放弃的计划,以及最终的行动。存储费用是每 GB 三分钱,而在事件响应期间,这些追踪(traces)已经救了你十几次。你保留了一切,因为保留一切几乎是免费的,而且偶尔还能立大功。

这是平台团队中没人建模过的部分:那个追踪记录是用流畅的英语写成的,它点名道姓地揣测你的客户,还起草了你从未实际执行的操作。它是你公司产生的最容易被引用的制品,而原告律师会对着幻灯片上印着的你公司 Logo,向陪审团宣读其中最“精彩”的 200 个单词。让你的系统具备可调试性的推理追踪(reasoning trace),正是让它承担法律责任的推理追踪。

千人智能体客户:按席位计费的 SaaS 并非为机器定价

· 阅读需 12 分钟
Tian Pan
Software Engineer

在你公司的某个角落,一名工程师已经将一个智能体集群接入了一个仅获授权 50 个用户席位的 SaaS 产品。这个集群在一夜之间运行了上千个并发会话,通过一个服务账号进行身份验证,并完成了整个部门的工作。没人询问过法务,也没人询问过供应商。如果你仔细阅读合同,很有可能整个工作负载都是未经授权的——这并非因为有人存心欺骗,而是因为这份合同是为一个“用户”意味着“敲击键盘的人”的世界而编写的。

这是智能体时代悄然浮现的合规问题。按席位许可、服务条款中的自动化条款、公平使用率限制以及按用户分析,所有这些设计的初衷都基于一个假设:使用量随员工人数而扩展。智能体从各个方向同时打破了这一假设。运行智能体集群的客户不仅让供应商的定价模型承受压力——他们还经常违反协议的字面规定、其背后的经济逻辑,或者两者兼而有之。

你的 Token 夜宿何方:LLM API 调用的数据驻留

· 阅读需 12 分钟
Tian Pan
Software Engineer

一份客户支持记录离开位于法兰克福的服务器,被拼接成一段提示词 (prompt),然后跨越大西洋传输到位于弗吉尼亚州的 GPU。模型思考了 800 毫秒。响应返回。从用户的角度来看,什么都没发生 —— 聊天正常进行。从你的监管机构的角度来看,你将个人数据转移到了第三国,而你可能无法说明其法律依据。

这是 LLM 落地过程中演示版本会隐藏的部分。原型调用 api.openai.com 然后上线。接着,来自德国银行、法国医院或你公司法务团队的采购问卷会提出一个原型从未需要回答的问题:推理在哪里发生,谁可以强制访问这些数据? “供应商符合 SOC 2 标准”是下意识的回答,但这是错误的 —— 它回答的是关于供应商内部控制的问题,而不是关于哪个司法管辖区的法院可以触及你的提示词。

那个因无人负责而逃过租户删除清理的智能体记忆库

· 阅读需 11 分钟
Tian Pan
Software Engineer

合规计划是对审计员签字通过当天你公司所拥有系统的描述。你公司今天的系统是另一套完全不同的组合,而这两者之间的差距,就是从那时到现在期间每一个上线了新持久化存储的发布版本的表面积。你向客户承诺的删除保证是针对第一套系统的保证,而最终对此进行询问的监管机构,问的将是第二套。

这种失败模式并非删除代码中的 Bug。删除代码本身是正确的。Saga 流程会扇出到数据清单中命名的每一个存储系统,调用每个系统的删除端点,收集每个系统的回执,并在每个回执都返回已签署状态时报告成功。Saga 正在准确执行其被构建时所承担的任务。问题在于,Saga 迭代的是一份 18 个月前的存储系统列表,而智能体平台团队在 6 个月前上线了一个长期记忆功能,却没有任何人将其添加到该列表中。

引用链接依然有效,但内容已不再是模型引用的原文

· 阅读需 10 分钟
Tian Pan
Software Engineer

一个 RAG 智能体用一段简洁的文字和一条引用回答了客户的监管问题。验证层获取了该 URL,看到返回码为 200 OK,勾选通过并发布。六个月后,合规性审计调取了对话记录,点击同一个链接,却发现页面现在的内容与智能体引用的完全相反。URL 没问题,对话记录中的引用也没问题,但两者不再匹配。客户的合规官询问智能体是否捏造了引用,而团队无法证明它没有捏造,因为证明该 URL 过去内容的唯一证据就是智能体自己声称它说过什么。

这不是通常意义上的幻觉。模型检索到了真实内容,忠实地提取了真实的句子,并给出了一个至今仍可解析的真实 URL。世界上任何链接检查工具都会认为这个引用是有效的。然而,审计依然失败了,因为验证层衡量的是错误的属性。可访问性(Reachability)并不等同于忠实度(Fidelity)。URL 只是指向受他人编辑控制的可变文档的指针,一旦文档发生变化,每一份引用它的对话记录都会变成一个随时可能爆发的“幻觉报告”。

服务商在 API 边界遵守但在缓存处违反的数据驻留契约

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的驻留审计追踪了来自租户流量的每一个出站请求,观察它在法兰克福的一个主机名上终止,并签了字。审计对它所测量的一切都是正确的。但它也看错了层级。请求确实去了欧盟。但满足该请求的字节——即服务商哈希并从最近可用节点提取的缓存前缀——却存放在 us-east-1。你的区域端点向你承诺了一个目的地。而缓存什么也没承诺,因为缓存是一个不同的产品,受不同的 SLA 约束,是为成本而非合规而设计的。

客户的审计员发现了它。不是你的。另一个供应商的事件报告提到 Prompt 缓存的放置与推理区域是解耦的,于是客户的 GRC 团队提出了那个显而易见的后续问题:我们的前缀去了哪里?修补这一差距的合同修正案花了 90 天。续约被暂停了。根据他们拿到的文档,编写集成的团队并没有做错任何事。

法律免责声明如何从答案泄露到工具调用参数中

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的法律顾问批准了一个单行的系统提示词指令:在每一个涉及受监管领域的回答中附加 “此信息不构成法律建议,不应以此为依据”。三周后,一个用户提交了一个 Bug,因为他们的日历事件描述字段以该行开头,随后是智能体本应放入会议邀请的合同摘要。智能体并没有发生故障。它完全按照系统提示词的要求执行了操作,结果发现这种行为涵盖了模型输出文本的每一个渠道——包括它调用的下一个工具的 JSON 参数。

该指令是一条内容格式规则,而模型也将其视为一条规则。它没有区分 “面向用户的回答” 和 “工具调用参数”,因为提示词中没有任何内容告诉它这些是不同的表面。免责声明最终出现在日历中、邮件草稿中,以及你的智能体代表用户发布的 Slack 消息中。这些中的每一个都是独立的下游系统,其作者根本不知道会有合规字符串被注入到结构化字段中,且每个系统的清理成本各不相同。

检索流水线的数据驻留:那些跨境而去的 Embedding,以及并未跨境的 LLM 调用

· 阅读需 11 分钟
Tian Pan
Software Engineer

交付 “面向欧盟客户的 AI” 的团队通常只交付一种驻留控制:锁定在欧盟地区的推理端点。采购团队拿到 DPA,架构图在 “模型托管在法兰克福” 旁边打上绿色对勾,接着发布。架构图中没显示的是:客户的原始查询在前往模型的途中被美国托管的嵌入 API 向量化;查询与之匹配的向量存储的运维平面位于 us-east-1;重排序模型是部署在供应商自选地区的第三方 SaaS;提示词缓存在命中的情况下是按地区键入的,而在未命中的情况下则是全局的;记录检索块的追踪存储有一个 30 天的保留期存储桶,并为了冗余进行跨区域复制。

推理层遵守了驻留规定。而检索流水线甚至不知道自己也是参与者。

这就是大多数 “符合 GDPR” 的 RAG 部署在面临团队甚至没意识到会到来的审计时失败的缺口。修复方案不是针对模型调用增加另一个控制 —— 而是意识到数据驻留是客户字节所接触的每个组件的属性,并且拥有 “LLM” 的团队最多只拥有涉及到的六个表面中的一个。

为了节省 Token 而被你剥离的思维链,其实隐藏着一项合规证据要求

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个平台团队发布了一次提示词重构,将平均响应成本降低了 32%。这个改动非常简单:剥离了 “解释你的推理过程” 前导语,要求模型仅返回 JSON 对象,并删除了从模型文本中解析推理逻辑的后处理步骤。仪表板变绿了。季度回顾中的单位经济效益页面从黄色变为了金色。平台团队中没有人想到要咨询风险团队,因为这个改动没有触及客户收到的任何答案。

两个季度后,一位受监管客户的审计员要求提供一份六个月前的贷款拒绝信的决策理由。团队调取了追踪记录。输入在那,输出也在那。推理过程消失了 —— 不是因为有人删除了它,而是因为它在重构发布的那天起就停止生成了。客户的合规计划一直运行在推理逻辑存储在追踪记录库中的假设之上;平台团队一直运行在推理逻辑不是任何人的问题,因为面向客户的答案没有变化的假设之上。孤立来看,这两个假设都是正确的。但结合在一起,它们让客户面临了一项监管违规审计发现,并让平台团队失去了一份合同续签。

那个追溯性地毒害了你微调模型的训练集许可

· 阅读需 12 分钟
Tian Pan
Software Engineer

已经运行了九个月的生产环境微调检查点(checkpoint),现在正躺在你首席技术官(CTO)和外部法律顾问之间的 Slack 讨论线程里。你原本在一个看似宽松的许可证下抓取的数据源更改了条款,发出了通知,并点名了你的模型。你的工程师想知道是否可以简单地对违规记录进行模型“去训练”(untrained)。法律顾问想知道权重文件本身现在是否成了受监管的产物。通话中没有人能给出一个好的答案,因为你的训练流水线将许可证视为一种“事件”——仅在摄取时读取一次——而不是一种在你支付了 H100 费用后,外界仍能编辑的“状态”。

这是极少有微调指南会讨论的失效模式。分发数据集的许可证并不是你在数据摄取时走过的一个静态门槛。它是第三方持有的一项持续性主张,你无法控制,而且这项主张的半衰期正在缩短。Hugging Face 的官方法律仓库每隔几周就会悄悄记录针对特定数据集的 DMCA 下架通知——AoPS 撤回了 MATH 基准测试,PaperDemon 撤回了抓取的艺术作品,Archive of Our Own 在收到通知后的几小时内就删除了一批同人小说数据。每一次下架都是一个下游信号,表明某处的某个模型是基于分发权已经失效的数据进行训练的。

你的数据驻留政策中遗漏的推理区域锁定

· 阅读需 10 分钟
Tian Pan
Software Engineer

合规审计总是从同一个问题开始,而你的团队也总是以同样的方式回答:“客户数据在哪里处理?”在欧盟(EU)地区。幻灯片是这么说的,SDK 配置截图证实了这一点,DPA(数据处理协议)也做出了承诺。接着,审计员提取了上个季度的请求日志样本,将其与服务商的每请求区域头信息(per-request region header)进行比对,房间里顿时安静了下来。在大约 40 分钟的容量事件期间,大约 4% 的欧盟企业 Prompt 由美国区域的推理节点提供服务,而团队对此一无所知。保存可重用前缀(prefixes)的缓存位于全球池中。支持团队查询的追踪存储(trace store)位于 us-east。DPA 成了幻灯片。合同成了一个路由提示(routing hint)。

这种事件不会出现在事后分析(postmortem)中,因为没有任何服务降级。模型返回了答案,用户得到了响应,延迟图表保持平稳。出故障的是仪表盘从未监测到的东西:请求穿过服务商基础设施的地理路径。那些绝不会将 us-east-1 的 URL 与“请求实际上在 us-east-1 执行”混为一谈的工程师,在 LLM API 层级却经常犯同样的错误,因为服务商的区域参数看起来像 AWS 的参数,在正常路径(happy path)下表现也像 AWS,但一旦首选区域的 GPU 耗尽,它就会静默降级为“尽力而为(best effort)”模式。