第 3 周 — Generation 与 Prompt Engineering
Sign in
Adventure II · 第 3 周
第 3 周 — Generation 与 Prompt Engineering
你已经知道盒子里装的是什么。现在学怎么把它开起来。

Adventure 8

上集 Adventure II 回顾
上次我们讲到哪儿
  • 第 1 周: LLM 就是一台「猜下一个词」的机器
  • 第 2 周: 拆开机器看里面 — tokens、attention、transformers
  • 第 3 周(今天): 怎么让它说出你想要的话

Adventure 8

学习目标
3 小时后你会掌握的东西
今天结束时,你能够:
解释「随机性」
为什么 LLM 对同一个 prompt 会给出不同答案
挑对 temperature
针对任何任务 — 代码 vs 创意写作
两种 prompt 都会用
分得清 system prompt 和 user prompt — 并且两个都能用
写出稳定的 prompt
5 个能持续拿到更好输出的套路
debug 烂 prompt
诊断一个有问题的 prompt,2-3 轮迭代内修好它

Adventure 8

开始之前
约法三章 — 3 条基本规则
1
你开的是 API,不是 chat app
我们用 playground,不用 ChatGPT.com
2
按 Run 之前先预测
每个实验:先猜会看到什么,再去验证
3
迭代,而不是求它
烂输出 ≠「再客气点问问」。烂输出 =「改 prompt 的结构」。

Adventure 8

热身
开课前 — 快速校准一下
三个问题,叫醒你的大脑:
问题 1
如果你问 ChatGPT 完全一样的问题两次,会得到一样的答案吗?为什么会/不会?
问题 2
在 AI 里,「高 temperature」和「低 temperature」有什么区别?
问题 3
你写过失败的 prompt 吗?你后来改了什么?

不要查任何资料 — 就讲你最直觉的猜测。这里现在还没有错误答案。

Adventure 8

第 1 部分 — Generation 到底是怎么工作的
Generation 不是你想的那样
模型不是挑一个词。它挑的是一个概率分布。
  • 每一步:模型对词表里的每一个 token(大约 100,000 个)都输出一个概率
  • 然后它 采样(sample) 从这个分布里挑出一个 token
  • 重复,直到生成结束

Adventure 8

慢动作看一遍
Prompt: "The capital of France is"
模型的真实输出 — 下一个 token 的概率:
Token
概率
Paris
0.87
the
0.04
a
0.02
located
0.01
... 还有 99,996 个
极小
Paris 一般会赢。但不是每次都赢。

Adventure 8

我们来澄清几个迷思
三个常见的误解
大多数人至少相信下面其中一个:
❌ 「ChatGPT 会挑最好的答案」
它是从一个概率分布里挑出「一个」答案 — 不是「客观最好」的那个
❌ 「同样的 prompt = 同样的答案」
几乎从不 — 因为 sampling,每次骰子都会重新掷一次
❌ 「把 temperature 设成 0 就是确定性的了」
也不完全是 — 就算这样,微小的差异也会偷偷溜进来(等下会讲)

Adventure 8

📘 概念卡
Sampling
是什么: 从所有可能 token 的概率分布里挑一个 token 出来。
就像: 转一个加权的轮盘 — 大格子更容易中,但小格子也有机会。
为什么重要: 「AI 创造力」全部都从这里来。它字面意义上就是随机的。
模型写的每一个词,都是轮盘转一次。改变轮盘的形状 → 改变输出。

Adventure 8

第一个旋钮
Temperature — 创造力旋钮
一个数字,在 sampling 之前 重新塑造概率分布。
设定
效果
T = 0
概率最高的 token 永远赢。最可预测,也最无聊。
T = 0.7
大致是默认值。有些变化,但还算聚焦。
T = 1.0
原始概率,不做任何缩放。
T = 1.5+
把分布拍平。低概率 token 也有真的机会。事情开始变奇怪。

Adventure 8

现场看 Temperature
同一个 prompt,三个 temperature:
T = 0
「猫坐在垫子上。」
T = 0.7
「一只小橘猫蜷在窗台上。」
T = 1.5
「胡须,那些午夜的小外交官,正在和月亮谈判。」

Adventure 8

什么时候用哪种设定
什么时候 T 调低,什么时候调高
任务
Temperature
代码、数学、查事实
T ≈ 0
总结、翻译
0.2 – 0.5
头脑风暴、写作
0.7 – 1.0
把模型从套路里推出来
> 1.0

经验法则: 随机会害事 → T 调低。随机有帮助 → T 调高。

Adventure 8

