一、版本概览
2026年4月25日,ollama 发布了v0.21.2版本。
这次更新虽然版本号不大,但改动非常集中,主要围绕launch 启动体验、OpenClaw 集成、模型推荐顺序固定、managed integration 配置漂移修复、文档补充这几条主线展开。
从官方更新记录来看,本次版本包含:
- 改进 OpenClaw onboarding 流程在
ollama launch中的可靠性 ollama launch中的推荐模型按固定且规范的顺序展示- OpenClaw 集成现在会捆绑 Ollama 的 web search 插件
- 结构化输出文档补充了云端限制说明
此外,从代码变更和测试变化可以看出,这次更新并不是简单的文档或表面修复,而是对启动流程、推荐列表排序逻辑、managed integration 配置一致性、以及 OpenClaw 相关体验做了较大范围的加固。
下面我们按照“发布内容—代码变化—测试验证—文档变化”四个部分,完整拆解这次 v0.21.2 更新。
二、v0.21.2 官方更新要点
官方列出的 What’s Changed 只有三条,但每一条背后都对应了较实质的行为变化:
1)提升了ollama launch中 OpenClaw onboarding 流程的可靠性
这是本次更新的重点之一。
所谓 onboarding 流程,就是用户在通过ollama launch openclaw首次接入 OpenClaw 时,Ollama 自动帮你完成的一整套准备动作,例如:
- 如果 OpenClaw 没安装,则提示通过 npm 安装
- 展示安全提示,说明工具访问的风险
- 让用户选择模型
- 自动配置 provider
- 安装 gateway daemon
- 设置 primary model
- 启用相关 web search 能力
- 启动后台 gateway 并打开 OpenClaw TUI
这次更新的“可靠性提升”,从测试变化看,不只是单点修复,而是包括:
- live config 漂移时能重新写回配置
- 运行时刷新失败时能及时停止
- 选择器不会被错误打乱
- 已选模型与推荐模型之间的排序不会互相干扰
也就是说,这次主要是把 launch 流程中的一些边界问题处理得更稳。
2)ollama launch里的推荐模型按固定、规范顺序展示
这条看似简单,实际影响很大。
之前推荐模型虽然也会显示,但在一些交互场景中,排序可能会受到“已勾选模型”“本地/云端模型”“当前默认模型”等因素干扰,导致推荐区块的顺序不稳定。
本次更新后,推荐模型展示被明确固定为 canonical order,也就是规范顺序。
这意味着推荐列表会严格按推荐模型定义的顺序展示,而不会因为用户选择、安装状态、云端/本地混合情况而随意变化。
从代码和测试来看,这次排序规则的核心目标可以概括为一句话:
推荐区块固定不变,勾选和默认优先级只影响 More 区块。
3)OpenClaw 集成现在会捆绑 Ollama 的 web search 插件
这是对 OpenClaw 集成体验的重要变化。
以前文档里描述的是 OpenClaw 会安装 web search 和 fetch 插件;现在更新后,说明调整为:
- OpenClaw 集成会启用 OpenClaw 内置的 Ollama
web_searchprovider - Web search 能力通过 Ollama host 来提供
- 用户通过
ollama launch openclaw时会自动启用
这说明 OpenClaw 的搜索能力路径发生了变化,重点从“安装外部插件”变成了“捆绑使用 Ollama 的 web search”。
三、代码层面的变化详解
这次版本对应的改动一共涉及 8 个文件、5 个 commits,增删幅度不小。下面逐个拆开看。
1)cmd/launch/integrations_test.go:推荐模型顺序测试全面改造
这份测试文件里最明显的变化,是增加了一个辅助函数:
funcrecommendedNames(extra...string)[]string这个函数的作用很直接:
它会按照recommendedModels的固定顺序,把推荐模型名字全部收集起来,再拼接额外模型。
这说明测试不再手写固定数组,而是通过推荐模型源数据生成预期值。
这样做的好处是:只要推荐模型定义顺序不变,测试就会稳定;如果推荐列表变了,测试也会更准确反映真实规则。
测试调整重点
原来很多测试里直接写死了类似这样的预期:
kimi-k2.6:cloudqwen3.5:cloudglm-5.1:cloudminimax-m2.7:cloudgemma4qwen3.5
现在统一换成:
want:=recommendedNames()或者:
want:=recommendedNames("llama3.2","qwen2.5")这种写法本质上是在强调:
推荐区块的顺序完全由 recommendedModels 决定,不要再在测试中人为写死另一个顺序。
具体变化的测试场景
更新中覆盖了多类场景:
- 没有已有模型时,推荐项按固定顺序展示
- 只有本地模型时,云端推荐依旧排在前面
- 本地和云端模型混合时,推荐项仍然固定在顶部
- 预勾选的非推荐模型在 More 区块中出现,但不应破坏推荐顺序
- 已勾选的推荐模型不会打乱推荐块的顺序
- 旧的、过时的 saved 配置也不应让推荐区重新洗牌
特别值得注意的是,原本某些测试名称和断言逻辑也进行了调整,比如:
TestBuildModelList_PreCheckedFirstTestBuildModelList_PreCheckedNonRecommendedFirstInMoreTestBuildModelList_CheckedBeforeRecsTestBuildModelList_CheckedRecommendedDoesNotReshuffleRecommendedOrderTestBuildModelList_StaleSavedKimiK25DoesNotReshuffleRecommendedOrder
这些测试名称本身就说明了本次排序逻辑的设计意图:
checked、saved、current 这些状态只能影响局部,不能破坏推荐区块的固定顺序。
2)cmd/launch/launch.go:managed single integration 的触发条件更严谨
这里有一处很关键的小改动:
原逻辑大致是:
if(current==""||needsConfigure||req.ModelOverride!=""||target!=current)&&!savedMatchesModels(saved,[]string{target}){更新后变成:
ifneedsConfigure||req.ModelOverride!=""||(current!=""&&target!=current)||!savedMatchesModels(saved,[]string{target}){虽然只是条件顺序和逻辑表达方式的调整,但它反映出启动配置判断变得更精细。
这次调整的核心含义
新的条件更明确地表达:
- 如果需要配置,就重配
- 如果用户显式覆盖了模型,就重配
- 如果当前模型已存在且与目标不同,就重配
- 如果 saved 配置和目标模型不匹配,也重配
这与后面的测试变化是配套的。
它说明 launch 过程中不再只看表面的 current,而是会更加关注“当前运行态、保存态、目标态”之间是否一致。
3)cmd/launch/launch_test.go:新增 live config drift 场景测试
这次测试文件新增了一个非常重要的场景:
TestLaunchIntegration_ManagedSingleIntegrationRewritesWhenLiveConfigDrifts
这个测试模拟的是:
- 已保存的 managed integration 配置是
gemma4 - 但当前 live config 中实际运行的模型是
qwen3:8b - 当用户 launch 这个 integration 时,系统应该识别到漂移,并重新写入配置
- 同时运行时刷新应该执行一次
- 最终启动的模型应该是 live 配置对应的
qwen3:8b - 重新加载 saved config 后,也应该变成
qwen3:8b
这个测试说明,v0.21.2 重点修复了一个很现实的问题:
保存的配置和实际 live config 不一致时,launch 现在会主动纠偏。
这对 managed integration 的稳定性很重要。
因为如果只看本地保存配置,不看 live config,就容易出现:
- 显示一个模型
- 实际跑另一个模型
- 重启后状态不一致
- 用户以为配置生效,实际上运行目标不是当前真实目标
这次测试正是为了保证这种 drift 场景可以被正确处理。
另一个重要测试
新增了:
TestLaunchIntegration_ManagedSingleIntegrationStopsWhenRuntimeRefreshFails
这说明系统还考虑了 runtime refresh 失败的边界情况。
如果刷新失败,则应该停止后续流程,而不是继续冒险运行。
这体现的是 launch 稳定性加固:
能纠偏时纠偏,纠偏失败时及时停止。
选择器相关测试也做了调整
在编辑器强制配置相关测试中,原来更关注“某个模型是否排在第一位”,现在则更强调“推荐顺序是否保持固定”。这也是这次更新的核心变化之一。
比如在TestLaunchIntegration_EditorForceConfigure_FloatsCheckedModelsInPicker里,原先的判断更偏向于“被勾选的模型浮到顶部”;而现在,测试更强调:
- 传给选择器的 items 必须保持固定推荐顺序
- 被预勾选的模型可以被记录下来
- 但推荐列表本身不能因为勾选状态而改变排序
这一点非常关键,因为它说明launch的交互逻辑被重新划分了职责:
- 推荐区块:固定顺序,不能乱
- More 区块:允许根据勾选、默认模型、安装状态做调整
也就是说,本次更新解决的是“排序干扰问题”,而不是单纯把某个模型置顶。
4)cmd/launch/models.go:模型列表构建逻辑重构,推荐区块彻底固定
如果说测试是为了验证规则,那么models.go就是规则真正落地的地方。
这次在buildModelList里的排序逻辑调整非常大,虽然你给出的片段只展示了一部分,但足以看出核心思路发生了变化。
旧逻辑的问题
从修改痕迹可以看出,旧逻辑中对以下因素的处理是交织在一起的:
- 是否被勾选
checked - 是否是推荐模型
recRank - 是否是云端模型
cloudModels - 是否未安装
notInstalled - 是否为当前默认模型
current
这样一来,在某些情况下,推荐模型和非推荐模型会因为这些条件交叉而产生排序波动。
新逻辑的核心目标
更新后的代码明确表达了一个原则:
推荐模型区块必须保持固定的顺序,且 cloud recommended 还要优先于 local recommended。
从测试和注释中可以看出,排序被重新拆成了两层:
推荐区块
- 按
recommendedModels定义顺序排列 - 云端推荐在前,本地推荐在后
- 不受 checked、current 等状态干扰
- 按
More 区块
- 非推荐模型按勾选和默认优先级排序
- 当前模型可以优先
- 但不会反向影响推荐区块
这正是本次版本中“canonical order”的真正含义:
推荐模型名单的顺序是固定的,交互状态不能把它打乱。
为什么这个变化重要
从用户视角看,这种固定顺序带来的体验提升很明显:
- 每次打开 launch 面板,推荐项位置都一致
- 不会因为之前选过某个模型,下一次推荐列表就重新排列
- 不会因为本地/云端模型混在一起,推荐块就看起来“跳来跳去”
- 更容易形成稳定认知,减少选择成本
从系统视角看,这种改动也更利于测试和维护:
排序规则变得明确,测试可预期性更强,未来再改动推荐列表也更容易验证。
5)cmd/launch/openclaw.go与cmd/launch/openclaw_test.go:OpenClaw 集成加固
这两个文件的变动幅度很大,说明 OpenClaw 是本次版本的重点集成对象之一。虽然大部分 diff 没有完整展开,但从提交信息和测试变化可以确认,主要涉及以下几类内容:
- 改进 OpenClaw onboarding 流程
- 绑定 Ollama 的 web search 能力
- 处理 live config drift
- 验证启动过程中的各种边界条件
- 强化与选择器、配置保存、运行时刷新相关的逻辑
结合文档变化,可以把这次 OpenClaw 相关更新总结为:
1. 组件安装逻辑更可靠
OpenClaw 的首次启动不再只是简单提示安装,而是更完整地处理整个配置链路。
2. 搜索能力改为捆绑式启用
不再强调外部插件安装流程,而是改为启用 Ollama 内置web_searchprovider。
3. Onboarding 流程更稳
选择模型、配置 provider、安装 gateway、设置 primary model、启用搜索能力、启动 gateway 这些步骤之间的衔接更可靠。
4. 异常状态可被识别和修正
比如 live config 漂移时能重写配置,runtime refresh 失败时能停止流程。
四、文档更新内容
除了代码和测试,这次版本还更新了两份文档,分别是:
docs/capabilities/structured-outputs.mdxdocs/integrations/openclaw.mdx
1)结构化输出文档补充了云端限制说明
在docs/capabilities/structured-outputs.mdx顶部新增了一个 Note:
Ollama’s Cloud currently does not support structured outputs.
这条说明非常直接,意思是:
Ollama Cloud 当前不支持结构化输出。
这次补充的价值在于,它把原本可能让用户困惑的能力边界说清楚了。
因为结构化输出本身是很实用的能力,用户自然会期待它在所有环境都可用,但现在文档明确告诉你:云端暂不支持。
这类说明虽然简短,但很重要,能够减少误解和试错成本。
2)OpenClaw 文档更新:web search 的描述改了
docs/integrations/openclaw.mdx中有两处明显变化。
第一个变化:Onboarding 第四步描述更新
原先写的是:
- 安装 web search 和 fetch 插件
现在改成:
- 启用 OpenClaw bundled 的 Ollama web search
这表明文档已经从“外部插件安装”切换到了“内置捆绑能力启用”。
第二个变化:Web search and fetch 章节整体重写
原来的描述是:
- OpenClaw ships with a web search and fetch plugin
- 通过
openclaw plugins install @ollama/openclaw-web-search - 再
openclaw configure --section web
而更新后改为:
- OpenClaw ships with a bundled Ollama
web_searchprovider - 通过 Ollama host 提供 web search 能力
ollama launch openclaw时自动启用- 如果要手动配置,则使用:
openclaw pluginsinstall@ollama/openclaw-web-search openclaw configure--sectionweb
同时原文中的提示:
- “Web search for local models requires
ollama signin.”
也被更新为:
- “Ollama web search for local models requires
ollama signin.”
这说明文档已经统一成“围绕 Ollama web search provider”的表述方式。
五、本次版本的整体意义
从这次 v0.21.2 的变化可以看出,Ollama 并没有去做大而空的功能扩展,而是在几个很关键的用户路径上做了精细打磨:
1)启动体验更稳定
ollama launch尤其是 OpenClaw 相关启动流程,明显更可靠了。
模型选择、配置写入、运行时刷新、启动执行这几个环节都更稳。
2)推荐列表更可预期
推荐模型固定顺序展示,解决了“看起来会乱跳”的问题。
这对交互体验和测试稳定性都非常有价值。
3)配置漂移问题被补上
managed integration 在 live config 和 saved config 不一致时,现在会重新写回并纠正,避免状态漂移。
4)OpenClaw 集成更一致
搜索能力从“外部插件描述”转向“bundled web search provider”描述,OpenClaw onboarding 也因此更统一。
5)文档边界更清晰
结构化输出在云端不可用这一点被明确写进文档,减少用户误判。
六、总结
代码地址:github.com/ollama/ollama
整体来看,ollama v0.21.2虽然表面上只是一个小版本更新,但实际内容非常扎实,核心关键词可以概括为:
- 更稳
- 更准
- 更固定
- 更一致
具体来说:
- OpenClaw 的 onboarding 流程被加固
ollama launch的推荐模型顺序固定为 canonical order- OpenClaw 集成启用 Ollama bundled web search
- managed single integration 对 live config drift 的处理更严谨
- 文档补充了结构化输出在 Cloud 下不支持的说明
- OpenClaw 文档同步更新了 web search 的实现与手动配置方式
如果你最近正在使用ollama launch、OpenClaw 集成,或者关注模型推荐顺序与配置一致性,这次 v0.21.2 是值得升级和仔细了解的一版。