调参这件事,说难也难,说简单也简单。难在参数之间互相影响,牵一发而动全身;简单在大多数生成效果差的问题,追根溯源就那么几个常见原因。本文把温度、采样策略、重复惩罚这几个核心参数掰开揉碎讲清楚,再结合实际踩过的坑做一次系统梳理,希望能帮你建立一套自己的调参思路。

先搞懂参数到底在控制什么
很多人调参数像买彩票,随机改一个值跑一次,效果不好再换一个。这种做法效率低,是因为没理解每个参数背后的数学含义。模型在每一步生成时,会对词表中的所有候选词输出一个概率分布,参数做的事情,本质上都是对这个分布进行加工。
temperature(温度)控制的是分布的“尖锐程度”。公式上,它对logits做除法后再过softmax。温度越低,概率分布越陡峭,高概率词的优势被放大,输出趋向保守和确定;温度越高,分布越平缓,低概率词也有机会被选中,输出更随机、更有 surprises,但也更容易胡言乱语。
top_p(核采样)是另一种思路。它不做整体缩放,而是从概率最高的词开始累加,截取累计概率达到p值的那个候选集合,再从中随机采样。top_p=0.9意味着每一步只从累计概率前90%的词里挑。top_k则是硬性只保留概率前k个词。这两者一个按概率质量截断,一个按数量截断,经常配合使用。
常见生成问题与对应调参方案
参数没有标准答案,但问题有典型对应。下面这张表是笔者在实际项目中反复验证过的经验,遇到对应症状时可以直接按方向调整。
| 症状 | 可能原因 | 建议调整 |
|---|---|---|
| 长文本反复重复同一句话 | 重复惩罚不足或温度过低 | 适度提高temperature至0.8以上,增加repetition_penalty |
| 输出干瘪、句式单一 | 温度过低,采样过窄 | temperature提升到0.9左右,top_p放宽到0.95 |
| 逻辑跳跃、前后不连贯 | 温度过高或top_p过大 | 降温到0.6-0.7,top_p收窄到0.85 |
| 事实性错误明显偏多 | 采样过于激进 | temperature降到0.3以下,甚至直接用贪心解码 |
针对重复问题多说两句。重复是长文本生成最常见的顽疾,很多人一遇到重复就猛加惩罚系数,结果惩罚值飙到1.5以上,文章里开始出现生造词和不通顺的替换。更稳妥的做法是惩罚值控制在1.1到1.2之间,同时配合温度一起调,往往比单方面加惩罚效果好得多。
几组实用的参数组合参考
与其每次从零开始试,不如记住几组经过验证的场景化组合,遇到对应任务直接套用,再微调即可。
# 场景一:代码生成、数据提取等准确性优先的任务
params_accurate = {
"temperature": 0.2,
"top_p": 0.8,
"top_k": 40,
"repetition_penalty": 1.05
}
# 场景二:营销文案、创意写作等多样性优先的任务
params_creative = {
"temperature": 0.95,
"top_p": 0.95,
"top_k": 50,
"repetition_penalty": 1.15
}
# 场景三:长篇报告、技术文档等连贯性优先的任务
params_longform = {
"temperature": 0.7,
"top_p": 0.9,
"top_k": 50,
"repetition_penalty": 1.2
}
第一组适合问答系统、信息抽取这类要求输出稳定可复现的场景。注意temperature设成0并不总是最优,某些模型在极端低温下反而更容易陷入重复循环,0.2是个相对安全的位置。
第二组用于创意场景,高温配合宽采样能带来丰富的表达。但创意场景也不要盲目把温度拉满到1.5以上,超过模型建议范围后,输出质量会断崖式下跌,语法错误和不知所云会显著增加。
调参的顺序和验证方法
调参要有章法。推荐的顺序是:先固定一个中等基准(比如temperature=0.7,top_p=0.9),然后一次只动一个参数,观察输出变化方向,确认趋势符合预期后再动下一个。同时动多个参数,你永远不知道是哪个改动起了作用。
验证时务必多跑几次。采样参数带来的是随机性,单次输出好不代表参数好,建议每个配置至少跑三到五次,看输出的整体稳定性。条件允许的话,准备一组固定的测试提示词,每次调参后批量跑一遍,对比输出的差异,这比肉眼临时判断靠谱得多。
最后提醒一点:参数调优解决的是“模型有能力但没发挥出来”的问题。如果不管怎么调,效果都上不去,那问题多半出在提示词本身,或者模型能力与任务不匹配。先确认提示词清晰具体、任务难度在模型能力范围内,再谈参数优化,这个先后顺序不要搞反。调参是锦上添花,不是起死回生。