考察点
这是应用层最常考的题,区分「背过 API 文档」和「真调过线上服务」的候选人。面试官想听到:三个参数作用的先后顺序和各自对概率分布做了什么、贪心与采样的边界(temperature=0 到底等不等于贪心)、以及结合具体业务的调参经验。追问常往 repetition_penalty、确定性输出(structured output)、为什么 RAG 场景要低温度上走。
参考答案
三个参数分别做什么
模型每一步输出的是词表上的 logits,除以 temperature 后过 softmax 得到概率分布,然后 top-k、top-p 依次截断,最后在剩余候选里按归一化后的概率采样。顺序上一般是:temperature → top-k → top-p。
temperature(温度):作用在 softmax 的输入上,p_i = softmax(logit_i / T)。T=1 是原始分布;T<1 放大 logit 间的差距,分布变尖锐,高概率 token 更可能被选中,输出更确定;T>1 拉平分布,低概率 token 也有机会,输出更随机多样。T 趋近 0 时退化成贪心(永远选概率最大的)。
top-k:只保留概率最高的 k 个候选,其余概率置零后重新归一化。k=1 等价贪心,k=50 是常见值。它的缺陷是「一刀切」:分布尖锐时第 2 名之后的候选本来就是垃圾却被保留,分布平坦时第 51 名可能也很合理却被砍掉。
top-p(nucleus sampling):按概率从高到低累加,保留累计概率刚超过 p 的最小候选集合。p=0.9 表示只从覆盖 90% 概率质量的 token 里采样。它是自适应的:分布尖锐时候选集可能只有 1-2 个 token,分布平坦时自动放宽到几十个。现在它是主流选择,top-k 用得越来越少,很多业务只调 temperature + top-p。
业务调参经验
按任务对「错误成本」的容忍度分档:
| 场景 | 推荐配置 | 理由 |
|---|---|---|
| 客服问答、RAG 问答 | T=0~0.3, top-p=0.9 或关闭采样 | 事实错误代价高,要贴近检索到的上下文,低温度减少自由发挥 |
| 信息抽取、分类、结构化输出 | T=0,配 JSON Schema/function calling | 要确定性和格式稳定,temperature 设 0 |
| 代码生成 | T=0~0.2 | 语法正确性优先,随机性几乎没收益 |
| 文案创作、头脑风暴 | T=0.7 | 要多样性,高温度避免千篇一律 |
| 多轮闲聊 | T=0.8 左右 + repetition_penalty | 闲聊容易复读,需要惩罚重复 |
几个实战要点:
- temperature=0 不保证严格确定。浮点非确定性(GPU 并行归约顺序)、batching 策略都会让同一请求输出略有差异。要真正可复现的输出,得靠服务端固定 seed、关闭连续批处理波动,或者用 structured output 约束格式、内容上接受小波动。
- top-k 和 top-p 别同时卡太紧,两个截断叠加可能把候选集切得只剩一两个字,输出僵化。一般固定 top-p=0.9 左右、top-k 不设或设大,主要靠 temperature 控制随机度。
- 重复问题别只靠温度。生成变长后模型容易陷入复读循环,优先用 repetition_penalty(对已出现 token 的 logit 打折,1.05~1.2)或 frequency/presence penalty,而不是把温度调高——高温度治重复往往先引入事实错误。
- 评测先行。调参别拍脑袋,建一个 50~100 条的评测集,固定其他变量扫 temperature,看业务指标(准确率、格式合规率、人工打分)再定。
解码策略的全景
采样只是解码的一种选择。贪心(greedy)每步选最大概率,确定性强但容易平庸重复;beam search 保留多条候选路径,在翻译时代是主流,但开放性生成上输出僵硬,现代对话模型基本不用;采样(temperature/top-p/top-k)是对话和创作场景的标准做法。工程上还有投机采样(speculative decoding)用小模型起草、大模型验证来加速,那是推理优化话题,不改变输出分布本身。
可能的追问
- temperature 设 0 和 top-k=1 有区别吗? 数学上都退化为贪心,实践里 T=0 靠框架实现(有的框架拒绝 0 要传极小值),效果等价。
- 为什么低温度下 RAG 回答更可靠? 模型对检索内容的「复述」通常对应高概率路径,低温度压制了参数记忆里的自由联想,减少幻觉混入。
- logit bias 和采样参数有什么区别? logit bias 直接对指定 token 的 logit 加减固定值,可强制禁止或鼓励某些 token(如禁用敏感词),比惩罚类参数更精确。