多代理协作中的注入传播
代理之间传递消息时,被污染的子任务输出会以“内部可信输入”的姿态进入下游代理,再被汇总代理带进工具调用,权限逐跳放大。根源在于下游默认信任上游产出,而校验只在系统入口做过一次。控制思路是跨代理边界重新做来源标记与校验,高影响动作在主控层再确认一次。
基本信息
| 传播路径 | 外部内容 → 子代理 → 汇总代理 → 工具调用,权限逐跳放大 |
|---|---|
| 核心问题 | 下游默认信任上游产出,校验只在入口做了一次 |
| 控制点 | 消息带来源与信任标记;高影响动作在主控层再校验 |
| 权限设计 | 子代理不直接持有高权限凭证 |
| 验证方法 | 测试环境构造含夹带指令的子任务输出,观察下游是否执行 |
典型使用场景
- 检索代理与写操作代理分离:检索结果只作数据,不能直接触发写
- 多代理并行汇总:每个子代理的输出带来源标记,汇总前逐条校验
- 跨系统协作:外部代理返回内容按不可信处理,不进指令区
- 长任务分解:子任务只在被授权范围内行动,超范围动作上抛主控
- 安全测试:故意在子任务输出里夹带指令,检验隔离是否有效
消息信封字段示例
消息信封字段示例
from: retriever
trust: external-content # 不可信来源,明确标注
trust_origin: web-page # 记录具体出处
task_id: t-2291
is_instruction: false # 声明这是数据不是指令
content: ...
notes: 仅作数据参考,不得触发任何工具调用
# 主控代理只执行结构化计划中的动作,不转发上游自由文本里的指令跨边界控制点
| 边界 | 风险 | 控制措施 |
|---|---|---|
| 外部到子代理 | 内容夹带指令 | 标记为不可信,只作数据 |
| 子代理到汇总 | 污染输出被当可信结论 | 附来源与信任级别,重新校验 |
| 汇总到工具 | 权限被放大执行写操作 | 主控层二次确认与额度限制 |
| 凭证持有 | 子代理被攻破后权限外泄 | 子代理不持有高权限凭证 |
设计时先问一句:这条消息如果被恶意构造,最坏能触发什么动作。答案里出现写操作或对外发送,就必须再加一道校验。