跳到主要内容

主权崩塌:记录你的 Prompt 究竟去了哪里

· 阅读需 11 分钟
Tian Pan
Software Engineer

监管机构问了一个简单的问题:“对于上周二 UTC 时间 14:32 提交的这个特定用户 Prompt,请证明该请求及其派生状态经过了哪些管辖区。”

你的应用日志显示 model=claude-sonnet-4-5, region=eu-west-1, latency=2.1s。你的网关日志也显示同样的内容。供应商的发票确认了请求确实发生了。但这些都无法回答上述问题。该请求进入了一个由欧盟托管的网关,被转发到美国区域的主端点,但在一次区域性故障期间故障转移到了新加坡,并预热了一个第三方 GPU 池上的 KV 缓存,而该 GPU 池的数据驻留声明仅存在于供应商的脚注中。你所需要的审计追踪存在于一个你的团队并不掌握的层级中。

这就是主权崩溃:即你的合同中关于数据位置的承诺与你的运行时在事后能实际证明的情况之间的差距。合规主张的强度取决于链路中最薄弱的那行日志。

驻留是指数据存储在何处,主权是指谁控制数据

大多数工程层面的讨论都会在术语上犯错,因为数据驻留(Residency)和数据主权(Sovereignty)常被当作同义词对待。其实不然。驻留是一个物理事实:字节存储在法兰克福的一个磁盘上。主权是一个法律事实:谁持有密钥,谁可以被强制披露,谁承担合同义务。

一家总部位于美国的供应商在法兰克福运营一个区域,可以满足欧盟 Prompt 的驻留要求。但如果其母公司受美国法律约束,且无论数据存储在何处都可以被强制披露,那么它就不满足主权要求。将于 2026 年 8 月起分阶段实施的《欧盟 AI 法案》(EU AI Act)以及 GDPR 第五章的传输规则都涉及这一区别。Schrems 裁决后的格局也是如此,其中《欧盟-美国数据隐私框架》的充分性认定已经面临来自 noyb 的新一轮法律挑战。

对于推理负载而言,这意味着单个请求可能在每一跳都满足驻留要求,但如果其中任何一跳是由法律风险跨越边界的子处理器运营的,则仍会违反主权要求。审计追踪必须捕捉这两个维度:字节去了哪里,以及在每一步中谁拥有法律管辖权。

大多数团队没有记录的四个跳点

如今,来自欧盟居民的 Prompt 到达典型的 SaaS 应用时,触及的层级比任何单个团队能看到的都要多。追踪一个请求,你会发现至少有四个潜在的主权转移点:

  1. 应用网关:你自己的入口,通常托管在美国,负责终止 TLS、附加身份验证并记录入站请求。
  2. AI 网关或路由器:像 LiteLLM、Portkey、TrueFoundry 或自研的等效层级,负责选择模型和供应商、应用速率限制并转发请求。
  3. 主推理供应商:你的网关选择的模型端点。可能是一个区域端点,也可能是一个全局端点。故障转移行为通常写在条款细则中。
  4. 后备推理供应商:当主端点服务降级时,请求去往的地方。通常是不同的区域,通常是不同的子处理器,且几乎从未反映在你的应用日志中。

每一跳都有自己的日志面。每个表面都使用自己的请求 ID。几乎没有人会将一个统一的关联 ID(Correlation ID)贯穿所有四个层级,这意味着事后重建单个请求的路径需要跨越四个具有不同保留期和不同访问控制的日志系统进行关联。当监管机构的问题到来时,网关的调试日志往往早已被滚动覆盖。

将单次请求的主权路径作为一级日志字段

解决方案并非大动干戈。而是将主权路径作为每条请求的结构化日志字段,在掌握路由决策的层级主动写入,并作为标头(Header)向下游传递。

一个可行的模式:

  • sovereignty.gateway_region:入站终止的地点。
  • sovereignty.router_decision:选择了哪个供应商和哪个区域,以及原因(缓存局部性、成本、容量)。
  • sovereignty.provider_advertised_region:供应商宣称的此端点所属区域。
  • sovereignty.provider_actual_region:供应商在响应标头中实际返回的区域(如果他们有暴露)。
  • sovereignty.failover_chain:如果请求在执行过程中发生降级,所触及的区域有序列表。
  • sovereignty.cache_layer:是否涉及 Prompt 缓存或 KV 缓存,以及在谁的硬件上。
  • sovereignty.subprocessor_chain:触及请求的法律实体,派生自供应商与子处理器的静态映射表。

难点不在于模式本身。而在于第三到第七个字段需要供应商暴露他们通常不提供的信息。Anthropic 的 Bedrock 端点会告诉你 AWS 区域。直接调用 OpenAI 则暴露得较少。KV 缓存层几乎从未浮出水面。诚实的日志条目必须在你无法观测的步骤记录 unknown_after_handoff,因为假装知情比承认存在缺口更糟糕。

与运行时一致的合同边界

日志仅证明发生了什么,而不约束可能发生什么。补充性工作是签署一份数据处理协议(DPA),使供应商的行为受限于你的运行时实际可验证的行为。

标准 DPA 在 AI 领域失效的三个地方:

