温度、top-p、top-k: 参数
top-p(核采样)只保留概率最高的一组 token,直到其累积概率达到 p,例如 0.9。top-k 保留固定数量的候选项,例如 40。温度控制抽样的随机性:当温度接近 0 时,模型几乎总是选择概率最高的 token。Ollama 的初始设置为温度 0.8、top-k 40、top-p 0.9。
本地模型的各项设置中,总会出现三个数值:温度、top-p 和 top-k。本指南解释各个参数会从候选词列表中剔除哪些词,或如何调整这些词的分布,并提供数值示例、Ollama 和 llama.cpp 的默认值、模型发布方公布的建议,以及应用这些设置的方法。
#Top-p、top-k、温度:以表格形式定义
每生成一个词,模型都会为其词汇表中的每个 token 计算概率。采样参数随后决定抽取哪个 token。Top-p 和 top-k 会缩小候选列表;温度参数则调整高概率与低概率 token 之间的概率差距。这些参数都不会为模型增加知识:它们只调节输出的多样性和风险。
| 参数 | 其作用范围 | 低值 | 高值 | Ollama 默认值 |
|---|---|---|---|---|
| temperature | 高概率令牌与低概率令牌之间的差距 | 回复更具确定性 | 多样性更高,错误也更多 | 0,8 |
| top_p | 列表大小,由累积概率定义 | 简短列表,保守输出 | 列表更长,多样性更高 | 0,9 |
| top_k | 最大候选数量 | 候选项较少 | 候选项较多 | 40 |
| min_p | 相对于最高概率设定的阈值 | 轻量级过滤 | 强过滤 | 0.0(已禁用) |
| repeat_penalty | 对最近使用过的 token 施加惩罚 | 减少重复 | 重复更少,但可能产生奇怪的内容 | 1.0(已禁用) |
这些默认值来自 Ollama 的 Modelfile 参考文档。许多模型会在自己的配置文件中提供参数值,从而覆盖这些默认值。因此,阅读模型说明很有必要,下文会进一步介绍。
#LLM如何选择下一个词
只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。
- 在线空间,终身可用
- PDF + 文件
- 30 天内退款
模型会为每个位置生成一个覆盖整个词汇表的概率分布。始终选择概率最高的 token,这种做法称为贪婪解码,会使文本单调、重复,有时还会陷入循环。因此,需要引入由采样参数控制的随机抽样。固定种子(seed)可使这一抽样过程复现:Ollama 文档明确指出,对于相同的提示词,给定的种子会生成相同的文本。
过滤器的应用顺序很重要。llama.cpp 是 LM Studio 等工具使用的 GGUF 推理引擎,其默认顺序为:惩罚项、DRY、top-n sigma、top-k、typical-p、top-p、min-p、XTC,最后才应用温度。也就是说,top-k 和 top-p 作用于原始概率,而温度只用于从剩余候选中采样。许多教程声称顺序恰好相反;实际顺序可能因引擎而异,在 llama.cpp 中可通过 --samplers 参数调整。
#数值示例:各项设置会保留什么
为下一个词选取七个候选词及其概率:0.45;0.25;0.12;0.08;0.05;0.03;0.02。该表格为示例计算,非真实模型的测量结果。
| 筛选器 | 规则 | 保留的候选项 | 覆盖概率 |
|---|---|---|---|
| 无 | 全部词汇 | 7 | 100 % |
| top_k = 3 | 三大最佳 | 3 | 82 % |
| top_p = 0,9 | 当累计值达到0.90时停止 | 4 (0,45 + 0,25 + 0,12 + 0,08) | 90 % |
| top_p = 0.7 | 累计 0.70 | 2 | 70 % |
| min_p = 0.1 | 保留概率高于最高概率值的 10% 的 token,即阈值为 0.045 | 5 | 95 % |
需要记住的关键点:无论情况如何,top-k 始终保留相同数量的候选项;top-p 和 min-p 则会自适应调整。当模型非常确信(某个 token 的概率为 0.95)时,top-p 可能只保留一两个候选项;当模型在十个词之间犹豫时,则会保留更多。因此,相比 top-k,人们往往更倾向于使用 top-p。
#1. 温度:控制随机性的旋钮
采样前,模型的 logits 会除以温度值。温度较低时,token 之间的差距会增大,概率最高的 token 会压倒其他 token。温度较高时,差距则会缩小。温度为 0 时,模型始终选择概率最高的 token,每次尝试都产生相同的输出;llama.cpp 的文档也确认了这一点。
| 候选项 | 原始概率 | T = 0,5 | T = 1,5 |
|---|---|---|---|
| 1er | 45 % | 70 % | 34 % |
| 2e | 25 % | 22 % | 23 % |
| 3e | 12 % | 5 % | 14 % |
| 4e | 8 % | 2 % | 11 % |
| 5e à 7e | 总计 10 % | 1,3 % | 17,8 % |
- 0 à 0,3
- 提取、分类、忠实摘要:您希望每次尝试都得到相同的回答。
- 0,4 à 0,7
- 技术写作、翻译、支持:保持多样性,同时避免偏离。
- 0,8
- Ollama 和 llama.cpp 的默认值:通用对话。
- 1 及以上
- 创造力、头脑风暴;出现错误和偏离主题的风险更高。
#2. Top-p:自适应过滤
Top-p(核采样)会保留概率最高的 token,直到它们的累计概率达到 p。设为 0.9 时,会舍弃累计概率为 10% 的低概率尾部;设为 1.0 时,不进行任何过滤。Ollama 文档指出,较高的值(例如 0.95)会让文本更多样,而较低的值(例如 0.5)会让文本更聚焦、更保守。
- 0,5 à 0,7
- 非常保守:回答稳妥,有时略显单调。
- 0,9
- Ollama 的默认值:截去分布尾部,同时保留多样性。
- 0,95
- llama-server 的默认值,也是多个模型文档推荐的值。
- 1,0
- 过滤器已关闭:仅温度因素起作用。
#3. Top-k:固定上限
Top-k 仅保留概率最高的 k 个 token。Ollama 的文档将此参数描述为降低生成无意义内容概率的一种方法:值较高(100)时,回答更多样;值较低(10)时,回答更保守。其默认值为 40,与 llama.cpp 相同;在 llama.cpp 中,设为 0 可禁用此参数。
| 筛选器 | 优点 | 限制 | 何时使用 |
|---|---|---|---|
| top_k | 简单,能限制计算量 | 忽略分布形态:模型确定时候选过多,犹豫时候选过少 | 范围较宽的限制机制(20 至 100) |
| top_p | 根据模型置信度进行适配 | 如果概率分布较平坦,可能会保留较长的尾部 | 调节多样性的主要参数 |
| min_p | 相对于最高概率设定的阈值,即使温度参数较高也保持稳定 | 相对较少人了解,且在 Ollama 中默认未启用 | top_p 的替代方案,通常配合较高的温度使用 |
对于“top p vs top k”这一查询:将 top-p 作为主要设置,保留 top-k 作为辅助限制,并且不要在同一次测试中同时调整两者,否则你就无法知道是哪一个造成了差异。
#厂商默认值与推荐配置
推理引擎的默认设置是一种通用折中。模型发布者往往会公布适合自家模型的参数值,这些值可能与默认设置不同。以下是 Qwen3.5 模型卡为其模型推荐的设置,可与 Ollama 的默认设置(温度 0.8、top-p 0.9、top-k 40)进行比较。
| 模式 | 温度 | top_p | top_k | presence_penalty |
|---|---|---|---|---|
| 推理、通用任务 | 1,0 | 0,95 | 20 | 1,5 |
| 推理、精准的代码生成 | 0,6 | 0,95 | 20 | 0,0 |
| 无推理,通用任务 | 0,7 | 0,8 | 20 | 1,5 |
这些数值适用于这一模型系列,而不是所有模型。其他发布方的模型卡会给出不同的数值:请在 Hugging Face 模型卡或 Ollama 模型库中的模型页面上,查找推荐采样参数的部分。Qwen 的模型卡还指出,不同推理引擎对这些参数的支持情况有所不同。
#惩罚项:重复、频率、存在性
本地模型,尤其是小型或高度量化的模型,有时会反复输出相同的句子。惩罚机制可以解决这一问题,但其默认设置往往不为人熟知。在Ollama中,repeat_penalty的默认值为1.0,因此不施加惩罚;文档以1.5作为施加更强惩罚的示例。经常被提及的1.1是需要自行选择的设置,并非默认值。
- repeat_penalty
- 对最近出现过的 token 施加惩罚;repeat_last_n(默认值为 64)决定回溯窗口的大小。
- frequency_penalty
- 惩罚力度与出现次数成正比,适用于较长的文本生成。
- presence_penalty
- 只要某个token已经出现过,就对它施加惩罚,以鼓励使用更丰富的词汇;Qwen在多个模式中推荐设为1.5,但数值过高可能导致多种语言混用。
#在 Ollama 中应用这些设置
有两种方法:使用 Modelfile,为一个有名称的模型固定参数值;或使用 API 请求中的 options 字段,该字段接受与 Modelfile 相同的参数。Modelfile 适合日常使用,API 则适合程序调用。
想进一步了解 Modelfile(系统提示、上下文、模板),请参阅定制指南。在 LM Studio 和 Jan 中,同样的参数可以在模型配置面板中调整。
#推理模型:不要只靠温度参数调节一切
推理模型会先生成思考过程,再给出回答。在 Ollama 中,这些模型会提供一个独立的思考字段,可用命令因模型而异:文档建议查询 show API,以了解可接受的值和默认值。例如,gpt-oss 的级别为 low、medium 和 high,默认为 medium。
为减少对简单问题的无谓生成,应优先调整推理层级(若存在),而非温度参数。温度参数应遵循模型的官方说明:过冷的推理可能导致僵化,过热的推理则可能分散。
#按用途划分的初始预设
| 用途 | 温度 | top_p | 其他设置 |
|---|---|---|---|
| 提取、分类、JSON | 0 à 0,2 | 0,9 | 提示中要求的严格格式 |
| 忠实摘要 | 0,2 à 0,3 | 0,9 | repeat_penalty 略高于 1 |
| 通用对话 | 0,7 à 0,8 | 0,9 | 引擎默认设置 |
| 写作、创意 | 0,8 à 1,0 | 0,95 | 适中的 presence_penalty |
| 虚构创作、创意用途 | 1,0 | 0,95 | 控制偏离主题的情况 |
这些预设是起点,并非实测数据。每次只修改一个参数,将同一条提示词运行三次,再比较结果:如果三次试验给出的回答相同,而您希望得到多样化的回答,那么温度过低或随机种子被固定了。
#症状与可尝试的设置
- 模型重复相同的句子
- 启用 repeat_penalty 并将其设为约 1.1,或启用 presence_penalty,也可以通过 num_predict 缩短生成长度。
- 回答平淡且泛泛而谈
- 将温度调高一档(从 0.7 调到 0.9),或放宽 top_p 的限制。
- 模型会编造事实
- 降低温度,但请注意这并不足够:请参阅关于幻觉的指南。
- JSON 格式损坏
- 将温度参数设低,并明确指定所需格式;如果 Ollama 的结构化输出模式可用,请使用该模式。
- 语言混杂或奇怪的词汇
- 降低 presence_penalty 或 repeat_penalty,或略微提高模型量化所用的位数。
LLM 中 top-p 是什么?+
top-p 和 top-k 有什么区别?+
是否需要同时调整温度和 top-p 参数?+
生成代码时应设置多大的温度值?+
Ollama中的默认值是什么?+
什么是min-p,是否需要使用它?+
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。