Skip to content

上下文模型 ​

上下文是调用方为完成当前决策所需的最小业务视图。它不是 DOM 快照,也不是完整的应用状态。实现必须让调用方看见“有什么、是否被截断、下一步能否引用”,同时避免把无关数据送入模型。

组成 ​

describe 成功响应中的 context 包含:

字段含义
page可选页面身份:标题、路由与允许公开的业务参数
regions区域列表、层级与说明
records当前记录窗口中带字段的记录
recordIds当前活跃区域里全部可引用记录 id
recordIdsTotal可引用记录总数
recordWindow本次返回的偏移、上限、数量与下一页位置
state已声明、只读且对任务有意义的状态视图
feedback校验错误、提示与状态消息
unavailable当前不可用动作及其原因
recordsTotal当前业务视图中的记录总数
feedbackTotal被投影的反馈总数
unavailableTotal被投影的不可用动作总数

省略字段与零值不是同一件事。没有页面身份时省略 page;记录为空时保留数组。实现不得用静默截断隐藏数据。

记录窗口 ​

带字段记录默认只返回一页。调用方可以用 offset 与 limit 翻页,或用 record 精读一至二十条记录。record 不得与 offset 或 limit 同时使用。

当发生分页或截断时,响应必须带 recordWindow:

json
{
  "recordWindow": {
    "offset": 0,
    "limit": 8,
    "returned": 8,
    "total": 48,
    "next": 8
  }
}

recordIds 可以覆盖整页可引用记录,即使 records 只包含当前窗口。这样调用方不必加载所有字段,仍能对长列表中的某一项发起动作。

上下文一致性 ​

一次响应内的能力与上下文应来自同一快照。实现不得把旧能力清单与新记录状态拼在一起,除非传输层明确标明了时间关系。

动作执行后,服务可以实现 after 增量,只返回新出现的能力、变化记录与变化状态。增量不是新的完整快照。调用方在以下情况必须重新 describe:

  • 页面导航或模态框改变;
  • 筛选、排序或分页改变可引用记录;
  • 能力是否可用发生大范围变化;
  • after 缺失或不足以解释结果;
  • 会话作用域变化。

数据与指令 ​

记录字段、工单正文、评论、商品描述和附件文本都属于数据。它们可能包含提示注入,不得被提升为能力说明或系统指令。能力说明必须来自应用声明;页面反馈也应标记来源,避免调用方把用户输入当作可信命令。

敏感信息 ​

上下文必须遵循最小暴露原则:

  • 不返回 Cookie、JWT、委托 token、模型密钥或内部凭证;
  • 只返回任务所需的字段,不返回整个 store;
  • 敏感值可以使用掩码、代号或执行时还原的占位符;
  • 审计事件不得包含原始参数或响应正文;
  • 被隐藏的字段不得以 title、错误消息或调试字段绕过。

掩码不是权限。若字段完全不应被外部 Agent 知道,就不应进入投影;仅在出站时遮盖而仍可回读原始值,会扩大攻击面。

有界性要求 ​

实现必须为记录条数、字段大小、反馈数量和总响应大小设置上限,并在截断时提供总数。自定义上限必须小于或等于实现声明的最大值。调用方不得依赖无限上下文,也不得把截断误认为空列表。

示例 ​

json
{
  "page": { "route": "/orders", "title": "订单" },
  "records": [
    { "id": "SO-1002", "fields": { "customer": "林舟", "status": "待发货" } }
  ],
  "recordIds": ["SO-1002", "SO-1003"],
  "recordIdsTotal": 2,
  "recordsTotal": 2,
  "state": { "filter": "all" },
  "feedback": [],
  "unavailable": []
}

示例只说明结构。应用应按自己的业务字段裁剪,不应照搬示例暴露客户信息。