基于本文回答

播面 播面

刷题像听歌,多听自然懂
0
评论

在大模型的 API 调用中,System Prompt、User Prompt 和 Assistant Prompt的区别

知识点图片

在大模型(如 OpenAI 的 GPT-4、Anthropic 的 Claude 等)的 API 调用中,目前的标准交互格式是基于角色(Role-based)的消息列表

为了让大模型更好地理解对话的语境,API 将输入划分为了三种不同的角色提示词:System Prompt(系统提示词)User Prompt(用户提示词)Assistant Prompt(助手提示词)

它们的核心区别在于作用权重代表的身份。以下是详细的解析:


1. System Prompt(系统提示词)

  • 身份:全局设定者 / 导演。
  • 作用:用于设定 AI 的人设、背景、核心规则、语气以及输出格式。它是整个对话的基调,通常放在消息列表的第一位。
  • 模型权重:通常拥有最高的指令权重。模型会优先遵循 System Prompt 中的规则,即使后面的 User Prompt 试图引导它违背这些规则(防越狱)。
  • 生活类比:就像电影开拍前,导演对演员说:“你现在扮演一个脾气暴躁的资深程序员,不管别人问什么,你都要先用嘲讽的语气反问,然后再给出专业的 Python 代码,绝对不能说废话。”
  • 常见用法
    • 设定角色:“你是一个资深的法律顾问...”
    • 规定格式:“所有的回答必须以 JSON 格式输出...”
    • 设定边界:“禁止回答任何涉及医疗诊断的问题...”

2. User Prompt(用户提示词)

  • 身份:最终用户 / 提问者。
  • 作用:代表人类用户向 AI 提出的具体问题、任务指令或提供的输入文本。这是推动对话前进的核心动力。
  • 模型权重:代表当前需要解决的即时任务。模型会根据 System 设定的规则,来处理 User 提供的内容。
  • 生活类比:就像电影中与演员(AI)对戏的另一个人,他提出具体的台词或动作:“请帮我看看这段代码哪里报错了?”
  • 常见用法
    • 提问:“量子力学是什么?”
    • 下达具体任务:“帮我把下面这段英文翻译成中文:[文本]”

3. Assistant Prompt(助手提示词)

  • 身份:大模型自己 / AI 助手。
  • 作用:代表 AI 过去的回答。主要用于构建历史对话上下文(Memory),或者用于提供示例(Few-Shot Prompting)以引导 AI 接下来的输出。
  • 模型权重:它让模型知道“我之前是怎么回答的”。模型会为了保持前后一致性,模仿 Assistant Prompt 里的语气和逻辑继续回答。
  • 生活类比:演员(AI)回忆自己前几场戏是怎么演的,以确保现在的表演在情绪和逻辑上是连贯的。
  • 常见用法
    • 携带多轮对话历史:让 AI 记住上下文,比如上一轮用户问“北京天气”,这轮问“那上海呢?”,AI 根据历史知道你在问上海的天气。
    • 少样本提示(Few-Shot):人为地伪造一段对话历史,教 AI 如何回答。

💡 API 调用代码示例(以 OpenAI 为例)

通过下面这个 JSON 消息列表(Message Array),可以清晰看到三者的协作配合:

python
messages = [
    # 1. System: 设定整体规则
    {"role": "system", "content": "你是一个只懂用文言文回答问题的历史学者。"},
    
    # --- 下面是 Few-Shot(少样本提示)的用法 ---
    {"role": "user", "content": "苹果是什么?"},
    {"role": "assistant", "content": "此乃西洋之果,甘甜多汁,红如朱砂。"}, # 伪造的AI回答,作为示范
    
    # --- 下面是真实的当前请求 ---
    {"role": "user", "content": "手机是什么?"} # 2. User: 提出当前问题
]

# 3. 最终大模型生成的回答(也是 Assistant 角色):
# "此乃千里传音之奇物,方寸之间,可连通四海。"

总结对比表

维度 System Prompt (系统) User Prompt (用户) Assistant Prompt (助手)
API Role 参数 "role": "system" "role": "user" "role": "assistant"
核心功能 设定全局角色、规则、约束和格式。 提出具体的任务、问题或输入内容。 提供上下文记忆,或作为回答的模板/示例。
出现位置 通常只在对话列表的最开始出现一次。 在对话中频繁出现,通常是最后一条消息。 在多轮对话中与 User 交替出现。
决定了什么 AI “是谁” 以及 “怎么做”。 AI “现在需要做什么”。 AI “之前做了什么” 以及 “保持什么风格”。

高级技巧(Prefilling):
在某些大模型 API(如 Anthropic Claude)中,你可以通过在最后人为传入一个未完成的 Assistant Prompt 来强制规定输出的开头。
例如,用户问了问题后,你加一条 {"role": "assistant", "content": "{\n \"result\":"},模型就会被强制顺着这个开头,直接输出纯净的 JSON 格式,而不会带上“好的,这是你的JSON”等废话。

00:00
00:00