用例:Tacet AI Agent——基于 TEE 的隐私保护财务查询
版本:v1.0(草案) 状态:草案 权威性:参考性
场景
一位 Tacet 用户向 AI Agent 提出了一个复杂的财务问题:"为什么我这个月餐饮支出涨了 40%?"
Tacet Agent 判定该问题需要 90 天交易记录分析和因果推理,超出了端侧模型的能力范围。Agent 将查询路由到远程 Vault 路径——代表用户向 Symphony Core System 提交一个 query 任务,并附带用户预授权的委托凭证。查询在 Symphony 企业节点上经过认证的 TEE 中执行,结果返回到用户设备并在 Tacet 应用内展示。
本用例为参考性文档,展示了 SCP 和 SCS 规范如何支持一种新的参与者类型——代表数据主体行事的 AI Agent——以及标准任务生命周期如何处理 Agent 身份、委托授权和单用户推理查询的隐私预算消耗。
本文使用的规范术语遵循 SCP 协议概览 和 SCP 核心规范。
为什么这个用例很重要
本场景之所以有价值,是因为它展示了现有用例未能完全覆盖的若干特性:
- 任务提交者是一个在用户签发的委托凭证下运行的 AI Agent,而非人类操作员或企业系统
- 数据主体与发起任务的一方是同一个人——用户在查询自己的 Vault,而非第三方查询消费者记录
- 查询涉及单个 Vault,无需多 Vault 扇出,但仍需 TEE 执行,因为计算涉及的敏感记录材料不得以明文离开企业节点
- Agent 身份必须在用户不在线时由主集群独立验证
- Agent 发起查询的隐私预算消耗必须按数据主体精确追踪,与外部提交的任务完全一致,因为隐私预算模型不对自查询做例外处理
- 结果必须投递到 Agent 的设备端点,而非任务提交者的 API webhook
因此,它验证了协议可以将委托 AI Agent 访问作为一等模式来支持,而不会创建削弱授权或隐私预算执行的特殊旁路。
入口区分
本场景包含两个不同层面:
- Tacet 应用内的用户侧对话交互
- 具有显式授权、预算和执行约束的协议认可的查询工作
用户的自然语言问题("为什么我这个月餐饮支出涨了 40%?")本身不是协议事件。只有当 Tacet Agent 将其转化为携带用户预注册 Agent 委托凭证的结构化授权 query 任务时,它才进入 SCP 生命周期。
与收据上传或优惠券活动场景不同,本用例涉及:
- 新的任务提交者子类型:
AgentCredential持有者代表已注册的数据主体行事,而非代表企业或广告商 - 针对单用户、单 Vault 的执行,Vault 中包含该用户自己的私有记录
- TEE 执行不是为了跨 Vault 隔离,而是因为原始交易记录在 enclave 内推理前必须保持加密状态
- 隐私预算预留范围限定在单个数据主体(
budget_scope: self_query),由用户在 Tacet 账户设置时预授权 - 结果投递到委托凭证中标识的设备端点,而非通用的任务提交者 webhook
协议视角
从协议角度看,本场景将用户的对话式查询转化为可验证的、预算受限的推理结果,专属返回给该用户的授权 Agent 端点。
1. Agent 委托注册
在任何运行时查询发生之前,用户在 Tacet 入驻时注册委托凭证。这是一次性设置步骤,而非每次查询都需要。
委托凭证包含:
agent_id:该用户的 Tacet Agent 实例在协议中注册的稳定标识符,绑定到用户设备data_subject_id:用户在 Symphony 协议中的身份authorized_scopes:Agent 可代表用户调用的使用范围集合,如self_query、self_compute和task_participationbudget_allocation:用户为 Agent 发起的自查询预授权的每纪元隐私预算,独立于第三方任务参与预算delivery_endpoint:查询结果应返回到的设备端点(加密通道引用)expiry和revocation_ref:委托凭证具有有限的有效期窗口,用户可随时通过 Tacet 应用或直接通过主节点 API 网关撤销
委托凭证由用户的私钥签名,并在主节点的身份和认证服务中注册。此后,Tacet Agent 可代表用户提交任务,无需用户在线或重新签署每个任务。
2. 查询路由与任务构建
当用户提交自然语言问题时,Tacet Agent 的端侧路由层评估查询是否可在本地处理。
本场景中,路由层判定需要 TEE 路由,原因如下:
- 查询需要跨 90 天连接餐饮记录,超出了端侧模型能高效处理的上下文窗口
- 因果分析("为什么涨了")需要对商户级别的明细和时间序列模式进行推理,受益于更大的模型
- 端侧模型对草稿答案的置信度分数低于应用对财务推理的质量阈值
决定路由到远程 Vault 路径后,Tacet Agent 构建一个 QueryTaskRequest:
task_class: queryagent_credential_ref:引用预注册的委托凭证target_vault:用户在 Symphony 企业节点上的远程 Vaultquery_scope:过去 90 天的餐饮交易,按商户和周分组computation_intent:因果摘要——识别月环比餐饮支出增长的主要商户级和频率级驱动因素semantic_version:请求时的活跃语义版本result_delivery:委托凭证中的设备端点budget_hint:基于查询范围计算的预估隐私预算消耗
Agent 将此请求提交给主集群的 API 网关。
3. 任务准入
主节点集群上的准入平面处理请求:
身份与委托验证
- 网关解析
agent_credential_ref,确认凭证有效、未过期且未被撤销 - 身份和认证服务验证
agent_id已注册并绑定到正确的data_subject_id - 凭证上的
authorized_scopes字段确认self_query被允许
授权验证
授权验证服务向用户企业节点的授权管理器发送授权检查 RPC:
data_subject_id是否有self_query使用范围的活跃授权记录?agent_id是否在该授权记录下被列为允许的 Agent?
self_query 授权在 Tacet 账户设置时已授予,存储在用户的 Vault 中。企业节点返回是/否验证结果,不导出授权记录本身。
语义解析
语义注册服务将查询范围解析为规范属性:
transaction_merchant(直接可查询,commerce领域)transaction_amount(直接可查询,commerce领域)transaction_date(直接可查询,commerce领域)transaction_category→dining(通过分类过滤规则派生)
隐私预算预留
隐私预算预留服务向用户企业节点的隐私预算账本发送预留 RPC:
- 根据查询范围(90 天窗口,按商户细分)计算请求的消耗量
- 预留从委托凭证中的
self_query预算分配中扣除,而非第三方任务参与预算 - 如果预算可用,账本返回预留确认;如果已用尽,准入失败,Agent 通知用户
TaskEnvelope 组装
准入成功后,准入平面生成包含以下内容的 TaskEnvelope:
- 解析后的规范属性和派生规则
budget_reservation_ref:隐私预算预留的引用agent_credential_ref:保留供下游验证使用delivery_endpoint:委托凭证中的设备端点- 准入时的
semantic_version和policy_version
4. 执行调度与 TEE 推理
任务编排器将 TaskEnvelope 调度到用户的企业节点。
企业节点的计算运行时:
- 接收执行分配,包括 TEE 需求标志(因为查询访问原始记录材料而设置)
- 从 Vault 记录存储中加载 90 天窗口内的相关餐饮交易
- 将记录传递给本地 TEE enclave,使用 enclave 的公钥加密
- 在 enclave 内,记录被解密并进行大模型推理调用——模型对商户明细进行推理,检测到一个新商户(
Blue Bottle,中城区)贡献了 40% 增长中的 28%,整体就餐频率也增加了 12% - enclave 生成一个结构化的
SliceResultBundle,包含因果摘要和支持数据点 - enclave 生成一个
AttestationReport,将计算链接到已验证的 enclave 测量值、平台身份和新鲜度随机数 - enclave 清除所有记录材料
企业节点将 SliceResultBundle 和 AttestationReport 返回给任务编排器。
5. 验证
主集群上的结果验证服务验证结果:
- 检查
AttestationReport:enclave 测量值与注册代码匹配,平台未被撤销,新鲜度随机数有效 - 根据声明的查询范围验证
SliceResultBundle承诺 - 确认 Agent 凭证绑定:结果被授权投递到委托凭证中指定的
delivery_endpoint
如果认证或承诺验证失败,任务被拒绝,隐私预算预留被释放,Agent 收到失败响应。
6. 结果投递与隐私预算提交
验证成功后:
- 主集群将结果投递到委托凭证中指定的
delivery_endpoint——一个到用户 Tacet 应用实例的加密通道 - 企业节点上的隐私预算账本收到提交 RPC,更新
data_subject_id在self_query范围下的已提交消耗记录 - Tacet 应用解密并展示结果:"你的餐饮支出增长了 40%。主要原因是一家新咖啡店(你新办公室附近的 Blue Bottle)贡献了 28% 的增长。你上个月还多外出就餐了 3 次,贡献了剩余的 12%。"
7. 结算与审计
由于任务提交者是用户自己的 Agent,self_query 任务的结算模型不同于第三方任务结算:
- 不锁定 SYM 托管——Agent 发起的自查询消耗用户预分配的
self_query隐私预算,但不触发外部任务提交者支付的费用 - 任务生命周期仍然生成完整的证据链:
TaskEnvelope、SliceResultBundle、AttestationReport、隐私预算提交记录 - 证据存储在企业节点的执行转录存储和主集群的审计日志中,使 Agent 的数据访问对用户完全可审计
- 用户可以在 Tacet "数据访问日志"中查看:在该日期,其 Tacet Agent 查询了 90 天的餐饮数据以回答一个因果问题——包括使用了哪个 Agent 凭证以及消耗了多少隐私预算
协议扩展点
本场景要求对现有 SCP/SCS 规范进行两项扩展:
AgentCredential 作为一等身份构造
当前参与者模型覆盖了节点和数据生产者的 S_master、S_enterprise 和 S_producer 质押层级。AgentCredential 是一种新的、非质押的授权原语:它不代表网络中的节点,而是代表一个代表已注册数据主体行事的经授权软件 Agent。参与者注册表和身份认证服务需要支持 AgentCredential 记录的注册、验证、过期和撤销。
self_query 预算范围
现有隐私预算模型按数据主体、按使用范围(如 marketing、training)追踪消耗。self_query 范围——数据主体既是查询的消费者又是查询的对象——需要在预算模型中明确处理,以区别于第三方任务参与。关键语义差异在于:数据主体直接控制并可补充此预算分配,而第三方任务参与预算由企业节点中持有的授权记录管理。