| 维度 | System Prompt (系统提示词) | User Prompt (用户提示词) |
|---|---|---|
| 定义与提供者 | 由开发者或系统设计者预先设定,用于定义模型的"角色"或"人格",设定对话的全局规则和约束。 | 由最终用户在每次交互时输入,用于提出具体的问题、请求或提供上下文信息。 |
| 主要目的 | 设定框架与规则。它塑造模型的"世界观"和行为模式,确保模型在整个会话中保持一致性、安全性和专业性。 | 执行具体任务。它向模型发出明确的行动指令,是驱动模型产生特定输出的直接原因。 |
| 作用范围 | 全局性、持久性。在单次对话或整个应用生命周期内持续生效,影响模型对所有User Prompt的理解和回应方式。 | 局部性、临时性。仅影响模型对当前这一次请求的回应。 |
| 内容示例 | "你是一位资深Java开发专家,回答应专业、准确。请用中文回答,并优先提供代码示例。" | "请用Java编写一个快速排序算法,并添加详细注释。" |
| 灵活性 | 相对固定,通常在对话开始或应用初始化时设定,不频繁更改。 | 高度灵活,用户可以自由输入任何问题或指令。 |
| 优先级 | 更高。它为模型提供了基础的行为准则,User Prompt的解读和执行都在此框架下进行。 | 较低。其执行不能违背System Prompt设定的核心规则(如"不回答非法内容")。 |
协同
1. System Prompt:模型的"宪法"与角色扮演指南
System Prompt的核心在于定义边界和塑造身份。它不仅仅是一个简单的指令,更是模型在本次交互中的"行为准则"或"角色设定"。例如,它可以用来:
- 设定角色:让模型扮演特定专家(如医生、律师、代码审查员)。
- 规定格式:要求回答必须包含要点列表、代码块,或遵循特定的结构化模板(如RTF框架:Role, Task, Format)。
- 施加约束:限制回答长度、禁止讨论某些话题、要求引用来源等。
- 提供上下文:注入领域知识、公司规范或对话历史摘要,使模型在特定语境下工作。
2. User Prompt:具体的任务指令与交互触发器
User Prompt是用户意图的直接表达,其质量直接决定输出结果的好坏。一个优秀的User Prompt应具备清晰、具体、有上下文的特点。例如:
- 模糊的User Prompt:"给我讲讲Python。"
- 优秀的User Prompt:"我是一名有JavaScript基础的新手,想学习Python进行数据分析。请对比Python和JavaScript在数据处理语法上的主要差异,并给出一个使用Pandas库读取CSV文件的Python代码示例。"
3. 协同工作流程
在实际交互中,两者协同工作,形成"框架-指令"的配合模式。模型的处理逻辑可以抽象为以下伪代码流程:
python
# 伪代码示意 System Prompt 与 User Prompt 的协同处理流程 [结合 ref_2, ref_4, ref_5]
def model_inference(system_prompt, user_prompt):
"""
模拟大模型接收并处理提示词的过程。
system_prompt: 系统提示词,设定全局角色和规则。
user_prompt: 用户提示词,提出具体请求。
"""
# 步骤1:加载并内化System Prompt,建立响应基线
internal_context = initialize_model_with(system_prompt) # 模型根据System Prompt设定内部状态和角色
# 步骤2:在System Prompt设定的框架下,解析User Prompt的意图
if violates_constraints(system_prompt, user_prompt): # 检查用户请求是否违反系统设定(如安全规则)
return generate_refusal_response(system_prompt) # 若违反,则按系统要求拒绝回答
else:
task_intent = parse_intent(user_prompt) # 解析用户的具体任务
# 步骤3:结合两者,生成最终响应
final_response = generate_response(
context=internal_context, # 基于系统设定的角色/规则
task=task_intent, # 基于用户的具体指令
format=get_format_requirement(system_prompt) # 遵循系统要求的格式
)
return final_response
# 示例调用
system_msg = "你是一位乐于助人的编程助手,擅长Python。回答请简洁,并优先提供代码。"
user_msg = "如何用Python反转一个字符串?"
answer = model_inference(system_msg, user_msg)
print(answer)
# 预期输出将是一个包含Python代码(如`"hello"[::-1]`)的简洁解释,而不是一篇关于字符串历史的长篇大论。
示例
场景一:构建专业客服Agent
- System Prompt:"你是XX公司的AI客服,态度热情、专业。你的知识截止于2023年12月。对于产品问题,请依据提供的知识库回答;对于未知问题,请引导用户联系人工客服。回答需用中文,并分点说明。"
- User Prompt:"我的订单#12345显示已发货,但一周没收到,怎么办?"
- 分析:System Prompt设定了客服角色、知识边界、回答格式和兜底策略。User Prompt则提供了具体的查询案例。模型会在"客服"角色下,调用相关知识(如果知识库中有物流查询流程),并可能以分点形式回复操作步骤。
场景二:代码生成与审查
- System Prompt:"你是一个严格的代码审查专家。请检查用户提供的代码,首先指出潜在bug、性能问题和风格不符(PEP 8)之处,然后给出修改后的优化版本。使用Markdown代码块。"
- User Prompt:(粘贴一段存在缩进错误和低效循环的Python代码)
- 分析 :System Prompt将模型锁定在"代码审查专家"角色,并规定了结构化的输出格式(先问题,后优化代码)。User Prompt提供审查对象。这使得输出高度结构化、专业化,远超一个通用模型对同一段代码的简单评价。
sum
- System Prompt是战略层的设定,它塑造了模型的"人格"和对话的"游戏规则"
- 而User Prompt是战术层的指令,负责在既定规则下完成具体动作
在实际开发中,往往需要通过迭代优化System Prompt来约束模型行为,同时精心设计User Prompt(或通过Few-shot示例在System Prompt中提供)来精准触发所需能力