OpenAI 对话输入里 role 的含义
在 **OpenAI 的对话式 API 中,role 用来标识一条消息在对话中的“身份”。模型会根据不同 role 来理解上下文、优先级和行为规则。
常见 role 有 4 种:
| role | 含义 | 谁提供 | 优先级 |
|---|---|---|---|
system | 系统级指令(行为规则、人格、限制) | 开发者 | 最高 |
developer | 开发者指令(新版 API 中替代 system 的部分用途) | 开发者 | 高 |
user | 用户输入 | 用户 | 中 |
assistant | 模型输出 | 模型 | 低 |
不同 API 版本会略有区别(旧版主要是 system / user / assistant)。
一、各 role 的含义与使用场景
1. system
作用:定义模型整体行为
特点:
整个对话的全局规则
优先级最高
一般只放 一次
典型内容:
AI 的身份
回复风格
安全限制
输出格式要求
示例:
{
"role": "system",
"content": "You are a helpful programming assistant. Answer concisely."
}
常见用途:
限制模型输出格式(JSON / Markdown)
定义角色(法律顾问 / 医生 / 翻译)
设置语气(简短、正式等)
2. developer
作用:开发者逻辑控制
这是 新 API(Responses API)推荐使用的角色。
用途:
插入程序逻辑指令
约束模型行为
不让用户覆盖关键规则
示例:
{
"role": "developer",
"content": "Always respond in JSON format."
}
与 system 的区别:
| system | developer | |
|---|---|---|
| 用途 | AI身份 / 全局设定 | 程序逻辑 |
| 修改频率 | 很少 | 可动态 |
| 是否可被用户影响 | 理论不可 | 更强调不可 |
简单理解:
system = AI人格
developer = 程序规则
3. user
作用:用户输入
所有真实用户问题都放这里。
示例:
{
"role": "user",
"content": "Write a PHP function to parse JSON."
}
特点:
可以多条
会影响上下文理解
权重低于 system / developer
4. assistant
作用:模型历史回复
当你传入历史对话时,需要把之前模型的回答也加入。
示例:
{
"role": "assistant",
"content": "Here is a PHP example..."
}
用途:
维持对话连续性
让模型记住自己说过什么
二、messages / input 的排列顺序
标准顺序:
system / developer
↓
user
↓
assistant
↓
user
↓
assistant
...
示例完整结构:
{
"model": "gpt-4.1",
"messages": [
{
"role": "system",
"content": "You are a concise programming assistant."
},
{
"role": "user",
"content": "What is PHP?"
},
{
"role": "assistant",
"content": "PHP is a server-side scripting language..."
},
{
"role": "user",
"content": "Show me a simple example."
}
]
}
模型会继续生成:
assistant: ...
三、上下文(Context)是如何工作的
模型会把 messages 按顺序拼接理解。
简化理解:
system: 规则
developer: 程序逻辑
user: 问题1
assistant: 回答1
user: 问题2
assistant: 回答2
模型推理:
基于所有历史 → 生成下一条 assistant
重要特性:
1. 越靠前权重越高
system > developer > user > assistant
2. 上下文是线性的
模型不会“记忆”,只会读 messages。
3. 超过 token 限制会截断
四、什么时候需要传 assistant
只有两种情况:
1 保持多轮对话
[
{"role":"user","content":"What is PHP?"},
{"role":"assistant","content":"PHP is..."},
{"role":"user","content":"Who created it?"}
]
否则模型不知道之前说了什么。
2 Few-shot 示例
给模型示例:
[
{"role":"user","content":"2+2"},
{"role":"assistant","content":"4"},
{"role":"user","content":"3+3"}
]
模型会模仿。
五、典型错误
错误1:system 放中间
错误:
user
assistant
system
user
system 必须在最前面。
错误2:缺少 assistant
user
user
user
模型不知道历史回答。
错误3:把规则写进 user
错误:
user: always output JSON
user: question
正确:
system: always output JSON
user: question
六、推荐最佳结构
最常见结构:
system
developer (可选)
history...
user
示例:
[
{"role":"system","content":"You are a helpful assistant."},
{"role":"developer","content":"Always output valid JSON."},
{"role":"user","content":"Translate hello to Chinese"},
{"role":"assistant","content":"你好"},
{"role":"user","content":"Translate world"}
]
七、一个简单记忆法
可以记成:
system = AI是谁
developer = AI必须遵守什么规则
user = 用户说什么
assistant = AI说过什么
顺序:
规则 → 用户 → AI → 用户 → AI