You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动