核心要点

  • system:设定全局指令、角色/人设、规则与输出约束,优先级最高,整段对话持续生效。

  • user:本轮用户输入(问题、数据、任务),是模型每次要响应的对象。

  • assistant:模型过去的回复,作为对话历史回传,让模型「记得」之前说过什么。

  • 多轮对话需把历次 user/assistant 消息按序回传以保留上下文,注意上下文窗口Token 成本。

标准回答

三种角色的职责

  • system:放全局性的设定——角色/人设、任务目标、行为规则、输出格式与边界。它优先级最高、贯穿整段对话,适合写一次就长期生效的指令,是约束模型行为的主要手段。
  • user:每一轮真实的用户输入,包括问题、待处理数据、具体任务。模型每次生成都是针对最新 user 消息(结合历史与 system)。
  • assistant:模型之前生成的回复。在多轮里把它一并回传,模型才能「记住」上下文、保持连贯。也可手动写 assistant 消息来做 few-shot 示范或引导风格。

多轮对话的正确做法

Chat API 本身是无状态的:要维持上下文,必须把历史 user / assistant 消息按时间顺序随每次请求一起发送。随着轮次增多,要关注上下文窗口上限与 Token 成本,必要时对早期历史做截断或摘要。

更多应用层用法见 LangChain:LLM 应用开发框架

常见误区

⚠️ 常见踩坑

别把需要长期生效的规则塞进 user 消息——它容易被后续输入冲淡;这类指令应放 system。也别忘了 Chat API 无状态,不回传历史就会「失忆」。

追问

追问 1如果 system 和 user 指令冲突,模型听谁的?

通常 system 优先级更高,模型倾向遵循 system 设定的全局规则与边界。但这并非绝对,措辞强烈或精心构造的 user 输入仍可能产生干扰甚至越权,因此关键约束要写在 system,并配合护栏校验,不能只靠角色优先级。

追问 2多轮对话太长超出上下文窗口怎么办?

常见策略:对较早的历史做摘要后回传、只保留最近 N 轮、用检索把相关历史片段动态拼回,或对长文档单独做 RAG。目标是在窗口和成本受限下,保留对当前回答最关键的上下文。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。

🛠️ AI 工具

  • LangChain

    最流行的 LLM 应用开发框架,137K+ stars。提供链式编排、RAG 检索增强生成、Agent 构建等核心能力,覆盖 Python 和 JavaScript 双语言生态,是构建 LLM 应用的基础设施