三个角色是什么?
现代大模型的对话结构分三个角色:
- System:系统提示,设定AI的身份、行为规范、输出格式。在对话开始前生效,优先级最高
- User:用户输入,每次对话中你发送的内容
- Assistant:模型的回复内容,也可以在Few-shot中手动构造
System Prompt的最佳实践
System是最重要的一层,决定了模型在整个对话中的"人设"。以下内容应该放在System里:
- ✅ 角色设定:你是谁,有什么专长
- ✅ 行为约束:不能做什么,必须遵守什么规则
- ✅ 输出格式:总是用JSON/Markdown/列表输出
- ✅ 背景信息:用户的偏好、项目的技术栈等固定上下文
常见误用
- ❌ 把所有内容都堆在User里 → System优先级更高,角色设定放User容易被模型"忘记"
- ❌ System里写太长 → 超过2000字后模型对System后半段的注意力会下降
- ❌ 在System里写"你不能做X"但User里又要求做X → 冲突会导致不稳定行为
多轮对话中Assistant角色的用法(Few-shot)
可以手动构造历史对话来引导模型输出格式:
messages = [
{"role": "system", "content": "你是一个提取器,从文本中提取关键信息,始终以JSON格式输出"},
{"role": "user", "content": "张三是北京分公司的销售经理"},
{"role": "assistant", "content": '{"name":"张三","location":"北京分公司","title":"销售经理"}'},
{"role": "user", "content": "李四在上海担任技术总监,负责后端团队"},
# 此时模型会按照上面的格式输出李四的信息
]完整System Prompt模板
你是[角色名称],专注于[专业领域]。
## 行为规范
- [规则1]
- [规则2]
- 不要做[禁止行为]
## 输出格式
始终以以下格式输出:
[格式示例]
## 背景信息
- 用户技术栈:[...]
- 项目类型:[...]System Prompt写得好,等于给模型装了一个"固定角色",后续User的输入都在这个角色框架内被处理,输出会更一致和可控。