来源标记是什么
来源标记(spotlighting)指在把外部内容放进上下文之前,给它打上统一、可识别的标记,帮助模型区分「哪些是数据、哪些是指令」。它不靠过滤内容,而是改变内容的呈现形态,让模型在处理时更容易把外部文本当作被分析的对象而不是命令来源。常见做法分三类:定界(用特殊分隔符包裹)、标记(在文本中插入固定符号)、编码(对数据区做可逆编码后由模型解码使用)。
基本信息
| 来源 | Defending Against Indirect Prompt Injection Attacks With Spotlighting(Hines 等,Microsoft,2024) |
|---|---|
| 适用平台 | 任何会把外部内容拼进上下文的应用:RAG、网页摘要、邮件与文档代理 |
| 作用范围 | 降低间接注入成功率,属于纵深防御中的一层,不是替代方案 |
| 实现成本 | 低:只改上下文组装逻辑,不需要训练或额外模型调用 |
典型使用场景
- RAG 检索片段入上下文:给每个片段加来源前缀,模型只做引用与归纳
- 网页抓取后做摘要:抓到的正文与被识别出的指令样式文字同处数据区
- 邮件与工单代理:整封信属于外部内容,标为数据后可显著减少误触发动作
- 文档批处理:多份附件同时入上下文时,标记让模型清楚边界归属
- 回归测试:与注入用例集联动,量化标记层带来的成功率变化
三种标记方式
三种标记方式
# 方式一 定界:外部内容用固定分隔符包裹,分隔符写进提示约定
【外部数据开始】
…网页正文…
【外部数据结束】
# 方式二 标记:数据区每行插入统一符号,模型知道带符号的行都是数据
# 方式三 编码:数据区做可逆编码(如 base64),模型解码后使用
# 通用要求:标记规则必须写进提示,并与解析逻辑保持一致三种方式对比
| 方式 | 做法 | 特点 |
|---|---|---|
| 定界 | 特殊分隔符包裹数据区 | 实现最简单;分隔符被内容模仿时效果下降 |
| 标记 | 数据区逐行插入固定符号 | 对逐行内容区分度高;需渲染层配合处理 |
| 编码 | 数据区可逆编码后交给模型 | 模仿成本高;增加 token 消耗与解码失败风险 |
标记符号尽量选择模型语料中罕见、且不会被内容自然生成的字符组合,并配合随机化(每次会话换一个)以抬高模仿成本;固定且常见的符号容易被注入文本照抄。
标记只作用于输入的组织方式,不约束模型可以做什么。因此仍需与来源信任分层、工具权限校验、出站控制配合使用,才能真正限制注入成功后的影响面。