目标:搭建环境,调通 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),防止截断。