← 算法与AI总览 首页 / 算法与AI / AI 基础入门 / 第12课 · 采样与生成参数
AI 基础入门 · 第12课

采样与生成参数:temperature、top_p 到底怎么调

同一个问题,模型这次回答很稳,下次突然开始胡说八道——这不是 bug,是采样参数没调对。大模型每吐一个 token,都是在几万个候选里"抽一次签"。这一课讲清楚:贪心 vs 采样的区别、temperature(0 是确定性还是 2 是放飞自我)、top_p / top_k 怎么圈定候选范围、repetition_penalty 怎么治"车轱辘话"。学完你就能给"写代码"和"写小说"配不同的参数手感。

① 小白第一课怎么学(4 步走,约 50 分钟)

采样参数是你在 API / llama.cpp 里最常调的几个旋钮,调对了输出质量立刻上一个台阶。

1建立直觉(10 分钟)
读②③:模型每步都是在概率分布上抽一个 token。
2搞懂 4 个旋钮(15 分钟)
读④:temp / top_p / top_k / rep_penalty 各管一摊。
3会配场景(15 分钟)
读⑤:写代码用什么、写小说用什么、问答用什么。
4刷题自测(10 分钟)
做⑦⑩,错题回⑥看易错点。
本课小目标学完你要能:① 说清贪心和采样的区别;② 解释 temperature 从 0 调到 2 会发生什么;③ 区分 top_p 和 top_k;④ 给"写代码/写小说/做问答"三组场景配出合理参数。

② 一图看懂:模型每一步是怎么"抽签"的

模型算出下一个 token 的 概率分布(几万个候选) 两个选择 贪心:直接选概率最大的 采样:按概率抽一个 采样还要再过 3 个旋钮 temperature 调分布尖锐度 top_p/top_k 圈候选范围 temperature 怎么改变分布(横轴=候选 token,纵轴=概率) temp=0.1(尖峰,几乎必选概率最高的) temp=1.0(自然分布,默认) temp=2.0(平坦,啥都可能)
读法:模型每吐一个 token,都会算出一张"下一个词该是谁"的概率表。贪心 = 永远选第一名;采样 = 按概率大小抽签。temperature 就是把这张表捏尖或拍平:温度越低越尖(确定),越高越平(发散)。

③ 本质直觉:采样就是"按概率抽签"

一句话定义:大模型每生成一个 token,都会先算出词表里每个候选 token 的概率,然后按某种规则从中挑一个。这个"挑"的过程就叫采样(Sampling)。

贪心解码(Greedy):最简单——每次都选概率最高的那个 token。好处是稳定、可复现;坏处是输出死板、容易车轱辘话,而且一步选错后面步步错。

随机采样(Sampling):按概率大小抽签,概率高的抽中概率大,但低概率的也有机会。好处是输出有多样性、有创意;坏处是可能抽中怪词。

关键旋钮 temperature:它在抽签之前先把概率分布"捏一捏"。温度趋近 0 → 分布变成尖峰,几乎只选第一名(≈贪心);温度拉到 2 → 分布被拍平,低概率词也有机会,输出开始放飞。

类比:temperature 就像考试打分后的"水涨船高"系数。温度低 = 只给前几名发奖;温度高 = 把大家分数拉平,后几名也能中奖。

模型输出概率分布 "今天" 后:天气 60% / 吃饭 20% / 跑步 5% / ... temperature 捏分布 低=尖峰 高=平坦 top_p / top_k 圈候选范围 只在圈里抽签,圈外不看 抽出一个 token,拼到输出末尾
为什么需要这些旋钮没有旋钮,模型要么死板(贪心)要么胡说(纯采样)。temperature + top_p + top_k 三个旋钮配合,才能在"稳"和"活"之间找到你要的那个手感。

④ 完整体系:4 个核心参数逐个拆

参数速查表

参数取值范围作用典型值
temperature0 ~ 2(0 最确定)把概率分布捏尖(低)或拍平(高)0.2~0.7 常用,1.0 默认
top_p(核采样)0 ~ 1只在累计概率前 p 的候选里抽0.9~0.95
top_k正整数只在概率最高的前 k 个里抽40~100
repetition_penalty1.0 ~ 1.2惩罚已经出现过的 token,治车轱辘话1.05~1.15
frequency_penalty-2 ~ 2按出现频率惩罚,越常出现惩罚越大0~0.5

top_p vs top_k 一句话区别

