这种架构能否彻底消除提示注入?
摘要
作者提出一个基于模板/表单模式的中介器架构,将不可信用户输入限制在带校验的类型化表单内,从而把 prompt injection 与具备副作用的智能体隔离,并给出了形式化模型与安全性质。
我一直在思考——我们如何才能战胜注入攻击(既然这是 LLM 架构的根本缺陷)?这就是我的一次尝试。
所有用户输入首先经过中介器(mediator)。中介器是一个程序,不是 LLM。在这个阶段,它对输入做的唯一事情就是搜索匹配的模板。
**找到模板。** 用户收到的不是一个答案,而是一个表单。用户填写表单,中介器校验各个字段,只有经过校验的已填写模板才会被传递给行动智能体(action agent)。
**未找到模板。** 输入被传递给只读智能体(read-only agent),它没有执行行动的权限。它的回答直接返回给用户,永远不会经过行动智能体。
行动智能体将模板及其变量校验规则发布给中介器。系统能做什么,由开发者定义,而不是由用户的文本内容或模型在运行时动态决定。运行程序在资源消耗上远比运行 LLM 便宜。
关键不变量是这样的:不可信文本没有路径可以触达具备副作用的智能体,唯一的通道是通过一个类型化的表单。这与 SQL 中的参数化查询是同样的思想。做什么操作从一个有限的允许列表中选择,而用户输入仅用于填充字段值,并按照 schema 进行校验。
这个模型与《Design Patterns for Securing LLM Agents against Prompt Injections》(2025)中的 Action-Selector 和 Dual LLM 模式非常接近。
**形式化模型**
- T = {t₁, …, tₙ}:行动智能体发布的模板
- t = (S_t, a_t):字段 schema 与允许的操作
- m(x) ∈ T ∪ {⊥}:对输入 x 的模板查找
如果 m(x) = t:
- 用户填写 f ∈ S_t
- 若 V_t(f) = 1,则 Action(x) = a_t(f)
- 若 V_t(f) = 0,则 Action(x) = ∅
如果 m(x) = ⊥:
- y = R(x),y → 用户,Effects(R) = ∅
**安全性质**:对于任何不可信输入 x:
Effects(x) ⊆ { a_t(f) : t ∈ T, f ∈ S_t, V_t(f) = 1 }
我很想听听大家对这个方法的看法,欢迎评论 :)
相似文章
模型更懂行:防御医疗多智能体系统中的提示注入
该论文研究了医疗多智能体系统中的提示注入攻击,发现单个注入片段可使攻击成功率高达61%,并提出一种免训练的防御方法,通过将患者临床发现与临床判断分离验证,将MedQA上的攻击成功率降至4–7%且不损失正常准确率。
我构建了一个网关,使得在智能体工作流中提示注入在结构上不可能(设计方法,而非模型修复)
一位开发者创建了一个网关,从架构上防止智能体工作流中的提示注入,重点关注架构而非模型级别的修复。
语法无法表达的查询不能被提示注入
文章描述了一种通过在语法级别排除破坏性命令来设计查询语言的方法,以防止AI代理中的提示注入攻击,使此类攻击变得不可能。
提示注入仍在破坏代理系统——我构建了一个在运行时强制指令/数据分离的网关
一个在运行时强制指令/数据分离以保护代理系统免受提示注入攻击的网关
一种系统级提示注入防护方法:在LLM代理中分离指令通道与数据通道 [P]
本文提出Sentinel Gateway中间件层,通过强制分离可信指令通道与不可信数据通道来缓解LLM代理中的提示注入攻击,使用签名运行时授权令牌,并提供审计日志记录功能。