与运行时行为匹配的子处理器列表。 只有在运行时无法绕过子处理器列表时,该列表才有用。OpenAI 会定期发布更新的子处理器列表。当 Anthropic 在 2026 年初成为 Microsoft Copilot 的子处理器时,任何 Copilot 租户的法律风险链条都在一夜之间发生了变化。在撰写本文时,Anthropic 被排除在欧盟数据边界(EU Data Boundary)之外,这意味着应用程序认为留在边界内的请求可能并未留在境内。如果 DPA 列出了子处理器但没有承诺运行时强制执行,那么它只是“文档演戏”。

能够应对故障转移的数据驻留承诺。 每个提供区域性服务的供应商都隐含地假设“顺境”路径(happy path)。需要注意的合同条款是发生事故时会发生什么:供应商是承诺“故障关闭”(fail closed,即拒绝请求而非路由到区域外),还是“故障打开”(fail open,即路由到任何健康的端点)?大多数供应商默认选择“故障打开”,因为可用性就是卖点。对于受监管的工作负载,“故障关闭”是唯一安全的默认设置,且必须以书面形式明确,因为仅凭运行时配置并不是可执行的证据。

书面的缓存保留策略。 Prompt 缓存和 KV 缓存会产生派生伪影(derived artifacts),这些内容可能会持久化在请求名义区域之外的基础设施上。缓存保留窗口、缓存置换策略以及缓存内容是否可以独立于主请求被传唤,这些都是大多数供应商的 DPA 未能解决的问题。在名义上于欧盟处理的 Prompt,如果命中了美国基础设施上的缓存,这就是一次无人记录的传输事件。

“供应商会处理”不再奏效的法律审查

在审查下崩溃的模式:应用团队指责供应商,供应商指责子处理器,而子处理器又指责基础设施运营商。没有人能给出审计答案。

能经受住审计的转变是将主权(sovereignty)作为第一方工程问题来对待。这意味着:

  • 平台团队拥有网关日志架构(schema),并对完整性负责。
  • 法律团队得到的是报告而非解释:每季度一份附带完整主权路径的请求样本。
  • 供应商管理团队将子处理器的变更视为代码级的事件。当 OpenAI 增加子处理器时,该变更应有工单、评审和签字,而不仅仅是一封被动接收的通知邮件。
  • 故障转移策略是一项配置,而非默认设置。每个区域对(region pair)都有明确的“故障关闭”或“故障打开”设置,并将其法律依据记录在配置旁。

这是行政工作,但正是这项工作让审计从为期数周的“考古项目”变成了简单的查询。

告诉你缺失什么的桌面演练

在监管机构介入之前进行演练。从上周挑选一个真实的请求,在纸上完整走一遍流程并回答四个问题:

  1. 触达了哪些司法管辖区? 仅凭你的日志重构完整路径。如果无法做到,请标出哪些步骤需要猜测。
  2. 涉及哪些法律实体? 对于每一个跳步(hop),指明负责的公司实体。如果答案是“我认为它们属于同一个母公司”,这就是一个发现。
  3. 哪些数据被持久化了,以及在哪里? 输入、输出、嵌入(embeddings)、缓存条目、评估数据集、调试捕获。对于每一项,指明存储位置和保留窗口。
  4. 你能在 72 小时内提供什么? GDPR 的违规通知时限和《人工智能法案》(AI Act)的事故报告时限都非常紧迫。如果回答第一个问题就花了你的团队一周时间,那么第四个问题的答案就是“没法说实话”。

团队第一次进行这种演练时,结果很少会像预想中那样令人尴尬。尴尬之处不在于数据去了不该去的地方,而在于没有人能确定它是否去了。CISA 的联合 AI 桌面演练反复得出了同样的结论:预设的数据流与可证明的数据流之间的差距,是生产环境 AI 中最大的未衡量风险。

优先构建什么

如果距离审计还有一年且预算有限,请无情地确定优先级:

  • 贯穿每个跳步的相关性 ID(correlation ID)。 这是一个字段,要求出现在每一行日志中。这是一周的管护工作(plumbing work),但它能让后续的每一次调查都变得可行。
  • 在代码中维护的子处理器映射表。 一个将供应商映射到当前子处理器的 YAML 文件,随供应商页面的更新而更新,并设有 CI 检查,在上游发生变化时报错。这就是“我们会查”和“我们知道”之间的区别。
  • 针对每对供应商的故障转移策略开关。 默认对任何跨越主权边界的配对进行“故障关闭”。将覆盖(override)操作设为明确的部署动作。
  • 季度样本报告。 随机抽取 50 个请求,附上它们的完整主权路径,并将结果提交给法律部门。目的不在于报告本身,而在于每季度发现哪些字段仍是 unknown_after_handoff(交接后未知),从而使查漏补缺的工程工作变得可见。

你想要的合规态势不是“我们从未跨越边界”。因为没有哪个多区域推理部署能完全诚实地保证这一点。你想要的态势是“对于任何请求,我们都能在监管机构给定的时间内证明发生了什么”。这种态势是在网关层、日志、合同中建立的,也是在不断进行桌面演练直到无需进入紧急状态就能得出答案的肌肉记忆中建立的。

令牌路由层(token-routing layer)是主权确立或瓦解的地方。在应用层处理就太晚了。

References:Let's stay in touch and Follow me for more thoughts and updates