Skip to content

用例:Tacet AI Agent——基于 TEE 的隐私保护财务查询

版本:v1.0(草案) 状态:草案 权威性:参考性

场景

一位 Tacet 用户向 AI Agent 提出了一个复杂的财务问题:"为什么我这个月餐饮支出涨了 40%?"

Tacet Agent 判定该问题需要 90 天交易记录分析和因果推理,超出了端侧模型的能力范围。Agent 将查询路由到远程 Vault 路径——代表用户向 Symphony Core System 提交一个 query 任务,并附带用户预授权的委托凭证。查询在 Symphony 企业节点上经过认证的 TEE 中执行,结果返回到用户设备并在 Tacet 应用内展示。

本用例为参考性文档,展示了 SCPSCS 规范如何支持一种新的参与者类型——代表数据主体行事的 AI Agent——以及标准任务生命周期如何处理 Agent 身份、委托授权和单用户推理查询的隐私预算消耗。

本文使用的规范术语遵循 SCP 协议概览SCP 核心规范

为什么这个用例很重要

本场景之所以有价值,是因为它展示了现有用例未能完全覆盖的若干特性:

  1. 任务提交者是一个在用户签发的委托凭证下运行的 AI Agent,而非人类操作员或企业系统
  2. 数据主体与发起任务的一方是同一个人——用户在查询自己的 Vault,而非第三方查询消费者记录
  3. 查询涉及单个 Vault,无需多 Vault 扇出,但仍需 TEE 执行,因为计算涉及的敏感记录材料不得以明文离开企业节点
  4. Agent 身份必须在用户不在线时由主集群独立验证
  5. Agent 发起查询的隐私预算消耗必须按数据主体精确追踪,与外部提交的任务完全一致,因为隐私预算模型不对自查询做例外处理
  6. 结果必须投递到 Agent 的设备端点,而非任务提交者的 API webhook

因此,它验证了协议可以将委托 AI Agent 访问作为一等模式来支持,而不会创建削弱授权或隐私预算执行的特殊旁路。

入口区分

本场景包含两个不同层面:

  1. Tacet 应用内的用户侧对话交互
  2. 具有显式授权、预算和执行约束的协议认可的查询工作

用户的自然语言问题("为什么我这个月餐饮支出涨了 40%?")本身不是协议事件。只有当 Tacet Agent 将其转化为携带用户预注册 Agent 委托凭证的结构化授权 query 任务时,它才进入 SCP 生命周期。

与收据上传或优惠券活动场景不同,本用例涉及:

  1. 新的任务提交者子类型:AgentCredential 持有者代表已注册的数据主体行事,而非代表企业或广告商
  2. 针对单用户、单 Vault 的执行,Vault 中包含该用户自己的私有记录
  3. TEE 执行不是为了跨 Vault 隔离,而是因为原始交易记录在 enclave 内推理前必须保持加密状态
  4. 隐私预算预留范围限定在单个数据主体(budget_scope: self_query),由用户在 Tacet 账户设置时预授权
  5. 结果投递到委托凭证中标识的设备端点,而非通用的任务提交者 webhook

协议视角

从协议角度看,本场景将用户的对话式查询转化为可验证的、预算受限的推理结果,专属返回给该用户的授权 Agent 端点。

1. Agent 委托注册

在任何运行时查询发生之前,用户在 Tacet 入驻时注册委托凭证。这是一次性设置步骤,而非每次查询都需要。

委托凭证包含:

  1. agent_id:该用户的 Tacet Agent 实例在协议中注册的稳定标识符,绑定到用户设备
  2. data_subject_id:用户在 Symphony 协议中的身份
  3. authorized_scopes:Agent 可代表用户调用的使用范围集合,如 self_queryself_computetask_participation
  4. budget_allocation:用户为 Agent 发起的自查询预授权的每纪元隐私预算,独立于第三方任务参与预算
  5. delivery_endpoint:查询结果应返回到的设备端点(加密通道引用)
  6. expiryrevocation_ref:委托凭证具有有限的有效期窗口,用户可随时通过 Tacet 应用或直接通过主节点 API 网关撤销

委托凭证由用户的私钥签名,并在主节点的身份和认证服务中注册。此后,Tacet Agent 可代表用户提交任务,无需用户在线或重新签署每个任务。

2. 查询路由与任务构建

当用户提交自然语言问题时,Tacet Agent 的端侧路由层评估查询是否可在本地处理。

本场景中,路由层判定需要 TEE 路由,原因如下:

  1. 查询需要跨 90 天连接餐饮记录,超出了端侧模型能高效处理的上下文窗口
  2. 因果分析("为什么涨了")需要对商户级别的明细和时间序列模式进行推理,受益于更大的模型
  3. 端侧模型对草稿答案的置信度分数低于应用对财务推理的质量阈值

决定路由到远程 Vault 路径后,Tacet Agent 构建一个 QueryTaskRequest

  1. task_class: query
  2. agent_credential_ref:引用预注册的委托凭证
  3. target_vault:用户在 Symphony 企业节点上的远程 Vault
  4. query_scope:过去 90 天的餐饮交易,按商户和周分组
  5. computation_intent:因果摘要——识别月环比餐饮支出增长的主要商户级和频率级驱动因素
  6. semantic_version:请求时的活跃语义版本
  7. result_delivery:委托凭证中的设备端点
  8. budget_hint:基于查询范围计算的预估隐私预算消耗

Agent 将此请求提交给主集群的 API 网关。

3. 任务准入

