模块3:用示例教会 AI
难度:⭐⭐⭐ 中级 | 建议时长:3-4小时
目标:掌握少样本提示、角色设定和系统提示词,学会给 AI 更丰富的上下文
3.1 少样本提示:先做示范,再让 AI 干活
教新员工的方式
你不会只对新来的实习生说”把报表做好”就不管了。你会拿一份做好的报表说”照这个格式做”。
少样本提示就是这个逻辑:先给 AI 几个例子,让它”学会”你要的模式,再让它处理新任务。
基本格式
这是一个[任务描述]的任务。以下是一些例子:
输入:[示例输入1]
输出:[示例输出1]
输入:[示例输入2]
输出:[示例输出2]
现在请处理:
输入:[实际输入]
输出:
实战案例
案例1:情感分类
判断以下评论的情感倾向。
评论:"这个手机拍照效果太棒了,完全超出预期!"
情感:正面
评论:"等了两周才发货,包装还破了,太失望了"
情感:负面
评论:"手机收到了,外观一般,还没仔细用"
情感:中性
评论:"价格贵了点,但续航真的很给力,值了"
情感:
→ AI 根据前面的模式判断为”正面”
案例2:统一输出格式
将产品信息转换为营销文案。
产品:无线蓝牙耳机 | 续航30小时 | 降噪
文案:告别嘈杂,拥抱纯净音质。30小时超长续航,让好音乐陪你一整天。
产品:保温杯 | 316不锈钢 | 24小时保温
文案:清晨的热咖啡,午后依然温暖。316医用级不锈钢,24小时锁住温度。
产品:机械键盘 | 青轴 | RGB背光 | 全键无冲
文案:
→ AI 会模仿前面的风格和长度来写
少样本的黄金法则
1. 数量:2-5 个示例最佳
太少 → AI 可能没学到模式
太多 → 浪费 Token,可能引入噪声
2. 质量 > 数量
3 个高质量示例 优于 10 个粗糙示例
3. 示例要有代表性
覆盖不同情况(正面/负面/中性都要有)
4. 格式要统一
每个示例的输入输出格式必须前后一致
5. 顺序有讲究
把最相关的示例放在最后(靠近实际输入的位置)
什么时候用少样本?
| 场景 | 推荐 | 原因 |
|---|---|---|
| 特殊的输出格式 | 强烈推荐 | 示例比文字描述更清楚 |
| 分类/打标签 | 强烈推荐 | 让 AI 理解你的分类标准 |
| 风格模仿 | 强烈推荐 | 示例是传递风格的最佳方式 |
| 简单问答 | 没必要 | 零样本就够了 |
| 开放式创作 | 看情况 | 可能限制创造力 |
3.2 角色提示:给 AI 一个身份
穿白大褂和穿厨师服的区别
同一个人,穿上白大褂你问他”这个东西能吃吗”,他会从卫生安全角度回答;穿上厨师服你问同样的话,他会从烹饪角度回答。
给 AI 一个角色,就像给它”穿上制服”——它会从那个专业视角来思考和回答。
基本语法
你是一位[角色],具有[特点/经验]。
你的任务是[要做的事]。
同一问题,不同角色 → 不同回答
问题: “公司要不要采用微服务架构?“
【角色:技术总监】
你是一位有15年经验的技术总监,擅长架构决策。
→ 侧重技术可行性、团队能力、系统复杂度
【角色:CFO】
你是一位上市公司的CFO,关注投资回报率。
→ 侧重成本、ROI、人力投入、财务风险
【角色:一线开发者】
你是一位3年经验的后端开发者,正在维护一个单体应用。
→ 侧重开发体验、学习成本、日常痛点
高效角色设定模板
# 角色设定
你是[角色名称],[一句话描述背景]。
# 核心能力
- [能力1]
- [能力2]
- [能力3]
# 沟通风格
- [风格特点,如:专业但通俗、严谨、幽默...]
# 工作原则
- [原则1,如:始终以数据为依据]
- [原则2,如:先给结论再展开分析]
三个常见误区
❌ 误区1:角色太虚
"你是一个很厉害的专家" → 什么专家?哪方面厉害?
✅ "你是一位专注 React 生态的前端架构师,有5年大型项目经验"
❌ 误区2:角色和任务不匹配
"你是一位诗人,请分析这段代码的 Bug"
✅ 角色的专业领域要和任务对齐
❌ 误区3:同时扮演多个角色
"你同时是设计师、产品经理和程序员"
✅ 一次一个角色。如需多视角,分多次对话
原理:先定义角色 = 在 prompt 开头收窄问题域
为什么”先说你是什么角色”这个小动作效果这么好?两个原因,第一个表层、第二个底层:
表层原因:角色定义把问题域收窄,二义性下降
没角色:"这个东西能吃吗?" ← AI 不知道你想从什么角度评判(卫生?营养?文化?)
有角色:"你是营养师。这个东西能吃吗?" ← 问题域被锁定到「营养角度」,回答自然聚焦
收窄问题域 = 减少模型在生成时的”分支选择”,输出更稳定、更专业。
底层原因:模型对 prompt 开头位置最敏感(Lost in the Middle)
模型对 prompt 不同位置的关注度并不均匀——开头和结尾最敏感,中间最容易被”看漏”。这是 Stanford 论文 Lost in the Middle 实验证明的现象。
prompt 结构:[开头] ........ [中间] ........ [结尾]
↑高敏感 ↑低敏感 ↑高敏感
把”角色定义”放在 prompt 最开头,相当于在模型注意力最集中的位置打下”问题域锚点”,整段 prompt 之后的内容都会被这个锚点引导。
💡 延伸:这条规律不只对角色提示有效。任何关键约束(输出格式、禁止事项、领域限定)都该往开头/结尾靠,别埋在中间。
3.3 系统提示词:给 AI 定规矩
公司的《员工手册》
新员工入职第一天会收到一本员工手册——不是每次开会都念,但所有人都得照着做。系统提示词就是 AI 的”员工手册”,定义它在整个对话中的行为基线。
API 中的三种消息类型
如果你通过 API 调用 AI,会遇到三种消息角色:
system(系统消息)→ 公司规章制度(AI 始终遵守的规则)
user(用户消息) → 客户的需求(你每次发的内容)
assistant(助手消息)→ 员工之前的回复记录
类比理解:
system = 入职培训手册:"你是XX公司客服,说话要礼貌..."
user = 客户来电:"我想退货"
assistant = 你之前的回复记录:"好的,请提供订单号..."
日常聊天用户:你在 ChatGPT/Claude 网页上对话时, 第一条消息里的”角色设定”就相当于简易版的 system 消息。
系统提示词的五层结构
┌──────────────────────────────────────┐
│ 系统提示词的层次结构 │
│ │
│ 1. 身份定义 ─── 你是谁 │
│ 2. 能力边界 ─── 你能做什么/不能做什么 │
│ 3. 行为准则 ─── 怎么做 │
│ 4. 输出规范 ─── 输出格式和风格 │
│ 5. 交互规则 ─── 如何与用户互动 │
└──────────────────────────────────────┘
完整示例:编程学习助手”小智”
# 身份
你是"小智",一位友好的编程学习助手,
专门帮助编程零基础的成年学习者入门 Python。
# 能力
- 精通 Python 基础语法和常用库
- 擅长用生活中的例子解释编程概念
- 能根据学习者的水平调整讲解深度
# 行为准则
1. 始终保持耐心和鼓励的态度
2. 每个概念先用"生活比喻"解释,再给代码示例
3. 代码示例必须附带逐行注释
4. 超出 Python 基础范畴的问题,诚实说明并建议学习路径
5. 不要一次给太多信息,让学习者消化后再继续
# 输出规范
- 每次回复控制在 300 字以内(代码除外)
- 使用中文,技术术语附带英文原文
- 代码使用 markdown 代码块
- 重要概念用**加粗**标注
# 交互规则
- 每次讲解后给一个小练习
- 如果学习者说"不懂",换一种方式重新解释
- 定期确认:"你理解了吗?有什么疑问?"
深入理解三种消息角色
上面用”员工手册/客户来电/回复记录”做了类比,这里展开讲清楚每个角色的真实含义和使用细节。
三种角色一览
| 角色 | 谁在说话 | 类比 | 核心作用 |
|---|---|---|---|
| system | 开发者/设计者 | 公司规章制度 | 定义 AI 的身份、能力边界、行为准则 |
| user | 终端用户 | 客户来电 | 提出具体需求和问题 |
| assistant | AI 自己 | 员工之前的回复 | 记录 AI 的历史回答,维持对话连贯 |
API 调用的真实结构
当你通过代码调用 AI 时,发送的是一个消息列表:
messages = [
{"role": "system", "content": "你是一位资深Python工程师..."},
{"role": "user", "content": "帮我写一个快速排序"},
{"role": "assistant", "content": "好的,这是快速排序的实现..."},
{"role": "user", "content": "能加上注释吗?"}
]AI 看到的不是”一段对话”,而是这个结构化的消息列表。它根据每条消息的 role 标签来理解”谁说了什么”。
每种角色的特点
system(系统消息)
- 优先级最高:当 user 消息和 system 消息冲突时,AI 倾向于遵守 system
- 全局生效:不管对话进行到第几轮,system 的规则始终有效
- 用户不可见:在产品界面中,system 消息通常对终端用户隐藏
- 典型内容:身份设定、输出格式要求、安全限制、行为边界
user(用户消息)
- 每一轮对话的输入:你发的每条消息都是一条 user 消息
- 可以包含任何内容:问题、指令、数据、反馈、追问
- 是 AI 回复的直接触发器
assistant(助手消息)
- AI 的历史回复:每次 AI 回答后,这条回答会被记录为 assistant 消息
- 维持记忆:AI 通过回看 assistant 消息来”记住”自己之前说了什么
- 可以人为构造:开发者可以手动插入一条 assistant 消息,让 AI 以为自己之前说过某句话(这就是 prefill 技巧,下面详讲)
关于”固定”和”灵活”
一个常见疑问:这三种角色是写死的吗?
固定的部分:
- 角色名称只有三种:system、user、assistant(不能自创新角色)
- 每条消息必须标注其中一种角色
灵活的部分:
- 每种角色的内容完全自由,你想写什么都行
- 消息数量不限:可以有多条 system、多条 user
- 顺序基本自由:通常 system 在最前面,但 user 和 assistant 可以交替多轮
- 多轮对话的"记忆"本质上就是把历史消息全部重新发送一遍
换句话说:AI 没有真正的”记忆”。每次你发新消息时,客户端会把之前所有的 system + user + assistant 消息打包重新发给 AI。AI 每次都是”从头读完整段对话”再回复。
Prefill 技巧:替 AI 开个头
什么是 Prefill
Prefill(预填充)是指在发送请求时,人为构造一条未完成的 assistant 消息,让 AI 从你指定的开头继续写下去。
messages = [
{"role": "system", "content": "你是翻译助手"},
{"role": "user", "content": "翻译:今天天气真好"},
{"role": "assistant", "content": "The weather"} # ← 预填充:替AI开了个头
]AI 收到后会认为自己已经写了 “The weather”,然后接着往下写,比如补全为 “The weather is really nice today.”
为什么有效
AI 的工作方式是”续写”——给它前文,它生成后文。Prefill 利用了这个机制:你把 assistant 的开头写好,AI 就会顺着你的开头继续,而不是自己重新组织开头。
四种典型用法
用法1:强制输出格式
# 不用 prefill → AI 可能先寒暄再给 JSON
{"role": "user", "content": "列出三种水果及其颜色,用JSON格式"}
# 用 prefill → AI 直接输出 JSON,不废话
{"role": "user", "content": "列出三种水果及其颜色,用JSON格式"},
{"role": "assistant", "content": "```json\n{"}用法2:控制回复语言
# 用户用中文提问,但你想让 AI 用英文回答
{"role": "user", "content": "解释什么是递归"},
{"role": "assistant", "content": "Recursion is"}AI 看到自己”已经开始用英文回答了”,就会继续用英文。
用法3:跳过客套话
# 不用 prefill → "好的!我来帮你分析这个问题。首先..."
# 用 prefill → 直接进入正题
{"role": "user", "content": "分析这段代码的性能瓶颈"},
{"role": "assistant", "content": "性能瓶颈分析:\n1."}用法4:引导推理方向
{"role": "user", "content": "这个 Bug 的原因是什么?[代码片段]"},
{"role": "assistant", "content": "让我从内存管理的角度分析:"}AI 会顺着”内存管理”这个方向深入分析,而不是泛泛而谈。
使用注意
1. 不是所有 API 都支持:OpenAI 和 Anthropic 的 API 支持 prefill,
但网页聊天界面通常不支持(因为你只能发 user 消息)
2. 开头要自然:prefill 的内容要像 AI 真的会这么开头,
否则 AI 可能会"纠正"你的开头
3. 不要太长:prefill 只需要几个词到一句话,
写太多反而限制了 AI 的发挥空间
4. 配合 system 使用效果更好:
system 定义"怎么做",prefill 定义"从哪开始"
日常聊天中的”穷人版 Prefill”
如果你用的是网页聊天界面(没有 API),可以用这种方式模拟 prefill 效果:
请直接以"## 分析结论"开头回答,不要任何开场白。
或者:
请用以下格式开头你的回答:
"根据代码分析,问题出在..."
虽然不如真正的 prefill 精确,但能达到类似的”跳过废话、直奔主题”的效果。
3.4 上下文控制:让 AI 站在对的位置看问题
同一个问题,不同上下文 = 不同答案
问题:"苹果怎么样?"
上下文A(水果店)→ "这批苹果很新鲜,甜度高..."
上下文B(科技圈)→ "苹果公司最近发布了..."
上下文C(健身饮食)→ "苹果富含膳食纤维,适合减脂期..."
四种设置上下文的方法
方法1:开头声明背景
"我是一名刚入职3个月的产品经理,
正在准备第一次独立负责的项目立项报告。请帮我..."
方法2:定义受众
"用一个8岁小朋友能理解的方式解释..."
"假设读者是有3年经验的 Java 开发者..."
方法3:限定范围
"仅从中国市场的角度分析..."
"只考虑 2024 年以后的数据..."
方法4:提供参考材料
"基于以下信息回答问题:
[粘贴相关文档/数据]
问题:..."
上下文太长怎么办?
内容超出窗口限制时的三种策略:
1. 分批喂:把长文档分成几段,每段单独处理
"这是第1部分(共3部分),请先阅读,我发完再请你分析"
2. 先摘要再处理:让 AI 先总结长文档,再基于摘要回答
"请先将这篇文章总结为500字,然后基于总结回答我的问题"
3. 只给相关部分:不要塞整篇文档,只粘贴与问题相关的段落
3.5 动手练习
练习1:零样本 vs 少样本对比
用零样本和少样本两种方式让 AI 把以下公司名翻译为中文,对比输出差异:
- Google、Microsoft、Amazon、Netflix
练习2:设计一个角色提示
为以下场景设计完整的角色提示(包含身份、能力、风格、原则):
- 场景:你需要一个”英语口语教练”帮你练习日常对话
练习3:写一个系统提示词
设计一个”个人理财顾问”的完整系统提示词,参照 3.3 节的五层结构。
本章小结
✅ 少样本提示:先给例子再让 AI 干活,格式/分类/风格模仿必备
✅ 角色提示:给 AI 穿上"专业制服",获得专业视角的回答
✅ 系统提示词:AI 的"员工手册",定义行为基线
✅ 三种 API 消息:system(规矩)、user(需求)、assistant(记录)
✅ Prefill 技巧:替 AI 开个头,控制输出格式/语言/方向
✅ 上下文控制:背景、受众、范围、参考材料
✅ 长内容处理:分批喂、先摘要、只给相关部分
下一步 → 04_让AI深度思考.md