先这样答
提示词注入主要有四类:直接注入、间接注入、角色扮演绕过和编码混淆。防御不能只靠模型自己判断,还要在输入、内容、工具和动作几个位置加限制。
直接注入是用户在输入里夹带指令,试图改变原本的任务或规则。角色扮演绕过是让模型进入某种身份,再用这个身份绕开原有约束。这两类主要依靠输入输出过滤,识别并过滤不合适的指令和生成内容。编码混淆则把指令改成 Base64 等变体,处理时也要把这类表达纳入过滤范围。
间接注入来自检索内容或网页。攻击者把指令藏在外部内容里,模型读取后可能把它当成任务要求。它是 RAG 和浏览类 Agent 的主要威胁。防御时要给检索内容加隔离标记,明确它不与用户指令处于同一级别。Agent 调工具时要使用工具白名单,并遵守权限最小化原则。涉及高危动作时,必须让人工确认后再执行。
面试官会怎么追问
-
「直接注入和间接注入的核心区别是什么?」 直接注入发生在用户输入里,用户直接夹带指令。间接注入发生在检索内容或网页里,模型在读取外部内容时接触到隐藏指令。后者是 RAG 和浏览类 Agent 的主要威胁。
-
「为什么检索内容不能和用户指令放在同一级?」 检索内容可能携带攻击者藏进去的指令。给它加隔离标记,可以明确它只是外部内容,不能直接改变用户任务。这样能减少模型把内容当成高优先级指令的风险。
-
「如果模型已经被注入,怎么避免它继续造成影响?」 先用工具白名单限制它能调用的工具,再用权限最小化限制工具能做的事。涉及高危动作时,不让 Agent 自动执行,必须经过人工确认。输入输出过滤也要同时保留,拦截不合适的指令和结果。
回答的坑
-
只说“加强提示词”不够,因为间接注入还需要隔离检索内容,并限制工具和权限。
-
只提直接注入会漏掉网页和 RAG 中的间接注入,也会漏掉角色扮演绕过与 Base64 变体。
同系列的题