跳到主要内容

60 篇博文 含有标签「compliance」

查看所有标签

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

· 阅读需 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)”模式。

擦除模型仍在读取的上下文:数据保留策略带来的隐患

· 阅读需 13 分钟
Tian Pan
Software Engineer

一个每晚运行的数据留存 worker(retention worker)会删除任何超过 30 天的用户消息。一个从 3 月初开始的长周期企业支持会话,到 5 月底仍然处于活跃状态。在第 41 轮对话请求进来时,你的 Prompt 组装器(prompt assembler)从同一个消息表中读取数据,而那个留存 worker 一直在悄悄地清理这个表。第 1 到 28 轮已经消失了。模型接收到的对话是从第 29 轮开始的,没有任何信号表明之前的对话曾经存在过。用户问道:“我们之前商定的 SLA 是什么?”模型自信地编造了一个数字,因为真正的答案在第 4 轮——而留存 worker 在前一天晚上把它删除了。

这不是模型故障。模型完全按照其应有的方式运行:从交给它的上下文中生成一个看似合理的答案。故障发生在更上游,处于两个团队之间的鸿沟中——每个团队都认为自己拥有消息表。

你的 Agent 没有留下的那本证据档案

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的调用链路会记录每一个 token。它记录每一次工具调用、每一次重试、每一次检索延迟、每一个模型 id。看起来无所不包。然后,某个监管机构、某个客户、或者你自己内部的 incident 频道,抛出一个本该轻松回答的问题:模型在决策那一刻究竟看到了什么? 你这才发现,调用链路记下了"问题",却没记下模型当时正在看着回答的"答案"。

那次检索命中的 chunks 早就因为上周二的重建索引轮换出了向量存储。那次工具响应是一段流式 payload,你只保留了最终态摘要,因为完整流会让账单翻三倍。那段 system prompt 是运行时按一个 feature flag 拼装出来的,而那个 flag 此后又翻转了两次,你的 flag 服务并不按时间戳保留历史值。你对发生了什么有完整的可观测性——调用图、token 数、延迟。但你对模型当时在针对什么作答,一无所知。这道缺口,就是调用链路与决策记录之间的差别。大多数团队没意识到自己只造了两者中的一个。

你的 AI 披露在第三轮就消失了,没人察觉,直到监管者发现

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的法务团队花了四次会议来打磨那一句披露的措辞。工程团队把它放到了系统提示词的最顶端。QA 确认每个会话的第一轮都会出现。三个月后,一位监管者转发了一份对话记录:这是一段处理投诉的对话的第十四轮,整整一小时围绕一笔退款纠纷给出实质性建议,而在那十四轮里,用户从未看到「我是一个 AI」这几个字。你那份通过单轮合规评审批准的披露,在结构上根本无法在真正需要它的对话里存活下来。

这就是「披露衰减」(disclosure decay),它是 2025–2026 那波聊天机器人监管浪潮没有设计去捕捉、你的 QA 流程也没有配置去测试的多轮 Agent 失败模式。欧盟 AI 法案第 50 条的义务将在 2026 年 8 月 2 日正式可强制执行,罚款最高可达 3500 万欧元或全球营业额的 7%。加州的 SB 243 已于 2026 年 1 月 1 日生效,附带私人诉讼权,消费者可以直接起诉,每次违规最低赔偿 1000 美元。华盛顿州要求重复披露,对未成年人采取每小时一次的频率。这些监管体系没有一个是在假设「披露会在第三次工具调用后悄无声息地从会话里掉出去」的前提下写出来的——但这就是你的运行时此刻正在做的事,在每一个长时间运行的对话里,正在生产环境中发生。

你的智能体审计日志记录了一切,唯独没有记录原因

· 阅读需 12 分钟
Tian Pan
Software Engineer

合规部门给你转发了一张工单。三周前,一名客户的退款请求被你的支持代理拒绝了,他们发起了申诉,现在需要有人解释这一决定。你对此感到很淡定,因为你记录了一切。每一次提示词、每一次工具调用、每一段检索到的内容、每一个 Token 计数、每一项延迟数据——所有这些都在追踪记录(trace)中,你可以在几秒钟内调出它们。

你调出了记录。你可以看到代理收到了退款请求。你可以看到它调用了 get_order_history,接着是 check_return_window,然后是 lookup_policy。你可以看到它检索到的确切政策文本。你可以看到它发送的最后一条消息:拒绝退款。追踪记录是完整的。每一个 span 都是绿色的。但你仍然无法回答那个问题,因为追踪记录显示代理拒绝了退款,并向你展示了它查看过的所有内容,但它没有向你展示为什么这些输入叠加在一起的结果是“不”。原因存在于模型如何权衡上下文,而这种权衡从未成为一种产物(artifact)。它从未在任何地方被记录下来。

这就是追踪记录与解释(explanation)之间的差距,几乎所有声称“我们拥有完全可观测性”的团队都还没有意识到,他们只构建了前半部分。