本地装了七八个模型之后,最常见的卡点不是跑不起来,而是「我明明下了它,为什么跑的还是上一个」。ollama 的模型指定分散在命令行、HTTP 接口和第三方客户端三个层面,各自生效的位置不一样,混用就容易疑神疑鬼。这篇按「先搞清楚模型都有哪些标识 → 三种入口分别怎么点名 → 不生效时按什么顺序排查」来讲,给一套能对着做的动作,不涉及具体模型版本和跑分。
本地装了七八个模型之后,最常见的卡点不是跑不起来,而是「我明明下了它,为什么跑的还是上一个」。模型指定这件事分散在命令行、HTTP 接口和第三方客户端三个层面,各自生效的位置不一样,混用就容易疑神疑鬼。
下面按「先搞清楚模型都有哪些标识 → 三种入口分别怎么点名 → 多模型并用的具体场景 → 不生效时按什么顺序排查」来讲,给一套能对着做的动作。文中不涉及具体模型版本和跑分,需要看数字的地方都指到站内页面。
先把「有哪些模型、怎么点名」弄准
动手指定之前,先把本地的家底盘清楚。清单里的名字就是之后所有调用的唯一凭据,名字写不对,后面三条入口全白搭。看清单时别只看名字一列,体积也能帮你判断有没有拉重复的权重。
- 用列表命令看本地已有模型清单,重点盯两列:模型名(含仓库名与标签)和体积;体积异常接近的两条,往往就是同一个权重的不同标签
- 理解「模型名:标签」这套命名:同名不同标签是两个独立条目,不带标签时走的是默认标签,写全名最不容易踩坑
- 分清别名和实际权重的关系:同一份权重可能被打了多个名字,删除或改名后旧名字会失效,调用侧自然报找不到
- 养成从清单里复制名字的习惯,别手敲;冒号、大小写、连字符都是常见翻车点
| 你看到的名字形态 | 实际指向 | 点名时怎么写 |
|---|---|---|
| 只有仓库名,没有冒号 | 默认标签那一条 | 可以省略标签,但建议写全 |
| 仓库名:标签 | 该标签对应的独立条目 | 原样照抄,冒号不能改 |
| 看起来像别名的短名 | 可能是某条完整名的映射 | 以清单里显示的那一行为准 |
| 两个名字体积几乎一样 | 大概率是同一权重的两份标签 | 按用途选一个,避免重复占盘 |
三条调用入口,分别在哪里点名
同一个模型,从三个地方点名,生效范围完全不同。命令行只管这一次进程,接口只管这一个请求,客户端只管它自己那份配置。搞清楚谁覆盖谁,比记住具体命令更重要。
- 命令行入口run 类命令把模型名紧跟在命令后面,属于「一次一指定」。交互会话中途想换模型,优先用会话内的切换指令,比退出重进更省事;切换后当场发一句话验证回复是否来自目标模型。
- HTTP 接口请求体里的 model 字段就是点名位置。先确认走的是 chat 还是 generate 端点,端点和请求体结构不匹配时报的通常是参数错误,而不是模型不存在,别被报错带偏方向。
- 客户端与集成工具模型名一般填在配置项或下拉框里。注意它填的是完整名还是别名,以及是否需要先刷新模型列表,才能看到新拉下来的条目;改完保存后重启一次客户端,确认配置真的落盘。
多模型并用的几个具体场景
单模型用户很少遇到指定问题,真正麻烦的是「一个流程里几个环节各用各的模型」。这时候不是写对一个名字就完事,而是要把每个环节的点名位置分开管好。
| 场景 | 点名要点 | 什么情况下不适用 |
|---|---|---|
| 一次只要一个模型 | 把完整模型名写死,脚本和定时任务尤其要写死 | 需要频繁换模型试效果时,写死反而增加改动成本 |
| 一个流程分角色用模型 | 对话、嵌入、重排各自配各自的字段,别指望一个字段全包 | 只做纯文本问答、不涉及向量检索时,不需要拆这么细 |
| 想让模型常驻显存 | 调大常驻时长,减少反复加载 | 显存本来就紧张时,常驻会挤掉其他进程,不划算 |
| 多客户端共享一个本地服务 | 每个客户端各改各的配置,改完逐一验证 | 只有一个客户端时,改一处就够,不必逐个排查 |
这里没有通用最优解,只能按「谁调用、调多频、显存够不够」三个条件选。显存和并发相关的实测数据,可以到 站内速度测试 /tools/speed-test 核对当时的数字,再决定要不要常驻。
点了名却没用上,按这个顺序查
排查最忌讳东改一下西改一下。下面四步从前到后,每步都有明确的「通过标准」,通过了再往下走,避免同时改多个变量导致越查越乱。
- 第一步:确认清单里到底有没有那个名字,注意大小写和冒号标签,复制粘贴比手敲可靠
- 第二步:看生效的是哪条入口——命令行里写对了但客户端配置没改,跑起来依然是配置里的那个模型
- 第三步:看是不是被默认值盖住了,环境变量、配置文件、会话内状态三层都可能覆盖你写的名字
- 第四步:名字对但没加载,报错通常落在加载或显存上,跟模型名无关,别在名字上反复折腾
# 排查顺序示意:先列清单确认名字存在
ollama list
# 再单独跑一次,确认这个进程用的是哪个名字
ollama run 仓库名:标签 "只回一句话,报出你正在使用的模型名"
# 走接口时,直接检查请求体里的 model 字段是否为完整名
# curl 示例里把 model 换成清单里复制出来的那一行如果四步都过了还是不对,问题多半不在模型指定上,而在服务地址、端口或权限。这时候换个最小请求先跑通,再逐步加回你的参数,比继续猜名字有效。
下一步指定模型只是第一步,多模型长期共用还要看中转与官方渠道的价格差异、以及不同服务的稳定性记录。带着你清单里的模型名,去站内导航页对照当时的实测数据,再决定长期用哪条路。→常见问题
我明明拉了好几个模型,为什么调用时总是走同一个?
大概率是你没在调用侧写模型名,走的还是默认标签或客户端配置里预先填好的那个。先跑一次清单命令确认模型全名,再回到你实际用的那条入口把名字写全,命令行看命令参数、接口看请求体 model 字段、客户端看配置项,三处对齐基本就好了。
模型名后面要不要带标签?不带会怎样?
不带标签时按默认标签解析,绝大多数情况下能跑通,但一旦本地同时存在同名不同标签的条目,就很难判断实际加载的是哪一个。稳妥做法是统一写完整名字,脚本、接口参数、客户端配置都写全,排查问题时也少一层猜测。
调用报「模型不存在」,是先换模型还是先查名字?
先查名字。把报错里的名字和清单里的名字逐字符对一遍,重点看大小写、连字符、冒号后的标签是不是写错或漏了。名字完全一致还报错,再去查该模型是不是加载失败,比如显存不够、量化格式不支持,这类属于加载问题,跟指定方式无关。