在调用 Ollama 或其他语言模型时,temperature
是一个非常重要的参数,用于控制模型生成文本的随机性和创造性。以下是对 "temperature": 0
的详细解释:
1. temperature
的作用
temperature
参数用于调整模型生成文本时的采样策略,具体影响如下:
-
低温度(如
temperature=0
):- 模型会倾向于选择概率最高的 token(即贪婪采样,Greedy Sampling)。
- 生成的文本更加确定性和保守,重复输入会得到相同的输出。
- 适合需要稳定、可预测结果的场景,例如提取固定格式的信息。
-
高温度(如
temperature=0.7
或temperature=1.0
):- 模型会引入更多的随机性,选择概率较低的 token。
- 生成的文本更加多样化和创造性,但可能不够准确。
- 适合需要多样化输出的场景,例如创意写作或生成多个备选答案。
-
极端高温度(如
temperature>1.0
):- 模型的输出会变得非常随机,甚至可能失去逻辑性。
- 通常不推荐使用。
2. temperature=0
的具体行为
当 temperature=0
时,模型的行为如下:
-
确定性输出:
- 模型每次都会选择概率最高的 token,因此相同的输入会得到相同的输出。
- 例如,如果输入是“请提取甲方地址”,模型会始终返回相同的地址。
-
无随机性:
- 模型不会考虑其他可能的 token,因此输出完全由输入和模型权重决定。
- 适合需要高精度和一致性的任务,例如合同信息提取。
-
适合结构化任务:
- 对于需要提取固定格式信息(如地址、电话、名称)的任务,
temperature=0
可以确保输出稳定且准确。
- 对于需要提取固定格式信息(如地址、电话、名称)的任务,
3. temperature=0
的示例
假设合同文本如下:
甲方地址:北京市海淀区中关村大街1号
乙方地址:上海市浦东新区张江高科技园区
当 temperature=0
时,模型的输出会严格遵循提示词的要求,例如:
甲方地址:北京市海淀区中关村大街1号
乙方地址:上海市浦东新区张江高科技园区
而如果 temperature=0.7
,模型的输出可能会引入一些随机性,例如:
甲方地址:北京市海淀区中关村大街1号
乙方地址:上海市浦东新区张江高科技园区,靠近地铁站
4. temperature=0
的适用场景
- 信息提取:
- 例如从合同文本中提取地址、电话、名称等固定信息。
- 问答系统:
- 例如回答事实性问题,需要准确且一致的答案。
- 代码生成:
- 例如生成固定格式的代码片段,需要确保输出的正确性。
5. 与其他参数的关系
-
top_k
和top_p
:- 当
temperature=0
时,top_k
和top_p
参数无效,因为模型只会选择概率最高的 token。 - 当
temperature>0
时,top_k
和top_p
可以进一步控制采样的范围。
- 当
-
max_tokens
:- 无论
temperature
如何设置,max_tokens
都用于限制生成文本的最大长度。
- 无论
6. 代码示例
以下是一个调用 Ollama API 并设置 temperature=0
的示例:
import requests
# Ollama 服务器的地址
OLLAMA_API_URL = "http://localhost:11434/api/generate"
# 构造请求数据
payload = {
"model": "deepseek-r1:1.5b", # 使用的模型
"prompt": "请提取甲方地址和乙方地址:\n合同文本:...", # 提示词
"temperature": 0, # 温度设置为 0
"top_k": 1, # 设置 Top1=1
"stream": False # 关闭流式响应
}
# 发送 POST 请求
response = requests.post(OLLAMA_API_URL, json=payload)
# 检查请求是否成功
if response.status_code == 200:
result = response.json()
print("提取结果:", result["response"])
else:
print("请求失败,状态码:", response.status_code)
总结
temperature=0
表示模型生成文本时完全确定性,适合需要高精度和一致性的任务。- 在信息提取、问答系统、代码生成等场景中,
temperature=0
是一个常用的设置。