主节点集群上的准入平面处理请求:

身份与委托验证

  1. 网关解析 agent_credential_ref,确认凭证有效、未过期且未被撤销
  2. 身份和认证服务验证 agent_id 已注册并绑定到正确的 data_subject_id
  3. 凭证上的 authorized_scopes 字段确认 self_query 被允许

授权验证

授权验证服务向用户企业节点的授权管理器发送授权检查 RPC:

  1. data_subject_id 是否有 self_query 使用范围的活跃授权记录?
  2. agent_id 是否在该授权记录下被列为允许的 Agent?

self_query 授权在 Tacet 账户设置时已授予,存储在用户的 Vault 中。企业节点返回是/否验证结果,不导出授权记录本身。

语义解析

语义注册服务将查询范围解析为规范属性:

  1. transaction_merchant(直接可查询,commerce 领域)
  2. transaction_amount(直接可查询,commerce 领域)
  3. transaction_date(直接可查询,commerce 领域)
  4. transaction_categorydining(通过分类过滤规则派生)

隐私预算预留

隐私预算预留服务向用户企业节点的隐私预算账本发送预留 RPC:

  1. 根据查询范围(90 天窗口,按商户细分)计算请求的消耗量
  2. 预留从委托凭证中的 self_query 预算分配中扣除,而非第三方任务参与预算
  3. 如果预算可用,账本返回预留确认;如果已用尽,准入失败,Agent 通知用户

TaskEnvelope 组装

准入成功后,准入平面生成包含以下内容的 TaskEnvelope

  1. 解析后的规范属性和派生规则
  2. budget_reservation_ref:隐私预算预留的引用
  3. agent_credential_ref:保留供下游验证使用
  4. delivery_endpoint:委托凭证中的设备端点
  5. 准入时的 semantic_versionpolicy_version

4. 执行调度与 TEE 推理

任务编排器将 TaskEnvelope 调度到用户的企业节点。

企业节点的计算运行时:

  1. 接收执行分配,包括 TEE 需求标志(因为查询访问原始记录材料而设置)
  2. 从 Vault 记录存储中加载 90 天窗口内的相关餐饮交易
  3. 将记录传递给本地 TEE enclave,使用 enclave 的公钥加密
  4. 在 enclave 内,记录被解密并进行大模型推理调用——模型对商户明细进行推理,检测到一个新商户(Blue Bottle,中城区)贡献了 40% 增长中的 28%,整体就餐频率也增加了 12%
  5. enclave 生成一个结构化的 SliceResultBundle,包含因果摘要和支持数据点
  6. enclave 生成一个 AttestationReport,将计算链接到已验证的 enclave 测量值、平台身份和新鲜度随机数
  7. enclave 清除所有记录材料

企业节点将 SliceResultBundleAttestationReport 返回给任务编排器。

5. 验证

主集群上的结果验证服务验证结果:

  1. 检查 AttestationReport:enclave 测量值与注册代码匹配,平台未被撤销,新鲜度随机数有效
  2. 根据声明的查询范围验证 SliceResultBundle 承诺
  3. 确认 Agent 凭证绑定:结果被授权投递到委托凭证中指定的 delivery_endpoint

如果认证或承诺验证失败,任务被拒绝,隐私预算预留被释放,Agent 收到失败响应。

6. 结果投递与隐私预算提交

验证成功后:

  1. 主集群将结果投递到委托凭证中指定的 delivery_endpoint——一个到用户 Tacet 应用实例的加密通道
  2. 企业节点上的隐私预算账本收到提交 RPC,更新 data_subject_idself_query 范围下的已提交消耗记录
  3. Tacet 应用解密并展示结果:"你的餐饮支出增长了 40%。主要原因是一家新咖啡店(你新办公室附近的 Blue Bottle)贡献了 28% 的增长。你上个月还多外出就餐了 3 次,贡献了剩余的 12%。"

7. 结算与审计

由于任务提交者是用户自己的 Agent,self_query 任务的结算模型不同于第三方任务结算:

  1. 不锁定 SYM 托管——Agent 发起的自查询消耗用户预分配的 self_query 隐私预算,但不触发外部任务提交者支付的费用
  2. 任务生命周期仍然生成完整的证据链:TaskEnvelopeSliceResultBundleAttestationReport、隐私预算提交记录
  3. 证据存储在企业节点的执行转录存储和主集群的审计日志中,使 Agent 的数据访问对用户完全可审计
  4. 用户可以在 Tacet "数据访问日志"中查看:在该日期,其 Tacet Agent 查询了 90 天的餐饮数据以回答一个因果问题——包括使用了哪个 Agent 凭证以及消耗了多少隐私预算

协议扩展点

本场景要求对现有 SCP/SCS 规范进行两项扩展:

AgentCredential 作为一等身份构造

当前参与者模型覆盖了节点和数据生产者的 S_masterS_enterpriseS_producer 质押层级。AgentCredential 是一种新的、非质押的授权原语:它不代表网络中的节点,而是代表一个代表已注册数据主体行事的经授权软件 Agent。参与者注册表和身份认证服务需要支持 AgentCredential 记录的注册、验证、过期和撤销。

self_query 预算范围

现有隐私预算模型按数据主体、按使用范围(如 marketingtraining)追踪消耗。self_query 范围——数据主体既是查询的消费者又是查询的对象——需要在预算模型中明确处理,以区别于第三方任务参与。关键语义差异在于:数据主体直接控制并可补充此预算分配,而第三方任务参与预算由企业节点中持有的授权记录管理。