langchain-ollama allows ollama<0.6.3, which rejects model-defined thinking levels with a Pydantic ValidationError

当你用 LangChain 的 ChatOllama 连接本地 Ollama 模型,并把 reasoning 设为模型自定义的思考等级(例如 "xhigh" 或 "max" )时,会在请求发往 Ollama 之前就被 Pydantic 拦截报错。核心原因是 langchain-ollama 依赖声明

快速结论:当你用 LangChain 的 ChatOllama 连接本地 Ollama 模型,并把 reasoning 设为模型自定义的思考等级(例如 "xhigh" 或 "max")时,会在请求发往 Ollama 之前就被 Pydantic 拦截报错。核心原因是 langchain-ollama 依赖声明允许了过低的 ollama 客户端版本,优先检查并升级 ollama 依赖到 0.6.3 及以上。

适用环境:Issue 中已确认:Python 3.14 虚拟环境(报错路径为 /venv/lib/python3.14/site-packages/pydantic/main.py)、langchain-ollama、ollama 客户端、Pydantic 2.13、本地 Ollama 服务(base_url="http://localhost:11434")、模型 qwen3:8b。操作系统、CUDA、显卡等信息 Issue 未提供。

最快修复方案:把 ollama 依赖升级到 0.6.3 或更高版本。上游客户端修复已合并且以 ollama 0.6.3 发布,langchain-ollama 的依赖下限也已从 0.6.1 提升到 0.6.3(提交 ff46bb478b),从而消除该 ValidationError。

注意事项:该 Issue 已作为 #40985 的重复项关闭,修复落在依赖下限调整上。若你的环境仍通过锁文件或其他约束固定了旧版 ollama,仅升级 langchain-ollama 可能不会生效,需要同步更新依赖解析结果。

问题场景

用户在本地运行 Ollama 模型(qwen3:8b),该模型通过 /api/show 声明了自己的思考等级。用户使用 langchain-ollama 的 ChatOllama,将 reasoning 参数设置为模型自定义等级(如 "xhigh")。由于 ChatOllama.reasoning 类型为 bool | str | None,_chat_params() 会把它原样作为 think 传给 Ollama。问题出在请求真正到达 Ollama 之前,ollama/_types.py 中的 ChatRequest 校验阶段就抛出了 Pydantic 异常。

报错原文

Traceback (most recent call last):
  File "repro.py", line 9, in <module>
    ChatRequest(messages=[{"role": "user", "content": "hi"}], model="qwen3:8b", think=params["think"])
  File "/venv/lib/python3.14/site-packages/pydantic/main.py", line 263, in __init__
    validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 2 validation errors for ChatRequest
think.bool
  Input should be a valid boolean, unable to interpret input [type=bool_parsing, input_value='xhigh', input_type=str]
    For further information visit https://errors.pydantic.dev/2.13/v/bool_parsing
think.literal['low','medium','high']
  Input should be 'low', 'medium' or 'high' [type=literal_error, input_value='xhigh', input_type=str]
    For further information visit https://errors.pydantic.dev/2.13/v/literal_error

原因分析

最可能的原因是 langchain-ollama 在 libs/partners/ollama/pyproject.toml 中声明的依赖范围过宽:"ollama>=0.6.1,<1.0.0"。旧版 ollama 客户端中的 ChatRequest.think 字段只接受 bool,或字面量 'low'、'medium'、'high',因此模型自定义的 "xhigh"、"max" 等值会在 Pydantic 校验阶段被拒绝。虽然 Ollama Go 后端本身接受任意 bool 或字符串的 ThinkValue,但 Python 客户端在发出请求前就已拦截。报错信息中未提及版本不匹配,容易让人误以为是 Pydantic 自身的问题。

环境排查

  • 确认 langchain-ollama 的安装版本。
  • 确认 ollama 客户端的实际安装版本,检查是否低于 0.6.3。
  • 确认 Pydantic 版本(Issue 中为 2.13)。
  • 确认 Python 版本(Issue 中为 3.14)。
  • 确认是否使用了依赖锁文件,导致 ollama 无法被解析到 0.6.3 及以上。
  • 确认本地 Ollama 服务可访问,且所用模型通过 /api/show 声明了自定义思考等级。

解决步骤

  1. 检查当前环境中 ollama 客户端版本,确认其是否低于 0.6.3。
  2. 将 ollama 依赖提升到 0.6.3 或更高版本;上游客户端修复已在 ollama 0.6.3 中发布。
  3. 同步更新 langchain-ollama,使其依赖下限(由 0.6.1 提升至 0.6.3 的变更,提交 ff46bb478b)生效。
  4. 如果项目使用锁文件或固定版本的约束,重新解析依赖,确保实际安装到的 ollama 不低于 0.6.3。

验证方法

升级完成后,重新运行原始复现代码:将 ChatOllama 的 reasoning 设为自定义等级(如 "xhigh"),确认 _chat_params() 返回的 params["think"] 等于 "xhigh",并且 ChatRequest(...) 构造时不再抛出 ValidationError。请求能够正常构造并发送到本地 Ollama 服务,即表示问题已解决。

参考来源

langchain-ai/langchain #40987

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 27282

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注