System / User / Assistant Role
消息角色API 消息的固定枚举字段,不是"人设",而是协议层标签。
详解
Role 是 LLM API 里用来标记消息来源的协议字段,不是让模型"扮演角色"的人设。最常见的是 user 和 assistant:user 表示用户输入,assistant 表示模型上一轮回复;多轮对话时,你的代码要把这两类历史消息按顺序带回请求里。system 则是开发者写的全局规则,用来设定边界、语气和输出格式;在 Anthropic API 中,system 通常作为顶层参数传入,而不是放进 messages 数组。关键约束是:messages 里的 user/assistant 应保持交替,不能连续塞两条 assistant,否则模型会把对话结构读乱,API 也可能拒绝请求。理解 role 的重点不是"身份扮演",而是让模型知道哪段是用户问题、哪段是自己历史、哪段是开发者规则。
一个类比
想象你把一段剧本递给演员:你先给出"舞台说明"(system,告诉演员在什么场景、扮演什么性格);然后对手戏演员说台词(user);轮到主角出声(assistant);再换对手戏演员(user)……剧本里每句话都要标明谁说的,演员才知道该怎么接戏。Role 就是这个"谁说的"标注。
举个例子
import anthropic
client = anthropic.Anthropic()
# 三角色消息数组:system 设规则,messages 里 user/assistant 交替
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=256,
system="你是一位简洁的 Python 技术助手,回答不超过三句话。", # system role
messages=[
{"role": "user", "content": "什么是列表推导式?"}, # 第一轮用户
{"role": "assistant", "content": "列表推导式是用一行代码从可迭代对象生成新列表的语法糖,如 [x*2 for x in range(5)]。"}, # 第一轮模型回复(填入历史)
{"role": "user", "content": "能加条件过滤吗?"}, # 第二轮用户
]
)
print(response.content[0].text) # 模型基于完整上下文给出第二轮回答PYTHON 示例
相关概念
- → System Prompt vs User Prompt· 系统提示词与用户提示词
- → Stateless API· 无状态接口