知识小测
直觉快测 — 课程中段检查点
两个问题要大声回答(不能只在心里想):
问题 1
为什么 temperature 越高,输出越「有创意」? 从数学上讲?
先预测答案再讨论。
问题 2
如果你写了一个 Python 脚本,每次运行都需要相同的答案,你会把 temperature 设成多少?
这真的能保证输出完全一致吗?

Adventure 8

第二个旋钮
Top-k — 硬截断
Temperature 重塑分布。Top-k 直接砍掉尾巴。
它做什么
Top-k = N 意思是:只考虑概率最高的 N 个 token。其他全部丢掉。
Top-k = 1
只有最顶上的那个 token 幸存 — 等同于 T = 0。完全没有变化。
Top-k = 50
前 50 个 token,变化够多。一个常见的安全默认值。

Adventure 8

第三个旋钮
Top-p(Nucleus Sampling) — 自适应截断
规则
Top-p = X 意思是:留下刚好够多的高概率 token,覆盖到 X% 的概率质量
举例:Top-p = 0.9
留下足够多的 token,占到 90% 的概率质量。长尾全丢掉。
为什么它比 top-k 更聪明
截断是 动态的:简单的 prompt → 可能 3 个 token。开放的 prompt → 可能 200 个。

Adventure 8

📘 概念卡
Top-p(Nucleus Sampling)
是什么: 保留覆盖 X% 概率质量的最小一组高概率 token;丢掉长尾。
就像: 在自助餐里,只考虑大家真的在拿的菜。空盘子全部无视。
为什么重要: 比 top-k 干净。会根据模型对下一个词「确定」还是「不确定」自动调整。

Adventure 8

三个旋钮 — 速查表
旋钮
它做什么
好用的默认值
Temperature
在 sampling 之前对分布重新缩放
0.7
Top-k
只留前 N 个 token
50
Top-p
留够 token,覆盖 X% 质量
0.9

大多数 API 三个都能设。它们会组合作用。一般你只需要调其中一个。

Adventure 8

知识小测
知识小测 2 — 挑旋钮
对每个任务,你会挑什么旋钮设定?先想再答。
生成 SQL 查询
什么 temperature?什么 top-p?为什么?
给小朋友写睡前故事
什么 temperature?什么 top-p?为什么?
从乱糟糟的文本里抽出 JSON
什么 temperature?什么 top-p?为什么?
头脑风暴创业点子
什么 temperature?什么 top-p?为什么?

Adventure 8

你大概问过的一个问题
为什么同一个 prompt,答案不一样?
你发现过:问 ChatGPT 同一个事情两次,得到不同的答案。
1
你以为的
「这 AI 反复无常」或者「它坏了」。
2
实际发生的
这不是 bug。这就是 sampling。每次调用:骰子都会在概率分布上重新掷一次。

✓ 重点:非确定性是特性,不是 bug。学会绕着它来设计。

Adventure 8

再往深一点
就算 T=0 也不是真的确定性
「temperature 零」依然没法完美复现,有两个出人意料的原因:
GPU 上的浮点运算
在不同运行之间没办法完美复现。微小的舍入误差会累积。
云服务商会把你的请求批处理
你的请求是和其他请求一起处理的 — batch 的组成会影响结果。

每次都要完全一样的输出?跑本地模型加固定 seed。否则:就绕着非确定性来设计。

Adventure 8

轮到你了
自己试一下
01
打开 playground
OpenAI 或 Anthropic 的 playground — 不是 chat 界面
02
把 temperature 设成 0
找到 temperature 滑条,一路拉到底
03
同一个 prompt 跑 5 次
两次之间不要改任何东西
04
看看:是完全一样,还是只是相似?
如果不是完全一样,你刚刚就亲眼看到了浮点非确定性。欢迎来到真实世界。

Adventure 8

第 2 部分 — 跟模型说话
每个 API 都有的两个通道
现代 LLM API 接收 两种输入:
  • System prompt — 对整段对话都生效的持续指令
  • User prompt — 用户每一轮敲进去的内容
system prompt 在 ChatGPT 里是藏起来的。在 API 里你能看见。

Adventure 8

看看实际效果
例子 — 海盗 System Prompt
System: You are a pirate. Speak only in pirate English. Every response must include the word "matey." User: What is photosynthesis? Output: Arrr, matey! Plants be doin' a magical thing called photosynthesis — they take sunlight, water, and a bit o' the breeze and turn it into food.

system prompt 会跨轮次保留。user prompt 只是这一轮的消息。

Adventure 8

📘 概念卡
System Prompt
是什么: 模型在 之前 你说话之前就拿到的那套隐藏「游戏规则」。
就像: 服务员的培训。他们用同样的方式问候每一位客人,是因为他们被训练过 — 不是因为客人怎么问的。
为什么重要: 如果你想在很多用户或多个 session 之间保持一致的行为,system prompt 就是它该待的地方。

