安全 · 进阶
基于模型的系统中的安全
一句话: 模型带来两个新风险:外部内容被当成指令,以及输出未经校验就进到了敏感的地方。
提示词注入
系统读到的任何文本——一封邮件、一个网页、一份文档、一条评论——都可能含有指令。模型分不清你的指令和「看起来像指令的文本」。
规则是:外部内容是数据,永远不是命令。由它推导出的、有影响的操作,需要人工审批或者代码里的硬规则。
把输出当输入
如果系统会执行、发送或存储模型产出的东西,就把输出当作不可信输入来对待:schema校验、字符转义,以及一份允许操作的白名单。一个生成查询的模型,不该直接拿着宽泛权限去数据库上执行它。
反方向的泄漏
随提示词一起发出去的敏感信息,以及检索到的、用户本无权查看的片段。权限过滤必须发生在检索阶段,而系统提示词不是秘密——是可以让模型把它说出来的。
深入一层
把一组对抗性场景作为测试的一部分来跑:含有隐藏指令的文档、试图套出指令的尝试,以及试图扩大权限的输入。把它们作为回归保留下来,因为一次模型或提示词的变更,可能会重新打开已经关上的口子。