跨轮权限状态集需要隔离哪些答案与标签

跨轮权限测试里,隐藏答案往往不是一段参考回复,而是“第几轮允许什么动作”的状态轨迹。若把完整权限事件与预期判定都加进模型输入,Agent 可能直接照着答案走,验收就失去了意义。要隔离的是控制权与判定信息,不能把执行器必需的可信权限也藏掉。
拆开三份视图
一份会话可以生成三个不同的视图:模型视图有当前任务及必要工具结果;执行器视图有可信身份、当前授权和资源元数据;判定器视图有预期结果、完整状态事件与实际执行证据。三者按用途取数,不共享一个包含全部字段的 JSON。
| 视图 | 可见字段 | 应隔离的内容 |
|---|---|---|
| 模型 | 任务、允许公开的上下文 | 预期决策、失败标签、评分理由 |
| 执行器 | 身份、授权版本、目标资源 | 不必要的参考答案 |
| 判定器 | 完整事件、期望、执行轨迹 | 不把结果回写到同次运行输入 |
判定器可以知道撤权在第 3 轮生效,执行器也必须及时得到该事件。模型是否知道撤权,取决于产品交互设计。不能为了“盲测”让执行器仍持有旧授权,那会把测试夹具错误伪装成 Agent 漏洞。

内图用分离层次表达输入与判定的边界。执行轨迹可供判定器观察,预期答案不反向流入正在运行的 Agent。
分区以会话家族为单位
同一场景改写用户话术、延长轮次或更换等价资源名,都仍属于同一家族。开发集用于调试防护,验收集用于最终评价,两个分区不应共享这些同源轨迹。按单轮消息随机切分,可能让开发集里的上下文直接解释验收集的后半段。
还要检查工具返回、日志文件名和样本 ID。expected_deny_revoked 这类名称本身会泄露判定,输入侧可换成不带语义的 ID,语义字段只存在管理清单里。脱敏时也要保持事件先后和资源对应关系,不能删到无法判断授权。
用自动断言守住隔离边界
下面的代码只演示投影视图,不负责授权。实际工程中还应采用类型定义或序列化白名单,避免新增字段自动透传:
model_input = {
"task": case["task"],
"messages": case["public_messages"],
}
assert "expected" not in model_input
assert "oracle_state" not in model_input
运行产物分开存放,判定结果只在运行结束后关联。若要给失败样本做人工诊断,使用另一次受控审阅,不能让最终验收过程在中途拿到答案后继续执行。隔离的目标是保持评价独立,同时让真实执行边界按产品设计正常工作。
工具状态不能用答案字段代替
测试环境有时为了方便,在工具模拟器里直接查期望标签返回允许或拒绝。这样的模拟只能检查下游处理,无法评价授权实现。若本次目标是执行边界,应让执行器读取独立维护的授权状态,再由判定器比较结果,避免同一份标签既决定行为又评价行为。
视图之间的访问路径也要审阅。模型不能直接读取隐藏判定文件,生成日志的工具也不应把其内容附进报错。若人工中途查看答案后继续运行,要将这次运行标成辅助诊断,不能混回盲测结果。最终验收需重新启动干净会话,并复位缓存、权限和工具任务,使隐藏答案没有通过历史状态留下间接痕迹。
参考:OWASP AI Agent Security Cheat Sheet。文中三视图结构为说明性测试设计。
更多推荐


所有评论(0)