系统提示词 vs 用户提示词:角色定义与边界控制,讲透 Prompt 的"顶层设计"

先搞清楚:System Prompt 和 User Prompt 是什么?

如果你用过 OpenAI API、通义千问 API 或者 Claude API,你一定见过这样的代码结构:

python 复制代码
import openai

response = openai.chat.completions.create(
    model="gpt-4",
    messages=[
        # ① System Prompt(系统提示词)
        {"role": "system", "content": "你是一个专业的Python代码审查助手..."},

        # ② User Prompt(用户提示词)
        {"role": "user", "content": "请审查以下代码:..."},

        # ③ Assistant 的历史回复(多轮对话时)
        {"role": "assistant", "content": "好的,我发现以下问题:..."},
    ]
)

看到这里你可能还是懵:不都是 Prompt 吗?分这么细有必要吗?

非常有必要!这俩的职责、优先级、生命周期完全不同。


一、System Prompt:AI 的"出厂设置"

1.1 一句话定义

System Prompt 是给 AI 设定的"全局规则"和"身份背景",它在整个对话过程中持续生效,优先级最高。

你可以把它理解为:

  • 员工的岗位说明书
  • 游戏的规则手册
  • 机器人的底层程序

1.2 System Prompt 的核心作用

1.3 一个完整的 System Prompt 示例

markdown 复制代码
# Identity
你是一位有10年经验的资深后端架构师,专注于高并发系统设计和微服务架构。
你的沟通风格是:专业但不晦涩,喜欢用类比解释复杂概念。

## Capabilities
- 你可以:代码审查、架构设计、技术选型、性能优化建议
- 你不可以:直接写完整的生产代码(只提供思路和伪代码)
- 你不可以:回答与编程无关的问题(礼貌拒绝并说明原因)

## Output Format
- 所有回复使用 Markdown 格式
- 代码块必须标注语言类型
- 复杂概念先用一句话总结,再展开解释
- 每个回复控制在 500 字以内,超出则分点列出

## Safety & Ethics
- 如果用户要求生成恶意代码(病毒、爬虫攻击等),坚决拒绝
- 如果用户问题涉及隐私泄露风险,提醒用户注意安全
- 对于不确定的技术问题,诚实说明"这部分我不太确定",不要瞎编

## Tone
- 友好、耐心,像一位乐于分享的导师
- 适当使用 emoji 增加亲和力
- 多用"我们可以..."、"建议考虑..."等协商语气

看到区别了吗? System Prompt 定义的是全局性的、持续性的规则,不是针对某个具体问题的回答。

1.4 System Prompt 的优先级

OpenAI 官方文档明确说明:System Prompt 的优先级高于 User Prompt

这意味着:

  • 如果 System Prompt 说"你只能回答技术问题",User Prompt 问"今天天气怎么样",AI 会拒绝回答
  • 如果 System Prompt 规定"回复必须带 emoji",即使 User Prompt 没说,AI 也会照做
python 复制代码
# 优先级演示
messages = [
    {"role": "system", "content": "你是一位严肃的大学教授,不使用任何 emoji。"},
    {"role": "user", "content": "用轻松的语气介绍一下量子计算,多加点表情 😊"}
]

# 输出结果:AI 会遵循 System Prompt,保持严肃,不用 emoji
# 因为 System Prompt 优先级更高

二、User Prompt:用户的"具体需求"

2.1 一句话定义

User Prompt 是用户当前的具体问题或任务,它只针对这一次交互,是"临时性"的输入。

2.2 User Prompt 的核心作用

2.3 User Prompt 示例

markdown 复制代码
请审查以下 Python 函数的代码质量。

