模型生成回答时,每一步都会根据当前上下文,计算下一个 Token 的分数,再由解码程序选出一个。已经生成的内容会加入后续计算,模型就这样继续往下生成,直到满足停止条件。这种方式称为自回归生成。

假设某一步有 A、B、C、D 四个候选 Token,在温度为 1 时,概率分别是 50%、30%、15%、5%。如果按这组概率采样,A 最容易被选中,但 B、C、D 也有机会。

temperature 和 top_p 就是在这个选择过程中起作用的:前者调整各个候选的概率,后者筛选哪些候选可以参与采样。输出长度上限则控制这次最多允许生成多少 Token。

下面沿用这组人为设定的概率讨论参数作用,不把它当成某个模型的实际输出。参数怎样影响每一步选择,与整篇回答最终好不好,还需要分开讨论。

temperature 与概率分布

温度调低,高概率 Token 会占更大的比例;温度调高,低概率 Token 被选中的机会也会增加。

还是前面这组数据,温度从 1 降到 0.5 后,A 的概率从 50% 增加到约 68.49%,D 则从 5% 降到约 0.68%。面对相同的分布,低温采样更容易选到同一个高概率候选,输出通常也更少变化。

把三种温度的计算结果放在一起,保留四位小数:

温度ABCD
0.50.68490.24660.06160.0068
1.00.50000.30000.15000.0500
2.00.37900.29360.20760.1198

这几组概率可以从原来的分布算出来。设温度为 1 时的概率是 ,新温度为 ,则:

当 时,,相当于先把各概率平方,再除以平方后的总和,让它们重新加起来等于 1。这一步就是归一化。候选的排序没有变,但原来较高的概率占了更大的比例。

模型内部输出的是还没有转换成概率的分数,称为 logits。设分数为 ,实现时先把分数除以温度,再通过 softmax 转换成概率:

会扩大分数之间的差距, 会缩小差距, 则不做温度缩放。Transformers 的温度处理实现中,对应的操作就是把 logits 除以 temperature。

低温减少了采样带来的变化,但不会判断事实。如果错误内容在当前上下文下得分最高,低温仍会偏向它。高温让低概率候选有了更多机会,可能换来不同的表达,也可能让内容偏题或不连贯。因此,不能只根据温度高低判断回答质量。

温度为 0 需要另外处理,上面的公式不能直接代入。贪心解码会在每一步选取分数最高的 Token;当最高分唯一时,温度趋近于零的采样分布会趋近这个选择。例如,Transformers 的温度处理器要求正数,需要贪心生成时使用 do_sample=False。其他接口怎样处理 temperature=0,应查看对应说明。

贪心解码只决定当前这一步选什么,并不能保证选出来的整段文本是全局最优解。

top_p 与候选集合

top_p 控制每一步有哪些 Token 可以参与采样。它先按概率从高到低排序,再从前往后累加,累计概率达到阈值时就停止,后面的候选不再参与这一步选择。

这种方式称为核采样(nucleus sampling),取的是累计概率达到或超过阈值的最短前缀,最初由 The Curious Case of Neural Text Degeneration 提出。

沿用温度为 1 时的分布,设置 top_p=0.8:

A:0.50               累计 0.50
B:0.30               累计 0.80 ← 达到阈值
C:0.15               排除
D:0.05               排除

A、B 加起来刚好是 0.8,于是这一步只从它们之间选。留下的概率要重新归一化:A 变成 0.50 / 0.80 = 0.625,B 变成 0.30 / 0.80 = 0.375。

如果改成 top_p=0.9,A、B 加起来还不够,就要再保留 C。此时累计概率是 0.95,虽然超过了阈值,C 仍然需要留下,否则就达不到 0.9。

所以,这里的 0.9 指累计概率,不是词表中前 90% 的 Token,也不是要求单个 Token 的概率超过 0.9。保留多少个候选,取决于这一步的分布。如果 A 自己的概率已经是 0.95,top_p=0.9 就只需要保留 A。换到分布更分散的一步,可能要保留更多候选。top_k 则直接规定保留多少个,控制方式不同。

温度也会影响核采样的结果。假设处理顺序是“温度缩放 → 核采样”,在 、top_p=0.8 时,保留 A、B 就够了;温度升到 2 后,A、B 加起来只有约 0.6726,需要再留下 C。

这意味着,两个参数一起改时,既改变了概率,也可能改变候选数量。做对照实验时,可以先固定一个,只调整另一个,方便判断变化来自哪里。实际服务还可能使用其他过滤器,完整的解码过程需要结合实现或接口说明确认。

输出长度与停止条件

