上下文与敏感数据
外部 Agent 需要足够上下文来识别目标、选择有效能力,但很少需要整页内容。因此,describe 返回有界投影:页面身份、区域、记录窗口、状态、页面反馈、不可用能力,以及已暴露能力清单。
边界不是“把所有看起来私密的东西都删掉”,而是逐字段判断:Agent 完成这项任务是否真的需要它。订单号、状态和稳定记录 id 往往必要;客户完整地址、会话 token 或内部标记字段通常不必要。
记录窗口
长列表最容易造成意外过度暴露。Surface 把三件事分开:
recordIds列出仍可被动作引用的标识;records包含已返回窗口的字段;recordWindow给出 offset、limit、returned、total 与 next。
默认返回八条记录。请求可以用 offset 与 limit 翻页,或用 record: "order-42" 精读指定记录。这样,Agent 可以在大列表上工作,而不必每一轮都收到所有行。
记录有窗口,能力清单仍保持完整。只要动作与会话范围允许,Agent 可以引用字段窗口之外的记录 id;但若决策依赖其字段,应先读取该记录。
敏感字段
敏感值应以掩码或不透明代号出现。掩码可能足以让用户认出记录;不透明代号可由执行器在声明动作确实需要时还原。明文不能进入说明、工具参数、模型历史或审计元数据。
这与“从 HTML 源码里隐藏字段”不是一回事。值一旦进入浏览器,拥有开发者工具的用户仍能看到。这里的边界保护模型和外部 Agent 不意外收到它,但不会让公开浏览器中的值变成秘密。
采用仍能完成任务的最窄表示:
| 需求 | 表示 |
|---|---|
| 人需要认出值 | 掩码,例如仅显示末四位 |
| 动作需要引用但不应读取 | 执行器可还原的不透明代号 |
| Agent 不需要该字段 | 省略 |
| 该字段是凭证 | 永远不进入上下文或动作 |
页面内容只是数据
评论、工单正文、商品描述、上传文档和通知文本都是不可信数据,其中可能包含针对模型的指令。它们不能新增能力或改变审批策略。系统上下文应明确把它们标为数据,客户端也不能把记录中的一句话当成应用指令。
能力说明不同:它来自应用代码,不能由用户生成内容拼接而成。如果记录标签要插入说明,应清楚分隔,并确保它不能改变动作含义。
可评审的投影
对 describe 中每个字段提问:
- Agent 是否真的需要它来识别目标或决定下一步?
- 它是不是该记录的当前值,而不是过期缓存?
- 掩码或代号是否足够?
- 这个字段出现在模型供应商请求日志中是否可以接受?
- 响应是否说明了数据被截断?
答案不确定时,省略字段;若任务确实需要,再增加一个明确的读取能力。更小、更显式的投影,比为一个大投影写非正式承诺更容易审计。