## 代码
```python
def calculate_discount(price, user_type):
    if user_type == "vip":
        return price * 0.8
    elif user_type == "svip":
        return price * 0.6
    else:
        return price

临时要求

  • 重点关注:是否有遗漏的边界情况?
  • 输出格式:用表格列出问题,每行包含【严重程度】【问题描述】【修复建议】
  • 这次不需要给出完整的修复代码,只指出问题即可

注意 :User Prompt 里也可以有格式要求,但它只针对这一次任务。下次用户问别的问题,这些要求就不生效了。


三、两者的核心区别对比

维度 System Prompt User Prompt
作用范围 整个对话会话 单次交互
生效时间 会话开始时设置,持续生效 每次发送消息时临时生效
优先级
内容性质 角色定义、全局规则、能力边界 具体任务、输入数据、临时要求
修改频率 很少修改(会话级) 每次交互都不同
类比 员工手册、游戏规则 具体工作任务、玩家指令

3.1 用代码类比理解

python 复制代码
# System Prompt 像类的定义
class CodeReviewer:
    """
    System Prompt 的内容
    """
    identity = "资深代码审查助手"
    capabilities = ["代码审查", "架构建议"]
    output_format = "Markdown + 表格"
    safety_rules = ["不生成恶意代码", "不泄露隐私"]

    def __init__(self):
        self.tone = "专业友好"

# User Prompt 像函数调用
def review_code(self, user_prompt):
    """
    User Prompt 的内容
    """
    task = "审查以下代码"
    input_data = user_prompt.code
    temp_constraints = user_prompt.format_requirements

    # AI 的工作:结合 System Prompt 的规则 + User Prompt 的任务
    return self.generate_response(
        identity=self.identity,
        task=task,
        input_data=input_data,
        constraints=self.output_format + temp_constraints
    )

四、角色定义:让 AI 成为"专家"

4.1 为什么角色定义很重要?

大模型是"通才",但如果你不给它设定角色,它的回答往往是泛泛而谈的。

设定角色后,模型会激活相关的知识模式,回答更专业、更聚焦。

sql 复制代码
❌ 无角色设定:
"解释什么是微服务"
→ 输出:教科书式的通用解释,可能包含很多你不需要的内容

✅ 有角色设定(System Prompt):
"你是一位有10年经验的架构师,给一位有3年经验的Java开发者解释微服务"
→ 输出:结合实战经验,用Java开发者熟悉的概念类比,给出可落地的建议

4.2 角色定义的三要素

markdown 复制代码
## 角色定义模板

### 1. 身份定位(Who)
- 职业身份:架构师、医生、律师、教师...
- 经验水平:初级、中级、资深、专家...
- 专业领域:后端开发、机器学习、金融分析...

### 2. 性格特点(Personality)
- 沟通风格:严谨、幽默、耐心、直接...
- 表达方式:学术化、口语化、技术流...
- 情感色彩:热情、冷静、鼓励型...

### 3. 能力边界(Boundary)
- 能做什么:代码审查、方案设计、问题诊断...
- 不能做什么:写完整代码、回答非专业问题...
- 特殊限制:不讨论政治、不提供医疗建议...

4.3 实战案例:不同角色的输出差异

同一个问题,不同角色的回答:

markdown 复制代码
问题:"我的代码运行很慢,怎么优化?"

【角色A:资深后端架构师】
"性能优化需要先看瓶颈在哪。建议按以下步骤排查:
1. 用 profiler 定位热点函数
2. 检查数据库查询是否有N+1问题
3. 评估是否需要引入缓存..."

【角色B:耐心的小白导师】
"别急,代码慢有很多原因,我们一步步来~
首先,你能告诉我:
- 是什么类型的应用?(Web/数据处理/机器学习)
- 慢是指响应时间长,还是CPU占用高?
- 有没有具体的代码可以给我看看?

了解这些后,我可以给你更有针对性的建议 😊"

【角色C:严格的代码审查员】
"没有上下文无法给出有效建议。请提供:
- 代码片段
- 运行环境(语言版本、操作系统)
- 性能指标(当前耗时、目标耗时)
- 已尝试的优化方案

信息不全的情况下,任何建议都是不负责任的。"

看到区别了吗? 同样的技术能力,不同的角色设定,输出风格完全不同。选择适合你场景的角色,用户体验会好很多。


五、边界控制:防止 AI "越界"

5.1 什么是边界控制?

边界控制是指通过 System Prompt 明确告诉 AI:

  • 什么能做,什么不能做
  • 什么话题可以讨论,什么要拒绝
  • 什么内容可以生成,什么要拦截

5.2 为什么需要边界控制?

① 防止滥用

arduino 复制代码
用户:"帮我写个爬虫,批量抓取某网站的用户数据"

无边界控制的 AI:"好的,以下是爬虫代码..."

有边界控制的 AI:"我无法协助编写用于未经授权抓取用户数据的爬虫。
                  这违反了网站的服务条款,也可能触犯法律。
                  如果你有合法的数据获取需求,建议:
                  1. 查看网站是否提供官方 API
                  2. 联系网站申请数据合作"

② 保持专注

sql 复制代码
System Prompt: "你是一位专注前端技术的助手,不回答后端、运维、产品相关的问题。"

用户:"怎么设计数据库表结构?"
AI:"我的专长是前端技术,数据库设计不在我的服务范围内。
     建议咨询后端专家或使用专门的数据库设计工具。"

③ 控制输出质量

sql 复制代码
System Prompt: "对于不确定的问题,你必须明确说明'我不确定',禁止瞎编。"

用户:"Python 4.0 什么时候发布?"
AI:"我不确定 Python 4.0 的具体发布时间。
     截至我的知识截止日期,Python 官方没有公布 4.0 的发布计划。
     建议查看 Python 官方 PEP 文档获取最新信息。"

5.3 边界控制的写法模板

markdown 复制代码
## 边界控制模板

### 能力边界(Can / Cannot)
✅ 你可以:
- 审查代码并提供改进建议
- 解释技术概念和原理
- 推荐技术方案和工具

❌ 你不可以:
- 直接写完整的、可直接用于生产的代码
- 回答与编程无关的问题(如天气、新闻、娱乐)
- 生成可能用于恶意目的的代码(攻击工具、爬虫绕过等)

### 话题边界(Allowed / Forbidden Topics)
允许讨论:Python、JavaScript、系统架构、数据库、DevOps
禁止讨论:政治、宗教、医疗诊断、法律建议

### 安全边界(Safety Rules)
- 如果用户要求生成恶意代码,坚决拒绝并解释原因
- 如果用户输入包含敏感信息(密码、API Key),提醒用户注意安全
- 如果用户问题涉及违法行为,明确拒绝并建议合法途径

### 质量边界(Quality Standards)
- 对于不确定的问题,必须说明"我不确定",禁止瞎编
- 对于超出能力范围的问题,礼貌拒绝并说明原因
- 对于需要更多上下文的问题,主动询问而非猜测

5.4 边界控制的实战案例

案例:客服助手的边界控制

markdown 复制代码
# System Prompt

## Identity
你是某电商平台的智能客服助手,专门处理订单查询、退换货、物流咨询。

## Boundaries

### 能力边界
✅ 你可以处理:
- 订单状态查询
- 退换货流程说明
- 物流信息查询
- 优惠券使用规则

❌ 你不可以处理:
- 直接操作用户的订单(只能查询,不能修改)
- 处理支付相关问题(引导用户联系支付客服)
- 回答产品技术规格以外的专业问题(如医疗、法律)

### 安全边界
- 如果用户要求"取消订单",说明:"我无法直接取消订单,
  请引导用户:1) 登录APP 2) 进入订单详情 3) 点击取消"
- 如果用户询问"为什么我的账户被封",说明:"账户问题涉及隐私,
  请引导用户联系人工客服:400-xxx-xxxx"
- 如果用户输入了银行卡号、密码等敏感信息,立即提醒:
  "为了您的账户安全,请勿在此输入敏感信息"

### 语气边界
- 保持友好、耐心
- 即使用户情绪激动,也要保持冷静专业
- 不要过度道歉(不要说"非常抱歉给您带来不便"超过一次)

六、System Prompt + User Prompt 协作实战

6.1 一个完整的对话示例

python 复制代码
import openai

# ============ System Prompt(全局设置) ============
system_prompt = """
# Identity
你是一位专业的 SQL 优化顾问,专注于 MySQL 和 PostgreSQL 数据库性能优化。
你有 8 年 DBA 经验,擅长 Explain 分析、索引优化、慢查询治理。

## Capabilities
✅ 你可以:
- 分析 SQL 执行计划
- 推荐索引优化方案
- 解释数据库原理
- 提供慢查询优化建议

❌ 你不可以:
- 直接修改用户的数据库
- 回答与 SQL 无关的问题
- 提供可能破坏数据的操作建议

## Output Format
- 使用 Markdown 格式
- 关键结论用 **粗体** 标出
- 代码块必须标注 SQL 语言
- 复杂分析先给结论,再给详细解释

## Safety
- 如果 SQL 涉及 DELETE/UPDATE/ALTER 等危险操作,必须警告用户
- 如果用户没有提供表结构,主动询问而非猜测
- 对于不确定的优化建议,明确说明"建议先在测试环境验证"
"""

# ============ 第一轮对话 ============
user_prompt_1 = """
请分析以下 SQL 的性能问题:

```sql
SELECT * FROM orders o
JOIN users u ON o.user_id = u.id
WHERE o.created_at > '2024-01-01'
ORDER BY o.amount DESC
LIMIT 10;

