韩老魔的博客0XHANNIBA1 · NOTES

LLM API 核心参数详解:Temperature、Top_p 与 Max_tokens

目标:搭建环境,调通 OpenAI 和 Claude API,理解核心参数含义。产出:一个封装好的 llm_client.py,支持调用两家 API。

核心原理:LLM 是个"概率预测机"

当你问 LLM:"天空是?"的时候,它并不是直接想出"蓝色"这个词,而是在内部计算所有可能的下一个字的概率排行榜

候选词 概率
蓝色 60%
灰的 20%
广阔的 10%
绿色的 0.01%

以下三个参数,就是在控制怎么从这个排行榜里选词

1. Temperature(温度):控制"胆量"

定义:控制模型在概率排行榜上选择时的随机性

原理

  • 低温 (0 ~ 0.3):模型变得保守,放大高概率词的优势,几乎只选 No.1。
  • 高温 (0.7 ~ 1.0+):模型变得狂野,把所有词的概率拉平(Flatten),低概率词也有机会被选中。

费曼比喻

  • temperature = 0.1 — 像一个严谨的会计。你问他在哪吃饭,他永远去评分最高的那一家。稳,但无聊。
  • temperature = 0.9 — 像一个喝醉的诗人。你问他在哪吃饭,他可能会指着路边摊甚至垃圾桶说"试试这个"。容易出错,但偶尔有惊世骇俗的创意。

场景建议

场景 推荐值 原因
写代码、提取 JSON、分析 Bug 等级 0 需要确定性
生成测试数据、模拟用户多样化输入 0.7+ 需要多样性

2. Top_p(核采样):控制"候选池"

定义:不改变概率值,而是直接切断低概率的尾巴。也叫 Nucleus Sampling。

原理:模型从高到低累加概率,直到累加值达到 p(比如 0.9),只有在这个范围内的词才会被考虑,剩下的直接扔掉。

费曼比喻 — 招聘面试

  • top_p = 1.0 — 任何人都可以来面试,包括完全不靠谱的人。
  • top_p = 0.1 — 只面试哈佛耶鲁毕业的(前 10% 的精英),绝对稳,但可能把"乔布斯"这种非传统天才拒之门外。

Temperature vs Top_p

维度 Temperature Top_p
作用方式 调整概率分布的形状(扁平 or 尖锐) 画一条线,切掉长尾
类比 调节音量旋钮 设置入场门槛

行业惯例:通常只调其中一个,不要同时调两个,否则效果难以控制。

3. Max_tokens:控制"话唠程度"

定义:限制模型**生成(Output)**的最大 Token 数量。

注意点

  • 不包括输入:这是指模型输出的字数上限。
  • 硬截断:如果模型话没说完就到了 max_tokens,它会戛然而止。
  • 惨案现场:你让它返回 JSON,结果 max_tokens 太小,返回了 {"status": "succe...(后面没了),导致 json.loads() 直接报错。

Token 换算参考

  • 1 Token ≈ 0.75 个英文单词
  • 1 Token ≈ 0.5 ~ 0.8 个汉字(取决于模型的 Tokenizer)

测试策略:API 调试阶段不要吝啬 max_tokens,设大一点(如 1024 或 4096),防止截断。

Tweaks