一、温度(Temperature):不止是控制“随机性”

温度 是最核心的调优参数,其本质是 控制模型输出概率分布的“平滑”或“尖锐”程度。数值越低,概率分布越尖锐,模型越倾向于选择它认为最可能的高概率 token(结果确定、重复性高);数值越高,分布越平滑,模型选择低概率 token 的可能性越大(结果多样、更具“创意”或随机性)。

一个常见的误解是认为温度只控制“创意”。实际上,它是一个调节模型 自信度与探索性 的开关。在需要精确事实(如代码生成、问答)时,低温度(如 0.1)能保证输出紧扣主题;而在进行头脑风暴、诗歌创作或多样化回复时,适中的高温度(如 0.7-1.0)能带来意想不到的灵感。温度为 0 时,理论上模型会进行完全的贪心解码,每次都会选择概率最高的 token,但多数 API 实现中为避免数值问题,会设一个极低值如 0.01。

提示:温度不能孤立看待。它必须与 采样策略 结合使用。当采样策略为 greedy(贪婪解码)时,温度设置通常无效,因为总是取概率最高的结果。

二、Top-K 与 Top-P:概率质量的两种截取策略

采样策略 决定了在每一步生成 token 时,模型将从哪个范围的词(token)中进行随机选取。这里介绍两种主流策略:

三、频率与重复惩罚:对抗“复读机”现象

除了温度和采样,惩罚参数 对于生成流畅、丰富的文本至关重要。模型在长文本生成中容易陷入重复,或者过度使用某些常见词。

这两个参数通常在 0 到 2 之间取值。从 0 开始调高,0 代表无惩罚。设置过高会导致文本生硬、不连贯,甚至出现不相关词汇。

提示频率惩罚存在惩罚 同样需要配合温度使用。在较高温度下,惩罚的效果会更明显。

四、实战代码:不同参数组合的效果对比

让我们通过一个具体的 API 调用示例,直观感受参数变化带来的效果。假设我们让 MiMo 模型续写一个故事开头。

import openai # 以兼容 OpenAI 调用方式为例

client = openai.OpenAI(api_key="your_api_key", base_url="https://api.mimo.xxx/v1")

prompt = "一位程序员走进一家古老的书店,店主对他说:"

# 场景1:追求稳定、确定性的续写
response_stable = client.chat.completions.create(
    model="mimo-chat",
    messages=[{"role": "user", "content": prompt}],
    temperature=0.2,       # 低温,结果稳定
    top_p=0.9,             # 使用 Top-P 采样
    frequency_penalty=0.0, # 暂不施加惩罚
    max_tokens=150
)
print("稳定风格:", response_stable.choices[0].message.content)

# 场景2:追求创意、多样性的续写
response_creative = client.chat.completions.create(
    model="mimo-chat",
    messages=[{"role": "user", "content": prompt}],
    temperature=0.9,       # 高温,增加随机性
    top_p=0.95,            # 稍微放宽 Top-P 的阈值
    frequency_penalty=1.0, # 施加频率惩罚,鼓励新词
    presence_penalty=0.5,  # 施加存在惩罚
    max_tokens=150
)
print("创意风格:", response_creative.choices[0].message.content)

通过对比两次输出,你能清晰地看到,第一个回答可能更连贯、符合逻辑预期;第二个则可能包含更意外的转折或更丰富的描述。

五、调优心法:没有最佳,只有最合适

参数调优没有放之四海而皆准的“最佳配置”,关键在于理解你的任务需求。这里提供一个简单的决策流程参考:

  1. 明确任务性质
  1. 迭代调试:从一个保守的基线(如 temp=0.3, top_p=0.9)开始,根据输出结果进行微调。如果觉得输出太死板,提高温度;如果觉得答案过于发散、不靠谱,降低温度或收紧 top_p(如改为 0.8)。
提示:在调试过程中,尽量只改变一到两个参数,然后对比效果。同时改变太多参数会很难判断是哪个改动起了主导作用。

六、进阶思考:参数间的协同与权衡

温度与采样参数是 协同工作 的。例如,一个非常高的 temperature(如 1.5)会极大地拉平概率分布,此时即使设置很紧的 top_p(如 0.1),实际的候选集也可能比低温时更“平庸”,因为各个词的概率被大幅均等化了。

一个常见的误区是试图用 frequency_penalty 来弥补过高的 temperature 带来的混乱。这往往治标不治本,可能生成更加奇怪的文本。正确的思路是先通过温度和采样策略(Top-P/K)控制好输出的“方向”和“大致范围”,再用惩罚参数进行“微观调节”,提升文本的局部质量和新鲜度。记住,模型输出的质量上限首先取决于提示词的质量和模型自身的能力,参数调优是在此基础上的“锦上添花”,而非“无中生有”。