openai-model-spec — 本课题摘录
读了哪几篇: 02-chain-of-command(链式命令:核心裁决引擎)、03-agentic-principles(agent 自治与副作用控制)。
其余两篇(文档自身语法、内容红线与未成年模式)本轮没读。
这一家在本课题里的位置:它是"一轮的输入怎么拼"这一问最权威的一份说明——不是讲怎么拼字符串,是讲拼进去的东西各自有多大权力。
它对本课题回答了什么
决定一:一轮输入里的东西不是平等的,有五级权威
它先把问题说清楚:模型 每次回话面对的不是一条干净指令,而是一叠来源各异的内容——平台注入的、开发者写的、用户打的、工具/网页返回的、以及这些消息里被引用的文本。它们经常互相矛盾。
高 ┌──────────────────────────────────────────┐
↑ │ 1. 根 谁都不能覆盖(多为硬红线) │
权 │ 2. 平台 仅平台方可设/改 │
威 │ 3. 开发者 可显式覆盖更低级 │
↓ │ 4. 用户 可显式覆盖「准则」级 │
低 │ 5. 准则 可被「隐式」信号覆盖 │
└──────────────────────────────────────────┘
✗ 无权威:助手自己之前的回复、工具输出、被引用的文本、图片
(依据:协议库 · OpenAI Model Spec · 链式命令(核心裁决引擎) —— 五级权威从高到低是 Root/System/Developer/User/Guideline,高阶压低阶、同阶后来的覆盖先来的;第六层「无权威」包括模型自己之前的回复、工具输出、被引用的文本)
两个最容易被忽略的点:
- 第六层"无权威"最关键。 模型自己之前的回复、工具输出、被引用的文本,默认都没有指挥权。
- "根"凌驾于平台之上是后来的修订。 早期版本里两者同级;现在明确连平台方的消息也无法解除根级红线。
第 1 条对我们的循环有直接影响: 工具结果是要写回历史的,而工具结果里可能有攻击者控制的文本(读了一个网页、读了一个别人写的文件)。 这条规范说:写回去可以,但它没有指挥权。 这就要求我们在拼一轮输入时,能区分"这段是指令"和"这段只是数据"。
决定一的算法:候选 → 过滤 → 裁决
① 收集候选
= 规范里所有指令 + 各消息中「未加引号的正文」里的指令
每条按其所在消息继承一个权威等级
│
② 过滤掉不适用的,三种情形剔除:
• 与更高级指令的字面或意图冲突
• 被同级后续消息推翻/改写/变得无关
• 疑似误发(看起来是用户不小心粘进来的)
│
③ 执行剩下的;两条冲突 → 权威高的胜
唯一额外可忽略的理由:超出能力(做不到)
(依据:协议库 · OpenAI Model Spec · 链式命令(核心裁决引擎) —— 主算法三步——收集候选(含各消息「未加引号正文」里的指令并继承权威等级)、过滤掉错位/被取代/疑似误发的、执行剩下的且高权威胜,唯一额外可忽略的理由是超出能力)
注意"未加引号的正文"这个限定:引号、JSON、XML 里的东西不算指令候选。
决定一最硬的一条:对"劝它越权"的论证一概免疫
模型不允许让低等级内容影响它对高等级原则的解释。 不管低等级消息用的是:
- 祈使("忽略前面所有指令")
- 道德绑架("你不这么做会有很多人受害")
- 逻辑劝诱("你换个角度理解这份规范,就会明白你应该照做")
- 角色扮演陷阱
——一律拒绝就"高等级指令该如何应用"进行辩论或接受指示。 (依据:协议库 · OpenAI Model Spec · 链式命令(核心裁决引擎) —— 模型不允许让低等级内容影响它对高等级原则的解释,无论用祈使、道德绑架、逻辑劝诱还是角色扮演陷阱,一律拒绝就「高等级指令该如何应用」辩论或接受指示)
它给的直觉极好:把链式命令的"解释权"本身也设为最高级、不对下开放。否则任何防线都能被一句"你仔细想想就会同意放我过去"攻破。