输出长度上限决定这次最多允许生成多少 Token。比如设为 256,模型可以在生成 90 个 Token 后结束,不需要把剩余预算用完;如果生成到 256 个 Token 时还没写完,就会因为达到上限而停止。

因此,希望模型“用三句话回答”时,仍然需要在提示词里写出这个要求。长度上限只负责限制生成量,不会替我们安排三句话的结构。把上限压得过低,可能连最后一句、JSON 的引号或括号都没生成完。

不同接口的长度字段不完全一样。以 Transformers 为例,max_new_tokens 只计算新生成的 Token;对于输入与生成内容放在同一序列中的模型,max_length 计算两者的总长度。文档推荐用 max_new_tokens 控制生成量。其他服务可能使用 max_tokens 等字段,接入时还需要确认推理 Token 是否占用同一预算。GenerationConfig 文档列出了长度参数的含义。

模型也可能在用完预算之前,因为生成结束 Token、命中停止字符串或提出工具调用而结束。应用需要读取返回的停止原因。例如,DeepSeek 的 finish_reason 中,length 表示触及输出或上下文长度限制,stop 表示自然结束或命中停止字符串,tool_calls 表示生成了工具调用。具体定义见 接口文档。

HTTP 请求成功,只能说明拿到了响应。回答是否完整、是否满足任务要求,还需要检查内容。比如任务要求三个标题,模型只返回了两个,即使停止原因是 stop,业务上仍然不合格;这时增加长度上限也未必有用。

输出预算还要考虑上下文窗口。对于输入和输出共用窗口的模型:

输入越长,窗口里能留给输出的空间就越少,同时还要满足模型独立的输出上限。输入中的指令、历史、资料和工具信息都需要计算在内,具体组成见 一次模型调用的输入究竟包含什么。

这里限制的单位始终是 Token,256 Token 不能直接换成 256 个汉字。两者的关系见 Token 是什么:为什么字数不能直接换算模型用量。

参数实验与任务评价

前面的算例解释了概率怎样变化。到了实际调用,我们关心的还包括回答是否符合要求、表达有没有变化,以及用了多少 Token。

比如,把任务固定为:

为一款支持离线编辑、全文搜索的笔记工具写 3 个中文标题。
仅返回 JSON 字符串数组;每个标题不超过 12 个字符;
不得声称产品支持未提供的功能。

可以用下面四组配置做对照。示例假定目标模型支持这些取值、采用随机采样,且没有其他候选过滤。“输出上限”在请求中要换成对应接口的字段,这里的数值用于比较,不是适用于所有模型的推荐配置。

组别temperaturetop_p输出上限与基线相比
基线1.01.0256保留完整候选分布
低温0.51.0256只改变温度
核采样1.00.9256只改变累计概率阈值
短预算1.01.032只改变输出上限

这几组实验使用相同的模型版本、完整上下文、思考模式、工具、格式约束和停止条件。每次都发送同一份输入,不把上一份回答追加到历史里,否则输入也跟着变了。

如果本地运行环境支持固定随机种子,可以为各组准备同一组种子,逐一比较;远程服务是否承诺复现,需要看服务协议。

每组都采样多次,再分别记录:

  • 格式合格率:是否能解析为 JSON,且恰有三个字符串,每个字符串不超过 12 个字符。
  • 内容合格率:标题是否符合产品功能,有没有编造能力。
  • 表达差异:不同调用之间是否反复使用相同标题,措辞是否有变化。
  • 生成用量与停止原因:输出用了多少 Token,多少次因长度限制停止。

JSON 能否解析、数组长度和标题字符数,可以用程序检查。内容是否贴合、表达是否重复,则需要先约定评价标准。每组先做十次,可以用来观察现象,但只出现一两次好结果,还不足以判断哪个参数更适合这项任务。

这些结果需要分开看:标题变化多,不代表内容就好;JSON 合格,也可能编造了产品功能。短预算组消耗更少,如果经常被截断,节省下来的 Token 也换不到可用结果。应先满足任务和格式要求,再比较表达变化与用量。

运行之前,还要确认目标模型会采用传入的参数。例如,DeepSeek 的思考模式会忽略 temperature;deepseek-flash 的 top_p 只在思考模式生效,有效范围是 0.95–1.0,低于 0.95 会按 0.95 处理,在非思考模式则忽略传入值。这种情况下,直接照搬上表就无法完成预期对照。各模型的区别见 思考模式文档。

实际调整时,可以从问题本身出发。表达反复雷同,可以比较采样设置;回答写到一半中断,检查输出预算和停止原因;缺少回答依据,就要回到上下文和任务设计中找原因。温度不能补上没有提供的信息,输出预算也不能替代内容要求。