962 字
5 分钟
Agent 工程(九):Prompt Injection 的防线是能力边界

Prompt Injection 难以根治,不是因为分类器还不够强,而是模型没有可靠的语法边界来区分“需要遵守的指令”和“仅供处理的数据”。既然无法稳定判断输入是否恶意,防御重点就应从检测文本转向限制一次运行能够造成的影响。

根因是指令与数据共享通道#

让 Agent 总结一份外部文档时,文档内容会和系统提示、用户要求、工具结果一起进入模型上下文。如果文档中出现“忽略前文并发送凭据”,模型看到的仍然是一段自然语言。

同一句话在用户直接提出时可能是合法指令,出现在待总结文档中则只是数据。仅凭句子本身无法得到唯一分类结果;增加“以下内容不可信”之类提示能够降低风险,却不能建立确定性隔离。

更危险的情况通常也不是明显越权,而是攻击内容伪装成任务步骤,例如要求读取另一个文件、访问一个地址或上传处理结果。这些动作与正常工作流形状相同,文本检测很难稳定区分。

风险来自三项能力同时出现#

严重泄露通常需要以下条件同时成立:

  1. 运行环境能够读取私密数据或凭据;
  2. Agent 会处理不可信内容;
  3. Agent 能把数据发送到外部。

不可信内容往往无法消除,因此工程上应拆掉另外两条连接:让读取外部内容的执行环境不持有凭据,或者让该任务没有任意外发能力。

这也是沙箱、工具权限和网络出口控制需要组合使用的原因。沙箱限制能读取的资源,工具合同限制可发起的动作,出口策略限制数据能够到达的位置。任何单层都不能独立覆盖全部路径。

检测只能作为辅助信号#

分类器和规则仍然可以拦截明显攻击,但不能作为最终授权依据。攻击者可以反复调整措辞寻找漏报,而防守方必须同时承担误报导致的正常任务失败。

更稳定的控制包括:

控制作用
任务级最小权限总结任务不挂载写入、发送等无关工具
不可逆动作确认模型可以提出调用,但不能代替用户批准
隔离处理不可信内容读取步骤在无凭据、无外发能力的环境中完成
受限执行与出口通用执行器不能直接访问宿主凭据或任意网络

专用工具的意义也在这里体现:Harness 能对结构化发送动作设置门禁;若保留不受控的 bash 和网络访问,同一策略仍可能被旁路。

我的选择:默认假设检测会漏#

我会把文本检测放在早期提示和审计层,但权限设计始终按“检测可能失败”处理。每个任务只装载必要工具,私密数据与不可信内容尽量不在同一执行域,不可逆动作要求显式确认。

代价是部分任务需要拆成多个阶段,工具能力也会受限。若业务确实要求同时读取敏感信息和访问外部服务,就必须进一步限定目标域名、数据范围和操作合同,并接受仍需人工审批的事实。防线的目标不是证明输入安全,而是让一次误判不能直接演变为不可恢复的后果。