基础概念
什么是提示词注入?
语言模型无法可靠地区分你的指令和藏在它正在阅读的内容——网页、文档、工具结果——中的指令。提示词注入究竟是什么、为什么更聪明的模型也无法彻底解决它,以及一旦发生时是什么在限制损失。
全部文章 · 最近核实:
两种形式:直接和间接
直接注入是有人直接在对话里输入指令,试图覆盖系统本应有的行为——要求模型无视自己的指令、泄露隐藏的配置,或在预定范围之外行动。间接注入是后果更严重的形式:指令被埋在模型代表你阅读的内容里——一个网页、一封邮件、一份文件、一次 API 响应——这些内容本不该被模型当作命令,但模型没有可靠的方法把它们和真正的命令区分开。
为什么更聪明的模型不能靠自己解决这个问题
问题不在于模型不够聪明,而在于架构本身。模型看到的一切,无论是你的请求还是从不可信来源取来的文本,一旦进入上下文窗口,就变成同一种词元序列。不存在一条独立的、防篡改的通道来区分"可信指令"和"待阅读内容"。能力更强的模型或许更擅长识别常见的注入话术,但一条足够巧妙地伪装过的指令——分散在文本各处、间接表达、藏在格式里——仍然可能溜过去,因为底层架构本身没有可以强制执行的硬边界。
一旦模型能调用工具,风险就会急剧上升
一个只生成文本的聊天机器人,把注入的影响限制在糟糕或误导性的输出上——烦人,但被限制住了。一旦模型能调用工具(参见工具调用的原理)——发送邮件、执行命令、修改文件——一次成功的注入就可能变成一次不受欢迎的现实动作,而不只是一句糟糕的话。这就是为什么把网页浏览或文档阅读与工具访问结合起来的系统,比纯聊天机器人承担着明显更高的注入风险。
过滤和限权能降低风险;但两者都无法彻底消除风险
扫描获取到的内容以寻找已知的注入模式能拦截一部分尝试,但任何固定的模式列表都可以通过换一种说法来规避——这是一层过滤,不是保证。更可靠地降低实际损失的做法,是限制模型被允许做什么,而不管它被告知了什么:把工具访问权限收窄、在破坏性或对外产生影响的操作前要求审批,并且永远不给模型超出眼前具体任务范围的常设权限。
模型读取的内容是不可信的输入,不是中立的事实来源
任何让模型读取外部内容的系统——一条搜索结果、一个抓取到的网页、一份用户上传的文档——都在把它暴露给没人要求过的指令。实际的做法是把这类内容当作在其他任何软件里对待未经验证的用户输入那样对待:假设它可能包含带有恶意的内容,并把周围的系统设计成即使注入成功,影响范围也是有限的,而不是假设注入根本不会发生。
常见问题
- 提示词注入能被完全防止吗?
- 不能,现有的模型架构做不到。用户的指令和模型从别处读取的文本之间,不存在内置的、防篡改的分隔,所以过滤和限权能降低风险、限制损失,但无法保证彻底防止。
- 提示词注入和越狱是一回事吗?
- 两者有重叠,但并不相同。越狱通常指用户直接尝试让模型绕过自身的准则。提示词注入更常指藏在模型代表用户阅读的内容里的指令,用户本人对此并不知情。
- 对于不能使用工具的聊天机器人,提示词注入还重要吗?
- 风险较小——成功的注入可能产生误导性或被操纵的回答,但无法采取超出生成文本之外的行动。一旦模型能调用会在对话之外做点什么的工具,风险就会显著上升。
- 扫描内容寻找注入模式,这样的防护够吗?
- 它能拦截已知的、可识别的尝试,但任何固定的模式列表都可以通过改写来规避。真正的防护还来自限制模型被允许做什么——收窄的工具权限范围,以及对有实际后果的操作要求审批——而不仅仅依赖检测本身。
与其阅读,不如亲自试试
ClawAI 的研究服务会扫描获取到的网页内容,寻找已知的提示词注入模式,并在这些内容到达模型之前,遮蔽看起来像密钥的词元——它记录检测到的内容,而不是悄悄拦截,因为没有任何固定的模式列表能抓住每一次尝试。这一层检测只是防御体系的一部分,防御体系同样依赖于限制模型一开始能调用哪些工具。