Skip to content

模型访问与信任边界 ​

模型不是页面的权威。它选择动作并提供参数;动作此刻是否可用、是否需要确认、目标是否属于当前用户、业务是否真的成功,仍由页面与后端判断。

因此,模型连接同时穿过几道信任边界:浏览器持有用户会话,模型服务接收提示词,网关可能持有供应商凭证,业务后端持有最终授权。把这些部分统称为一个“AI 后端”,会让失败与权限都变得无法推理。

四道边界 ​

边界问题必要控制
页面到模型哪些上下文与工具定义离开浏览器?有界快照、脱敏、显式声明
浏览器到网关谁可以使用模型容量?同源路由、用户会话、额度
网关到供应商使用哪个凭证与模型?服务端密钥、固定上游、白名单
页面到业务后端这次操作是否获准?服务端身份、归属、状态、幂等

生产构建不能包含供应商密钥。VITE_* 变量会被编译进客户端产物。网关不是装饰层;它存在的意义之一,就是让服务端持有的凭证继续留在服务端。

模型可以收到什么 ​

页面发送有界投影:页面身份、相关区域、有限的记录窗口、视图状态,以及当前可用能力的 schema。它不应发送整个 DOM、整个 Pinia 或 Redux store、Cookie、访问 token,或未脱敏的敏感字段。

这不只是保密要求。过量上下文也会增加成本,并让过期或无关数据更容易影响运行。能让模型选择下一步有效动作的最小投影,通常也是最可靠的投影。

提示词注入属于这条边界。评论、工单、商品描述或上传文档中的文字是数据,不能重新定义能力或审批策略。工具描述必须来自应用代码;敏感值应以掩码或不透明代号出站,而不是发送明文。

外部 Agent 与用户自带模型 ​

外部 Agent 可以使用自己的模型和凭证。这属于 Agent 宿主的属性,不构成放宽页面边界的理由。页面仍只暴露已声明能力,传输层仍验证委托会话,业务后端仍校验操作。

不要把“访客填写 API key”做成默认生产路径。如果产品明确支持自带密钥,密钥应进入该产品的安全凭证存储,并有清楚披露、保留期限与撤销方式。把长期供应商密钥放进浏览器输入框和本地存储,是一项独立的安全设计,不是顺手增加的开关。

信任不是布尔值 ​

“用户已登录”不代表“这个 Agent 可以审批这张订单”。权限取决于用户、Agent、租户、会话范围、目标记录、操作和当前业务状态。能力可能可见但不可用;会话可能有效但范围过窄;调用可以通过协议,却在后端授权失败。

这些检查必须彼此独立。Surface 校验包络与暴露范围;页面执行器校验可用性、确认与结果判据;业务后端校验持久业务规则。任何一层都不应默认另一层已经批准了写入。

发布前要回答的问题 ​

上线前,用证据而不是意图回答:

  • 检查浏览器产物时,能否确认没有供应商密钥?
  • 网关是否验证真实应用会话,而不是相信请求体中的用户字段?
  • 模型是否固定或列入白名单,并受用户或租户额度约束?
  • 页面是否只发送这项任务需要的字段?
  • 每次写入是否都有服务端授权与幂等方案?
  • 运维能否在不重发前端的情况下撤销一个 Agent 会话?

所以,模型访问是部署与授权问题,不只是 SDK 配置问题。参见 接入模型网关与 敏感数据与信任边界。