1️⃣ temperature(温度)——控制“概率分布的平滑程度”
模型本来会输出一个概率分布:
tokenA: 0.7
tokenB: 0.2
tokenC: 0.1
temperature 会对这个分布做“拉伸/压缩”:
低温(0~0.3)
→ 分布更尖锐
→ 更接近“选概率最高的词”
→ 更确定、稳定高温(0.7~1.2)
→ 分布更平滑
→ 小概率词更容易被选中
→ 更发散、有创造性
👉 数学上其实是:
[
P_i = \frac{e^{logits_i / T}}{\sum e^{logits / T}}
]
👉 直觉一句话:
temperature = “敢不敢冒险”
2️⃣ top_p(nucleus sampling)——控制“参与抽奖的候选池”
不是调整概率,而是裁剪候选集合。
步骤:
按概率排序 token
从高到低累加,直到总概率 ≥ p
只在这个子集里采样
举个例子:
原始分布:
A: 0.5
B: 0.2
C: 0.15
D: 0.1
E: 0.05
top_p = 0.7:
选:
A (0.5) + B (0.2) = 0.7
👉 只在 {A, B} 里选
👉 直觉一句话:
top_p = “允许多少概率质量参与竞争”
和 temperature 的区别
| 参数 | 作用本质 |
|---|---|
| temperature | 改概率分布形状 |
| top_p | 截断候选集合 |
👉 组合效果:
temperature 决定“洗牌程度”
top_p 决定“参与人数”
3️⃣ frequency_penalty ——“你刚说过,就少说点”
这个参数是对已经生成过的 token 做惩罚
👉 逻辑:
出现次数越多 → 概率被压低
举个例子:
生成中:
the cat and the cat and the ...
如果 frequency_penalty > 0:
“the”、“cat” 被重复使用
下一次出现概率会下降
👉 数学近似:
[
logits_i = logits_i - \lambda \cdot count(i)
]
👉 直觉一句话:
frequency_penalty = “别复读”
使用场景
| 场景 | 建议 |
|---|---|
| 写文章 | 0.3 ~ 0.8 |
| 代码生成 | 0 |
| 列表生成 | 0.2 |
4️⃣ max_tokens ——“最多说多少”
这个最简单,但很多人用错。
👉 它控制的是:
模型最多生成多少 token
不是字数,是 token(大概 1 token ≈ 0.75 英文词 / 1~2 中文字)
关键影响:
1. 截断
如果太小:
答案还没说完 → 被砍掉
2. 成本
token = 钱
3. 推理能力
复杂任务需要更长输出空间:
推理步骤多 → token需求更高
👉 直觉一句话:
max_tokens = “你给模型多少发挥空间”
🔥 参数之间的“联动关系”(重点)
1️⃣ temperature + top_p(最核心组合)
常见策略:
稳定输出:
temperature = 0.2
top_p = 0.9
创意输出:
temperature = 0.8
top_p = 0.95
极致确定性:
temperature = 0
top_p = 1
👉 不建议:
temperature 很高 + top_p 很低
→ 会变得“奇怪但又受限”
2️⃣ frequency_penalty 的副作用
太高会导致:
用奇怪同义词
语句不自然
代码变量名乱飞
👉 所以:
代码任务 = 一定要 0
3️⃣ max_tokens 和幻觉
很关键:
👉 token 不够 → 模型更容易胡编
因为:
推理链被截断
被迫提前收尾
🧠 一个工程视角总结
你可以这样理解这4个参数:
temperature → 探索程度(exploration)
top_p → 搜索空间(search space)
frequency_penalty→ 记忆抑制(anti-repetition)
max_tokens → 计算预算(compute budget)