top_ktop_p(核采样)
圈候选的方式固定数量:只看概率最高的 k 个动态比例:累计概率加到 p 就停
例子top_k=40:永远只在前 40 个里抽top_p=0.9:累计概率到 90% 就停,候选数随句子变
优点实现简单,可控候选数自适应:简单词时少、难词时多
缺点候选数固定,不够灵活略复杂
llama.cpp 对应参数--temp 0.7 --top-p 0.9 --top-k 40 --repeat-penalty 1.1
top_p 和 top_k 同时用会怎样两者会叠加生效(先按 top_k 截断,再按 top_p 核采样)。一般调一个就够,OpenAI 官方建议优先调 top_p,top_k 用默认或设大。

⑤ 用法场景:写代码 / 写小说 / 做问答各配什么参数

场景temperaturetop_prep_penalty手感
写代码 / 函数调用0.1 ~ 0.30.951.0要确定性,别瞎发挥
事实问答 / 翻译0.2 ~ 0.50.91.05稳为主,偶尔换个说法
通用聊天 / 助手0.6 ~ 0.80.91.1默认区间,平衡稳和活
写小说 / 头脑风暴0.9 ~ 1.20.951.15要创意,允许发散
完全确定性输出0任意1.0贪心解码,同输入必同输出
场景 1:让模型写 Python 函数
代码必须能跑,不能让它自由发挥。
temperature 调到 0.1~0.2,top_p 0.95。这样模型基本选概率最高的写法,不会突然冒出奇怪的变量名。要 100% 可复现就直接 temp=0。
场景 2:让模型写一段故事开头
要创意,不要每次都"从前有座山"。
temperature 拉到 0.9~1.1,top_p 0.95,rep_penalty 1.15。允许低概率词出现,故事才不会套路化。但别超过 1.3,否则开始胡言乱语。
场景 3:模型一直重复同一句话
"这个这个这个"车轱辘话。
把 repetition_penalty 调到 1.1~1.2,或者用 frequency_penalty 0.3~0.5。已经出现过的 token 被降权,就不会一直复读。
调参心法先固定其他参数,只调 temperature:太低死板、太高胡说,找到"既不套路也不跑偏"的那个点,通常在 0.6~0.8。再用 rep_penalty 治复读,top_p 一般不用动。

⑥ 高频错误诊断(4 条)

错误 1:以为 temperature 越高越好(越有创意)超过 1.2 之后模型开始胡说八道、逻辑断裂。创意和失控只有一线之隔,写作类 1.0 左右足够。
错误 2:写代码时 temperature 拉很高代码必须确定,temp 高了会冒出不存在的函数名、变量名乱编。写代码用 0.1~0.3。
错误 3:以为 top_p=1 就是关闭采样top_p=1 表示不做核采样(全候选都看),但 temperature 还在起作用。要完全确定性得把 temperature 设 0。
错误 4:repetition_penalty 拉到 1.5 以上惩罚太狠会导致模型为了不重复而故意换奇怪的词,甚至语义不通。1.0~1.2 是安全区。

⑦ 考点真题演练(4 题)

考点分布

考法出题形式应对
贪心 vs 采样问哪个最确定贪心 = 选概率最高
temperature问 0 和 2 分别怎样0=确定,2=发散
top_p问核采样原理累计概率到 p 就停
调参场景问写代码用多少低 temp(0.1~0.3)

真题基础1. 贪心解码(greedy)和采样(sampling)的核心区别是什么?

真题中档2. 把 temperature 设为 0,模型会怎样?

真题中档3. top_p=0.9 的"核采样"是什么意思?

真题拔高4. 让模型写一段能直接运行的 Python 函数,下面哪组参数最合适?

⑧ 必背知识点卡

采样本质:模型每步在概率分布上抽一个 token 不是查字典
贪心:永远选第一名,确定但死板 temp=0 即贪心
temperature:0=确定,1=默认,2=发散 常用 0.6~0.8
top_p:核采样,累计概率到 p 就停 常用 0.9~0.95
top_k:只在前 k 个候选里抽 常用 40~100
rep_penalty:1.0~1.2,治车轱辘话 别超 1.2
写代码:temp 0.1~0.3;写小说 temp 0.9~1.2 按场景调

⑨ 应用输出:curl 一次带完整采样参数的请求

实战场景:用 OpenAI 兼容接口,让模型写一段有创意的文案。
① 选参数:写文案要创意,temperature 拉到 0.9,top_p 0.95。
② 发请求:
curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen",
    "messages": [{"role":"user","content":"写一句奶茶店招牌文案"}],
    "temperature": 0.9,
    "top_p": 0.95,
    "repeat_penalty": 1.1
  }'
③ 对比:把 temperature 改成 0.2 再跑一次,你会发现文案变得很"正确"但没味道;改回 0.9 就有创意了。
口述全链路"模型算出下一个 token 的概率分布 → temperature 把分布捏尖或拍平 → top_p/top_k 圈定候选范围 → repetition_penalty 给出现过的 token 降权 → 在剩下的候选里抽一个,拼到输出末尾。"

