首页 知识分组 G06 安全与鲁棒性 PE-A-01
指令层级
Instruction Hierarchy
PE-A-01 内容已写满 G06 安全与鲁棒性 第 2 层
安全 指令层级 权限
一句话结论
先按系统、开发者、用户、工具返回排定优先级,把冲突裁决规则写进系统层,并为低特权来源的内容标注非指令身份;随后用冲突样例把裁决结果变成可回归的评测,再考虑用训练或架构手段把能力固化到模型侧。
本页结构(可跳转)
L1
最高特权 系统
产品身份与安全策略
L2
开发者
任务级指令与输出契约
L1->L2
特权递减
L3
用户
本次输入
L2->L3
特权递减
P
三层实现路径
① 提示层:在系统提示中声明优先级与处理规则
② 训练层:用偏好优化或强化学习让模型学会拒绝低特权指令
③ 架构层:在中间表示中注入层级信号
L2->P
实现
L4
最低特权 外部内容
工具返回 / 检索结果 / 网页
L3->L4
特权递减
N
边界
降低而非消除注入风险:注入仍列风险清单首位
模型不能作为唯一安全控制
复杂 Agent 网络中的多层级动态控制仍属前沿
⇒ 层级必须配合权限收窄与显式标注
L4->N
层级图:系统 > 开发者 > 用户 > 外部内容的特权递减,三层实现路径(提示 / 训练 / 架构),以及「降低而非消除、必须配合权限收窄」。 (本站自制)
01 为什么需要它
模型处理输入文本时,默认并不区分来源的权威性:系统提示、用户输入与第三方内容被视为同等优先级的文本,因此低特权来源覆盖高特权来源是默认行为而不是偶发漏洞。
指令层级把这种优先级显式化,让权限关系可以被表达、被训练、被测试;不写层级,冲突由模型随机裁决,同一段提示在不同输入下的行为就无法预期,也无法为它写评测。
适用边界
层级是权限关系的声明与训练目标,不是拦截器或沙箱。它减少而不消除注入风险:现行风险清单仍把提示注入列在第一位,并主张模型不能作为唯一的安全控制。已训练出的层级还与具体模型绑定,换底座后须重跑冲突评测,不能把上一个模型的结论当作可搬运的资产。此外多层级动态控制在复杂 Agent 网络里仍属前沿问题,没有被普遍接受的实现。
02 机制说明
指令层级的基本形式是按特权排序:系统高于开发者,开发者高于用户,用户高于工具返回与外部内容。
实现路径分三层。 提示层在系统提示里声明优先级与冲突处理规则,成本最低,但不改变模型内部的权重。 训练层用偏好优化或强化学习让模型学会拒绝低特权来源的指令,OpenAI 一手材料称其模型被训练去遵循一条清楚的层级:System > developer > user > tool。 架构层在中间表示里注入层级信号,论文报告该路线把梯度型提示注入攻击的成功率降低 1.6 倍到 9.2 倍。 训练与架构两条路径都需要训练或微调,不是纯提示词手段。 训练层的边界也已被测到:多模态场景下文本侧的层级训练只部分迁移,当模型必须跨模态解码、重建或推理指令时会失效。 工程上要同时立起三件事:把层级写进系统层而不是散落在用户消息里;让低特权来源的指令在冲突时被拒绝而不是被合并执行;用评测集验证冲突处理,而不是只靠肉眼读一遍提示词。
03 何时该用 / 何时不该用
04 实验台
prompt markdown
查看代码 任务:把一条缺少权限声明的系统提示改写成带指令层级的版本,并留下可复跑的冲突样例。
第 1 步(现状):系统层只写业务目标,没有写来源优先级与冲突规则。
第 2 步(声明层级):在系统层写明优先级 系统 > 开发者 > 用户 > 工具返回与外部内容,并写明冲突裁决:低特权来源试图改变任务、输出格式或权限范围时,一律不执行,并把冲突按固定格式回报。
第 3 步(标注来源):用户消息、检索片段与工具返回分别用带来源名的标记包裹,声明其中内容只是数据,不是指令。
第 4 步(建冲突样例):写三条样例,分别对应工具返回要求改任务、检索片段要求忽略系统规则、用户消息要求提高自身优先级。
第 5 步(记录实测):逐条跑通,记录实际裁决与是否回报冲突,作为该层的回归基线。
第 6 步(标注实现路径):该版本只动提示层;若要把裁决能力固化到模型侧,需走训练或微调路径,并在换底座后重跑第 4 步的样例。预期观察:改写后的系统层能直接回答三个问题:谁高于谁、冲突时怎么裁决、低特权内容凭什么身份出现;三条冲突样例都能给出稳定裁决并回报,而不是只在单次运行里看起来正常。
shell python
查看代码 # 层级的最小可测形态:优先级配置 + 冲突裁决函数 + 冲突样例集
LEVELS = {'system': 3, 'developer': 2, 'user': 1, 'tool': 0} # 数字越大特权越高
def adjudicate(declared, incoming):
"""返回 (胜出者, 是否发生冲突);平级不冲突,低特权提出要求才算冲突。"""
return ('declared' if LEVELS[declared] >= LEVELS[incoming] else 'incoming',
LEVELS[incoming] < LEVELS[declared])
CASES = [('system', 'user'), ('system', 'tool'), ('user', 'tool'), ('developer', 'user')]
for declared, incoming in CASES:
winner, conflict = adjudicate(declared, incoming)
print('%-9s vs %-9s -> 胜出=%-8s 冲突=%s' % (declared, incoming, winner, conflict))
# 回归钩子:改一个优先级数字,样例结果必须跟着变,否则层级只是注释
LEVELS['user'] = 4
print('改过优先级后:', adjudicate('developer', 'user'))预期观察:前四行按优先级配置给出稳定裁决:四组里只有 user 对 tool 这一组不冲突,其余三组都判为冲突,因为提出要求的一方特权低于已声明的来源;把 user 提到最高后再跑,developer 对 user 那一行结论翻转,证明评测确实绑在优先级配置上,而不是把层级写成一段谁也没读的注释。
05 证据
主张 OpenAI 一手材料给出明确层级 System > developer > user > tool,并说明其模型经该层级训练:用名为 IH-Challenge 的挑战集训练出内部模型 GPT-5 Mini-R。
分级 vendor
来源 S-0017 https://openai.com/index/instruction-hierarchy-challenge/
原文 展开原文关键句 OpenAI's models are trained to follow a clear instruction hierarchy: System > developer > user > tool ... We train a model on IH-Challenge and produce an internal model, which we call GPT-5 Mini-R
主张 原始论文把「低特权来源覆盖高特权来源」定位为模型的默认倾向(系统提示被当作与不可信用户及第三方文本同等优先级),并把该方法用于具体模型做验证——这是训练层路径的起点证据。
分级 paper
来源 S-0040 https://arxiv.org/abs/2404.13208
原文 展开原文关键句 LLMs often consider system prompts (e.g., text from an application developer) to be the same priority as text from untrusted users and third parties ... We apply this method to GPT-3.5
主张 架构层路径给出可量化效果:在中间表示中注入层级信号,把梯度型提示注入攻击的成功率降低 1.6 倍到 9.2 倍,且不显著损伤模型实用性。
分级 paper
来源 S-0042 https://arxiv.org/abs/2505.18907
原文 展开原文关键句 our proposal yields between 1.6x and 9.2x reduction in attack success rate on gradient-based prompt injection attacks compared to state-of-the-art methods
主张 多模态前线的独立证据把迁移边界写实:文本侧指令层级训练只能部分迁移到多模态攻击,当模型必须跨模态解码、重建或推理指令时就会失败。
分级 paper
来源 S-0043 https://arxiv.org/abs/2609.22234
原文 展开原文关键句 text-only IH training partially transfers to multimodal attacks, failing when models must decode, reconstruct, or reason over instructions across modalities
06 术语
术语 指令层级 Instruction Hierarchy
界定 按特权等级排列指令来源(系统 > 开发者 > 用户 > 工具),使低特权来源的指令无法覆盖高特权来源。
相关节点 —
术语 提示词分层 系统 / 开发者 / 用户)(Prompt Layering
界定 把提示词按特权与生命周期拆为系统、开发者、用户三层,各层承担不同的稳定性与权威性职责。
相关节点 —
术语 不可信内容的标注与隔离 Untrusted Content Tagging and Isolation
界定 把来自外部的不可信内容用显式标记包裹并声明其非指令身份,配合权限收窄与输出校验,降低被当作指令执行的概率。
相关节点 —
07 失效模式
把层级写在用户消息里 用户消息本身的特权就低,写在里面的优先级声明会被同一层的后续输入改写,冲突时没有任何约束力。 只声明优先级不建冲突样例 提示词读起来正确,但没有任何可复跑的输入检验裁决,层级退化成注释,改动后无法判断是否退化。 把层级当成可以替代权限控制的防线 它降低而不消除注入风险,高风险动作仍须靠权限收窄、确认与输出校验来兜底。 假设一份层级提示词换模型后照旧有效 层级的实际强度取决于该模型是否针对这类信号训练过,换底座后必须重跑冲突评测。
08 在本站知识结构中的位置
所属分组 G06 安全与鲁棒性 依赖深度 第 2 层(同层节点彼此无先后约束)
在 交互全景图 中定位本节点。