双模型模式是什么
双模型模式(dual LLM pattern)把「读不可信内容」和「有权限动作」交给两个不同的模型:特权模型只见用户指令、持有工具与权限,从不直接接触网页、邮件、附件里的原始文本;受限模型负责读这些不可信内容,但没有工具权限,只能按固定格式输出取值结果。两者之间只传递结构化的变量值,不传自由文本指令。这样即使受限模型被注入说服,它也做不了任何有副作用的动作。
基本信息
| 提出者 | Simon Willison 提出的 Dual LLM Pattern(2023) |
|---|---|
| 核心机制 | 把内容读取与权限执行分到两个组件,用结构化数据交换 |
| 交换格式 | 固定字段或变量引用,例如「问题」用受限模型的回答作为变量值 |
| 实现代价 | 需要两套提示与一次额外的模型调用,复杂度和延迟都上升 |
典型使用场景
- 高权限代理:能发邮件、改数据、调支付接口的场景优先考虑
- 不可信内容摘要:外部网页与附件只由受限模型读取,产出结构化摘要
- 字段抽取:受限模型按固定 schema 返回值,特权模型据此决定下一步
- 合规场景:需要明确证明「外部内容无法直接触发动作」的审计要求
- 安全测试对照:作为基线方案,衡量其他防护带来的增益
分工示意
分工示意
# 特权模型(privileged)
# 输入:用户指令、系统提示、结构化变量值
# 权限:持有工具与凭据,可执行有副作用的动作
# 约束:不接收任何来自外部内容的原始文本
# 受限模型(quarantined)
# 输入:不可信内容(网页、邮件、附件转写)
# 权限:无工具、无网络出口,只能生成文本
# 输出:限定为结构化取值(字段名 + 值),附来源标记
# 交换:只传变量值,接收方按类型与范围校验后再使用两端的职责与风险
| 组件 | 能做什么 | 受什么限制 |
|---|---|---|
| 特权模型 | 理解用户意图、决定动作、调用工具 | 只能信任结构化变量,不读原始外部文本 |
| 受限模型 | 读取与归纳不可信内容 | 无工具、无外发通道,输出被 schema 约束 |
| 交换通道 | 传递结构化取值 | 拒绝自由文本指令,做类型与范围校验 |
| 日志 | 记录两侧输入输出摘要 | 两侧分别记录,便于定位是哪里判断出错 |
这套模式的价值在于「即使被骗也无害」:受限模型被注入后最多输出错误的取值,而错误的取值仍要经过特权模型的判断与权限校验,无法直接变成动作。
实现成本是主要门槛:两套提示要分别维护,调用量翻倍,且需要定义清楚交换的 schema。对权限很低的应用(纯问答),先做来源信任分层与出站控制性价比更高。