当前位置:首页 > 技术 > 正文内容

OpenAI 对话输入里 role 的含义

代码老兵 技术 43

在 **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 的区别:


systemdeveloper
用途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


标签: OpenAI

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。