Langchain调用Ollama本地模型每次返回相同输出的问题求助
解决Ollama本地模型调用时输出重复的问题
问题概述
使用LangChain的ChatOllama调用Ollama本地模型(如qwen2.5:14b、llama3.2等)时,即便设置了temperature=0.7等随机性参数,每次输入相同prompt仍得到完全一致的输出,无法生成差异化结果。
核心原因
最可能的原因是Ollama或LangChain层面固定了生成种子(seed),强制模型每次使用相同的随机初始值,导致输出完全重复。此外,部分经典prompt(如通用笑话请求)本身容易触发模型的固定经典回答,也会加剧重复问题。
解决方案
1. 显式设置随机种子
在ChatOllama初始化时,每次运行生成随机的seed值,确保模型每次生成的初始随机状态不同:
from langchain_ollama import ChatOllama import random # 每次运行生成随机种子(范围可自行调整) random_seed = random.randint(0, 10**6) llm = ChatOllama( model="qwen2.5:14b", temperature=0.7, top_p=0.95, num_ctx=2048, repeat_penalty=1.2, timeout=120, seed=random_seed # 添加随机种子参数 ) prompt = "请讲一个轻松的笑话" response = llm.invoke(prompt) print(response.content)
2. 检查Ollama全局配置
查看Ollama的全局配置文件(路径通常为~/.ollama/config.json),确认是否存在固定的seed配置项。如果有,将其修改为-1(表示使用随机种子)或直接删除该条目:
{ "seed": -1 }
修改后重启Ollama服务生效:
ollama stop && ollama start
3. 调整随机性参数与prompt
- 提升
temperature至0.8-1.0,进一步增强输出的随机性; - 降低
repeat_penalty至1.0-1.1,避免模型过度约束自身输出; - 修改prompt增加随机性引导,例如将
"Please tell me a lighthearted joke"改为"请讲一个不常见的轻松笑话,不要使用经典老梗",减少模型触发固定回答的概率。
4. 更新Ollama版本
旧版本Ollama可能存在参数传递的bug,导致随机性参数未生效。执行以下命令更新到最新版本:
ollama update
内容的提问来源于stack exchange,提问作者deepyes02




