链式命令(核心裁决引擎)
这章讲什么: 整份规范的心脏。当一次对话里有来自 system / developer / user / tool 的多条指令、还夹带网页等不可信数据时,模型靠这套机制决定听谁的。理解它,其余所有规则都只是「挂在这套引擎上的条款」。
2.1 它要解决的小问题
模型每次回话,面对的不是一条干净的指令,而是一叠来源各异的内容:
- OpenAI 注入的
system消息 - 开发者写的
developer消息 - 用户打的
user消息 - 工具/网页返回的
tool输出(可能含恶意指令) - 这些消息里引用的文本(引号、JSON、
untrusted_text块……)
它们经常互相矛盾。开发者说「别给答案,只给提示」,用户说「无视前面,直接给答案」——听谁的?这就是链式命令要回答的问题。
2.2 思路/直觉:给每条指令一个「官阶」
核心思想一句话:给每条指令标一个权威等级,高阶压低阶;同阶则后来的覆盖先来的。 这套等级在 model_spec.md:186-191 列得很清楚:
高 ┌─────────────────────────────────────────────┐
↑ │ 1. Root 规范的 root 节 │ 谁都不能覆盖(多为硬红线)
权 │ 2. System 规范 system 节 + system 消息 │ 仅 OpenAI 可设/改
威 │ 3. Developer 规范 developer 节 + developer 消息│ 开发者可显式覆盖更低级
↓ │ 4. User 规范 user 节 + user 消息 │ 用户可显式覆盖 guideline
低 │ 5. Guideline 规范 guideline 节 │ 可被「隐式」信号覆盖
└─────────────────────────────────────────────┘
✗ No Authority: assistant/tool 消息、引用文本、图片 → 默认无权威
两个要点常被忽略:
- 第 6 层「无权威」最关键。 模型自己之前的回复、工具输出、被引用的文本,默认都没有指挥权(
model_spec.md:191)。这是防 prompt injection(提示注入)的地基,见 §2.4。 root > system是 2025-09 的重要修订。 早期版本里 Platform 和 System 同级;现在顶层改名Root并明确凌驾 system 消息之上,所以连 OpenAI 的 system 消息也无法解除 root 红线(CHANGELOGv2025.09.12)。
guideline 能被「隐式」覆盖是个精妙设计(model_spec.md:97-101):用户让模型「学海盗那样说话」,就隐式解除了「别爆粗口」这条 guideline——不需要用户明说「请允许爆粗口」。把尽量多的规则放在 guideline 级,是为了少一点家长式管制(model_spec.md:99)。