Adventure 8

ChatGPT 藏了什么没告诉你
ChatGPT 的隐藏 System Prompt
每一次 ChatGPT 对话开场,都有一个你看不到的 system prompt:
  • 「You are ChatGPT, the current date is...」
  • 安全规则
  • 工具使用说明
  • 格式偏好
所以 ChatGPT 不管谁在用,表现都差不多。

切到 API 你就自己写这个。这就是力量。

Adventure 8

第 3 部分 — 5 个永远有效的套路
套路 1 — Role(角色)
告诉模型它是谁。
❌ 模糊
「帮我看看我的作文。」
✅ Role prompt
「You are a high school English teacher with 20 years of experience. Help me revise this essay.」

为什么有效: 把训练数据里对的那些例子拉进模型的 attention 里。

Adventure 8

套路 2
套路 2 — Format(格式)
告诉模型输出应该长成什么样子。
❌ 模糊
「跟我讲讲行星。」
✅ Format prompt
「List each planet with: name, distance from sun (AU), and one weird fact. Output as a Markdown table.」

模糊的输出 = 难用。结构化 = 直接能用。

Adventure 8

套路 3
套路 3 — Few-shot
给模型看 2-3 个例子。然后丢一个新的输入给它。
模型会接着你的模式继续。对自定义格式来说,稳得吓人。

你不是在告诉模型规则 — 你是在 演示 给它看。模型会从你的例子里反推出规律。

Adventure 8

套路 4
套路 4 — Chain-of-Thought(CoT)
任何需要推理的事情,都加上: 「Think step by step.」
❌ 直接提问
「23 × 47 等于多少?」
✅ Chain-of-thought
「What's 23 × 47? Think step by step before giving the final answer.」

为什么有效: 模型只能看到自己之前生成的 token。逼它把推理写出来 → 每一步都建立在上一步上 → 准确率飙升。

Adventure 8

套路 5
套路 5 — Constraints(限制)
告诉模型不要做什么,或者设硬性上限。
「写一首关于秋天的诗。
- 严格 4 行。
- 不能有超过 6 个字母的单词。
- 不能出现 'leaves' 或 'cold'。
- 以问号结尾。」

限制会把模型从默认路径上推开。输出会变得更锋利。

Adventure 8

5 个套路 — 速查表
套路
一句话用法
Role
「You are a...」
Format
「Output as JSON...」
Few-shot
2-3 个「输入→输出」例子
Chain-of-Thought
「Think step by step」
Constraints
「严格 4 行,不准出现 X」

Adventure 8

5 个反面套路 — 以及怎么修
反面套路
例子
修法
模糊
「让它更好。」
「Improve by: (1) shorten to 80 words, (2) active voice, (3) one concrete example.」
多任务
「翻译、总结、查事实。」
跑 3 个 prompt。每个只做一件事。
自相矛盾
「简短但要解释得详细。」
只选一个。
没有上下文
「为什么这个是错的?」
模型看不到你的屏幕。把「这个」是什么也写进去。
要新鲜信息
「今天天气怎么样?」
用工具(第 4 周讲)。

Adventure 8

动手任务
你的任务 — 维基百科俳句挑战
目标: 让一个 LLM 把任意一篇维基百科文章变成一首 3 行俳句,抓住它的精华。
规则
  • 3 行,音节为 5-7-5
  • 必须提到文章里的一个具体事实
  • 第 1 行不能直接说出主题的名字
怎么玩
  1. 挑一篇文章
  1. 写出你的第一个 prompt,跑一次,看看哪里不对
  1. 用 5 个套路来改进
  1. 迭代 5 次
  1. 和同学的对比一下 — 谁的更锋利?

Adventure 8

3 小时总结
你现在理解了:
  • ✅ Generation = 从一个概率分布里 sampling
  • ✅ Temperature、top-k、top-p 是塑造它的三个旋钮
  • ✅ 同样的 prompt → 不同的答案是正常的 — 而且你现在完全知道为什么
  • ✅ System prompt vs user prompt — 以及 ChatGPT 藏了什么没告诉你
  • ✅ 5 个永远有效的套路,5 个要避开的反面套路

Adventure 8

作业 + 预告
本周任务 + 第 4 周预告
这一周
  • 完成俳句挑战。把你最棒的 prompt + 输出存下来。
  • 下周把你最终的 prompt 带回来 — 我们会用到它。
下周 — Agents:当 LLM 能用工具
到现在为止,LLM 被锁在自己的脑子里。它能想,但它不能 做事。下周:当你给它装上手 — 让它能读文件、跑代码、上网的工具 — 会发生什么。我们会看 Claude Code 工作,然后反向拆解出 agent loop。

Adventure 8