⑩ 分层练习 16 题(基础 6 + 中档 5 + 拔高 5)

▍基础 6 题

基础1大模型每生成一个 token 时在做什么?
先算出词表里每个候选 token 的概率,再按某种规则(贪心或采样)挑一个出来。
基础2贪心解码是什么意思?
每一步都选概率最高的那个 token,确定但死板,同输入必同输出。
基础3temperature 设为 0 会怎样?
分布变成尖峰,退化为贪心解码,输出完全确定。
基础4repetition_penalty 用来治什么?
治"车轱辘话"——模型一直重复同一句话/同一个词。
基础5写代码时 temperature 一般设多少?
0.1~0.3,要确定性,别让它自由发挥。
基础6top_p 的取值范围是多少?
0 ~ 1,常用 0.9~0.95。

▍中档 5 题

中档7temperature 从 0.7 调到 1.3,输出会怎么变?
分布被拍平,低概率词有更多机会被选中,输出更发散、更有创意,但也更容易出现逻辑不通的胡说。
中档8top_p 和 top_k 的本质区别?
top_k 固定数量(永远只在前 k 个里选);top_p 动态比例(累计概率到 p 就停,候选数随句子难度自适应)。
中档9frequency_penalty 和 repetition_penalty 有什么区别?
repetition_penalty 对"已经出现过的 token"整体降权;frequency_penalty 按出现次数线性惩罚(出现越多罚越重),颗粒度更细。
中档10为什么 temperature 太高(如 2.0)会导致输出胡说?
分布被拍平后,低概率的怪词、不通顺的组合也有不小概率被抽中,模型开始"为了不重复而硬凑",逻辑和语法都崩。
中档11写小说/头脑风暴一般配什么参数?
temperature 0.9~1.2,top_p 0.95,repetition_penalty 1.15。要创意、允许发散,但别超 1.3。

▍拔高 5 题

拔高12top_p=1.0 是不是等于关闭采样?
不是。top_p=1.0 只表示不做核采样(全候选都参与),temperature 仍在起作用。要完全确定性必须把 temperature 设 0(或 0.01)。
拔高13为什么 temperature 和 logits 缩放是一回事?
temperature 实际作用在 softmax 之前的 logits 上:logits 除以 T 再 softmax。T 小 → 差异被放大 → 尖峰;T 大 → 差异被缩小 → 平坦。
拔高14repetition_penalty 设到 1.5 以上会出什么问题?
惩罚太狠,模型为了不重复而故意换生僻词、绕着说,甚至语义不通。1.0~1.2 是安全区。
拔高15为什么 API 厂商推荐"优先调 temperature,少动 top_p"?
temperature 是全局手感旋钮,调一档整体风格就变,直观;top_p 是硬性截断,调不好容易突然丢词。日常用 temperature 0.7 + top_p 0.9~0.95 就够了。
拔高16要让同一个 prompt 每次输出完全一致,除了 temp=0 还要注意什么?
还要固定随机种子(seed)、固定系统提示、固定上下文窗口大小、相同模型版本。即使 temp=0,不同推理引擎/批处理实现也可能有微小数值差异。

⑪ 记忆口诀 + 7 天复习计划

三句口诀 ① 模型每步抽签,贪心选第一、采样按概率抽。
② temperature 捏分布:0 确定、1 默认、2 放飞;常用 0.6~0.8。
③ 写代码低 temp(0.2)、写小说高 temp(1.0);rep_penalty 1.1 治复读。
天任务自检
第 1 天读②③,画"概率分布→抽签"流程图说清贪心 vs 采样
第 2 天背知识点卡 + 基础 1-6基础全对
第 3 天读④参数表,做中档 7-11区分 top_p/top_k
第 4 天做拔高 12-16理解 logits 缩放
第 5 天做⑦真题 4 题 + 实测 curl 改 temp手感对得上
第 6-7 天合上书口述三句口诀不看资料全说对

📌 知识链路

前置知识(先学) · 第11课 · 分词器:采样是在 token 序列上一步步抽下一个 token,先搞懂 token 是什么。
本节位置 本页站在模型"生成输出"的环节——模型算出概率分布后,用这一课的旋钮决定怎么从中挑出下一个 token。它直接决定输出的风格和质量。
下一步(学完去) · 第21课 · 结构化输出:在采样基础上加 grammar 约束,让模型只能吐合法 JSON。
· 第22课 · 流式输出:采样出一个 token 就立刻推给前端,形成打字机效果。
← 第11课 · 分词器 算法与AI总览