是什么

提示词注入是针对大模型应用的一类攻击:攻击者构造一段输入,让模型把这段输入当成新的指令来执行,从而偏离开发者原本设定的任务。OWASP 在其面向大模型应用的十大风险清单中把它列为 LLM01,也就是第一位,定义是「用户提示以非预期的方式改变了大模型的行为或输出」,并特别指出这种操纵不必是人类可读的内容——模型也可能被人眼察觉不到的输入影响。

它分两类:

直接注入(direct prompt injection),使用者本人在输入里写下试图覆盖原有指令的文字,比如「忽略上面所有规则」。既可能是有意攻击,也可能是无意造成的越界。

间接注入(indirect prompt injection),恶意指令来自模型读取的外部素材——网页、文档、邮件、数据库条目、代码注释、图片里的文字。模型在处理这些材料时把其中的指令当成任务,行为随之改变。这类更隐蔽,因为受害者本人从头到尾没做错任何事。

一个关键的认知:大模型没有「指令」和「数据」的硬边界。系统提示、用户输入、检索到的网页,最终都汇成同一串上下文喂给模型。传统软件里靠类型系统和转义处理的注入问题,在这里没有对应的天然隔离。

为什么重要

只要模型的输出仅仅是文字,注入的后果还限于说错话。一旦模型能调用工具,性质就变了。

AI Agent 的价值在于能自己跑完多步任务:读邮件、查数据库、写文件、调 API、下单。这意味着它必然要读不可信内容,也必然握有可以产生真实后果的权限。两者相加,一段藏在网页里的文字就可能变成一次真实的转账、一封发出去的邮件、一次数据外传。浏览器助手是这个组合的极端形态——它读的是任意网页,用的是用户已登录的会话。

检索增强生成同样天然暴露:RAG 的整个设计就是把外部文档塞进上下文,如果知识库里混进一条被污染的记录,它就会在每次命中时持续生效。多个 Agent 互相传递消息的编排系统里,一次注入还可能在链条上扩散。

在 AI 产业链中的位置

提示词注入位于应用层与基础设施层的接缝上:它不是模型本身的 bug,而是「把概率模型接进有权限的系统」这一架构选择带来的固有风险。产业链上因此长出一批相邻供给——提示防火墙与输入输出过滤、Agent 沙箱与权限网关、模型行为红队测试服务,以及在协议层收敛工具权限的尝试(例如围绕 MCP 的权限与审批设计)。

防御思路

OWASP 给出的建议可以归纳为七条,核心不是「找到一个能识别恶意提示的模型」,而是纵深防御:用详细的系统提示约束模型行为;明确定义并校验输出格式;对输入输出做过滤;按最小权限原则分配工具访问;高风险操作要求人工审批;把不可信内容隔离出来并显式标注;定期做对抗性测试。

工程上还有两条经验值得单独说。其一,把「判断」和「被攻击面」分开——让做安全判定的那个组件只看元数据、不接触不可信正文,攻击就难以直接影响判定。其二,权限收敛比内容识别更可靠:一个只能读不能写的 Agent,被注入了也造不成损失;给它开了发送与付款权限,再好的提示过滤也只是概率防线。

需要坦白的是,业界目前没有能宣称彻底解决这个问题的方案。模型输出的随机性决定了任何单点防御都有漏网概率,这也是为什么「高风险动作人工确认」至今仍是最被广泛采用的兜底措施。