生成参数

一句话定义:调用大模型时控制输出"如何采样、多长、何时停"的配置项,如 temperature、top_p、top_k、max_tokens、stop 等,与提示词共同决定输出质量。

1. 定义

生成参数(Generation / Decoding Parameters)指调用 LLM 时传入的、影响"从概率分布中如何选出下一个 token"以及"生成何时结束"的配置。它们不改模型权重,只调控行为。提示词决定"说什么",生成参数决定"怎么说、说多稳、说多长"。

典型调用(OpenAI 风格):

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[...],
    temperature=0.7,      # 采样温度
    top_p=0.9,            # 核采样
    max_tokens=1024,      # 输出上限
    stop=["\n\n用户:"],   # 停止序列
    seed=42,              # 可复现
    response_format={"type": "json_object"},  # JSON 模式
)

2. 解码策略总览

策略 做法 特点
Greedy(贪心) 每步选概率最高 token 确定性、易重复、易陷入局部
Beam Search 维护 k 条候选序列取整体最优 传统 NMT 常用,LLM 时代少用
Sampling 按概率分布随机采样 多样性强,是 LLM 默认

LLM 时代主流是 Sampling,通过 temperature / top_p / top_k 控制采样空间。

3. temperature(温度)

  • 对 logits 除以 T 再 softmax:$p_i = \text{softmax}(z_i / T)$。
  • T → 0:分布变尖,趋近贪心,输出确定、保守。
  • T → ∞:分布变平,趋近均匀采样,输出随机、混乱。
  • T = 1:用原始分布采样。

典型取值:

场景 推荐 temperature
代码、事实问答、JSON 抽取 0 ~ 0.2
通用对话、摘要、翻译 0.5 ~ 0.7
创意写作、头脑风暴 0.8 ~ 1.2

4. top_p(核采样 / Nucleus Sampling)

  • 选概率累积和达到 p 的最小 token 集合,只在该集合内采样。
  • 候选集大小动态:分布尖锐时候选少,平坦时候选多。
  • 典型 0.9 ~ 1.0。p=1 等价于不截断。
  • 优点:自动剔除长尾低概率 token,比 top_k 更自适应。

5. top_k

  • 只在概率最高的 k 个 token 中采样,其余置零。
  • 候选集大小固定
  • 典型 40 ~ 100。k=1 等价于贪心。
  • 缺点:分布尖锐时 k 太大会放进噪声,平坦时 k 太小会丢合理选项。

6. top_p vs top_k 对比

维度 top_p top_k
候选集 动态 固定
自适应
分布尖锐时 自动收窄 可能放噪声
实现复杂度 略高
主流默认 常用 部分框架默认

二者常叠加使用(先 top_k 再 top_p),但一般调一个即可,避免过度限制。

7. min_p

  • 相对阈值:只保留概率 ≥ (最大 token 概率 × min_p) 的 token。
  • 兼顾自适应与简洁,近年(llama.cpp 等)流行。
  • 典型 0.05 ~ 0.1。

8. 惩罚参数

控制重复,多用于长文本生成。

参数 机制 典型范围
frequency_penalty 按出现次数线性惩罚已出现 token -2 ~ 2,正值减重复
presence_penalty 是否出现惩罚(一次性) -2 ~ 2,正值促新词
repetition_penalty 对已出现 token 的 logits 1/p(<1 降权) 1.0 ~ 1.3

要点:

  • 正值减重复,负值增重复。
  • repetition_penalty > 1.3 易跑题、破坏连贯。
  • 不同厂商语义略有差异,迁移时需重测。

9. 长度与停止

  • max_tokens / max_new_tokens:输出 token 上限。注意部分框架的 max_length 含输入,max_new_tokens 仅算输出。
  • stop / stop_sequences:遇到指定字符串即停止生成,常用于对话分隔、结构化输出收尾。
  • max_completion_tokens(新版 OpenAI):专指补全长度上限。

建议:生产环境始终设 max_tokens 上限,防失控生成。

10. 确定性与可复现

  • seed:固定随机种子,使同输入产生同输出(尽量可复现)。
  • 注意:temperature=0 理论上等价贪心,但批处理、浮点精度、框架实现差异可能导致微小不一致;要严格可复现需 seed + temperature=0 + 单条请求。
  • n:一次返回多条候选,便于 Self-Consistency、多方案对比。

11. 其他常见参数

参数 作用
logprobs / top_logprobs 返回 token 对数概率,用于置信度评估、扰动检测
response_format 强制 JSON 等结构化输出
stream 流式返回 token,降首 token 延迟体验
n 一次生成多条候选
presence/frequency_penalty 见第 8 节
best_of 后台多生成取 logprob 最优(部分厂商)

12. 典型场景配置

场景 temperature top_p 其他
代码生成 0 1 max_tokens 足够大
事实问答 / 信息抽取 0 1 response_format=json
摘要 / 翻译 0.3 0.9
通用对话 0.7 0.9
创意写作 0.9 ~ 1.1 0.95 repetition_penalty=1.1
长文生成(防重复) 0.7 0.9 presence_penalty=0.6
多样性头脑风暴 1.0 0.97 n=3 取最优

13. 注意事项

  • temperature=0 ≠ 完全确定:浮点与批处理可能引入微小差异,要复现用 seed。
  • 别同时乱调 top_p 和 top_k:过度叠加会过度收窄候选,输出僵硬。
  • 惩罚参数别过强:repetition_penalty > 1.3、penalty > 1.5 易跑题、语无伦次。
  • 厂商差异:OpenAI / Anthropic / 开源框架参数名与语义略有不同(如 max_tokens vs max_new_tokens),迁移需重测。
  • max_tokens 含输入还是仅输出:不同框架定义不同,看清文档避免截断。
  • 与提示工程配合:生成参数是"放大器",提示写不好调参也救不回来;先打磨提示,再调参。
  • 评测要固定参数:跑 benchmark 一律 temperature=0、固定 seed,保证可比。

14. 学习要点

  • 生成参数 = 解码策略 + 采样控制 + 长度/停止 + 确定性,不改权重只调行为。
  • temperature 控随机性,top_p 动态截尾,top_k 固定截断,min_p 相对阈值。
  • 惩罚参数控重复,过强则跑题。
  • 生产环境必设 max_tokens 与 stop,防失控。
  • 可复现需 seed + temperature=0 + 单条请求。

15. 参考资料

  • Holtzman et al., "The Curious Case of Neural Text Degeneration"(核采样 top_p)
  • Fan et al., "Hierarchical Neural Story Generation"(top_k 采样)
  • OpenAI / Anthropic / Hugging Face API 文档(参数语义)
  • Hugging Face Transformers generation_config 文档