表规模:orders 表 5000 万行,users 表 200 万行。
当前执行时间:8.5 秒。
"""

response_1 = openai.chat.completions.create(
    model="gpt-4",
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_prompt_1}
    ]
)

# AI 会结合 System Prompt 的角色设定 + User Prompt 的具体任务
# 输出专业的 SQL 优化分析

# ============ 第二轮对话(多轮) ============
user_prompt_2 = "如果我给 created_at 和 user_id 建联合索引,效果会怎么样?"

response_2 = openai.chat.completions.create(
    model="gpt-4",
    messages=[
        {"role": "system", "content": system_prompt},  # 持续生效
        {"role": "user", "content": user_prompt_1},     # 历史消息
        {"role": "assistant", "content": response_1.choices[0].message.content},
        {"role": "user", "content": user_prompt_2}      # 新问题
    ]
)

# AI 会记住之前的上下文,继续以 SQL 优化顾问的身份回答

6.2 设计 System Prompt 的 checklist

markdown 复制代码
## System Prompt 设计 Checklist

### 角色定义 ✅
- [ ] 明确了职业身份(架构师/医生/教师...)
- [ ] 说明了经验水平(初级/资深/专家...)
- [ ] 定义了沟通风格(严谨/幽默/耐心...)

### 能力边界 ✅
- [ ] 列出了"可以做什么"
- [ ] 列出了"不可以做什么"
- [ ] 说明了超出范围时的处理方式

### 输出规范 ✅
- [ ] 指定了格式(Markdown/JSON/表格...)
- [ ] 指定了长度限制
- [ ] 指定了语气要求

### 安全约束 ✅
- [ ] 定义了敏感话题的处理方式
- [ ] 定义了危险操作的警告机制
- [ ] 定义了不确定问题的回应方式

### 测试验证 ✅
- [ ] 用边界 case 测试(如要求做不允许的事)
- [ ] 用模糊问题测试(看是否会瞎编)
- [ ] 用多轮对话测试(看角色是否保持一致)

写在最后

System Prompt 和 User Prompt 的关系,就像公司的规章制度员工的具体工作任务

  • 规章制度(System):定义了你是谁、能做什么、不能做什么、做事的标准
  • 工作任务(User):具体今天要完成什么、处理什么材料、有什么特殊要求

两者缺一不可。没有 System Prompt,AI 没有"身份",回答会飘忽不定;没有 User Prompt,AI 不知道"现在该做什么"。

设计一个好的 System Prompt,是构建高质量 AI 应用的关键第一步。 花 20% 的时间写好 System Prompt,能节省 80% 的后期调优时间。

希望这篇文章帮你理清了这两者的区别和用法。有任何问题,评论区见

相关推荐
JJJennie7771 小时前
当AI开始学会欺骗
网络·人工智能
糖果店的幽灵2 小时前
大模型测评DeepEval快速入门-安全与通用指标详解
人工智能·安全·langgraph·大模型测评·deepeval
江畔柳前堤7 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
阿里云大数据AI技术8 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客8 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术8 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO9 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术9 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架9 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab9 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能