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 示例
相关概念