Ollama 报 think 校验失败
ChatOllama 的 think 字符串在请求前校验失败,核对 Python ollama 0.6.2 与 0.6.3;适配器依赖满足不代表实际模型支持任意等级。
ChatOllama 设置了字符串形式的 reasoning,调用却在 Python 客户端里报 Pydantic ValidationError,还没有请求到 Ollama 服务。若错误同时指向 think.bool 和 think.literal['low','medium','high'],先核对安装的 ollama Python 包,而不是修改 Pydantic 的校验规则。
这个组合有 langchain-ollama 1.1.0、ollama 0.6.2 的实际反馈。正式 Python 客户端 0.6.3 已把 think 类型放宽为 bool | str | None,但这只解决客户端能否表示参数,不保证任意模型接受任意字符串等级。
参数先在本地请求模型里被拒绝
ChatOllama 会把 reasoning 传给底层客户端的 think。0.6.2 的 ChatRequest 只接受 bool,以及 low、medium、high 三个字符串;传入其他字符串时,构造请求对象就失败了。
这与服务端返回不支持 thinking、模型不存在或连接失败不同。保留异常最初的字段路径和实际 Python 环境,区分本地 ValidationError 与已经发出的 HTTP 请求,不把所有推理参数错误都归成版本问题。
Python 包 ollama 的版本,也不是本机 Ollama 服务程序的版本。升级服务端不能自动替换虚拟环境里的客户端;只看终端启动的另一个 Python 环境,也可能查错依赖。
适配器允许旧客户端,不代表旧客户端能接收该值
已核对的正式 langchain-ollama 1.1.0 依赖范围仍允许 ollama>=0.6.1,<1.0.0。因此,已有锁文件保留 0.6.1 或 0.6.2 时,安装结果可以满足依赖声明,却不满足这次字符串等级调用的需要。
在项目原来的依赖管理流程里,选择包含类型修正的正式 Python 客户端,例如 0.6.3,保存并核对锁文件差异。应用若明确要求这个能力,可以将自己的客户端下限收紧到 0.6.3,同时保留与适配器兼容的上限。
不要只更新 langchain-ollama 的版本号,然后假定被锁定的底层客户端已变化。核对开发环境、服务启动器与实际部署环境使用的是同一组审定依赖,不在全局环境中升级后凭另一个终端的结果验收。
字符串类型通过之后,还要核对模型能力
0.6.3 的同步、异步聊天入口和请求类型都能表示字符串 think,但字符串代表什么仍由实际模型与服务端决定。一个模型支持 bool 开关,另一个模型支持具体等级,不能仅凭 Python 参数类型把两者互换。
尤其不能把用于暴露旧校验限制的任意等级字符串,直接推广成某个 Qwen 或其他模型的有效配置。按实际模型支持的选项设置 reasoning,再核对请求和响应;客户端不再抛 ValidationError,只是通过了这一层。
验收先确认原字段校验不再失败,再在获准的模型与测试请求上检查服务端接受参数、输出符合所需的推理模式。保留原模型、服务地址和输出处理,不靠关闭所有校验或硬改客户端私有类型来消除错误。
若改成 bool 是应用可接受的模式,可以按模型契约评估,但它会改变原来的字符串等级含义。不能因为请求能发送,就把这次配置变更描述成完全等价。


