跑本地大模型这件事,门槛已经低到只剩一条命令。Ollama 会自己拉取模型权重,在11434端口挂一个 HTTP 服务,然后给任何客户端递上一个"长得像 OpenAI"的接口——只不过指向的是你自己的机器。

真正有意思的问题,从这一步之后才开始。

打开网易新闻 查看精彩图片

不是模型能不能跑起来,而是模型加上它的上下文,还塞不塞得进你手头这点内存。这个问题有一个专门的命令来回答:ollama ps。

先看那一列 PROCESSOR

敲下ollama ps,你会看到当前驻留在内存里的模型有哪些。除了模型名,它还会给出一列PROCESSOR。

这一列是关键。只要显示的数字不到100% GPU,就意味着模型的一部分已经溢出到了 CPU 上,生成速度会掉到爬行的程度。你感觉"明明装下了却慢得离谱",答案往往就写在这一列里。

它同时还会显示已经分配的上下文长度。这个数字,可能并不是你预期或者要求的那一个——你以为设了 8K,实际跑起来是另一个值,这种情况并不罕见。

把本地模型的尺寸决策搞清楚,服务起来之后很多问题会自己消失。

配置写了却没生效,问题出在哪

还有一个坑,跟模型本身无关,跟你怎么跟操作系统打交道有关。

桌面版应用是由系统启动的,不是由你的 shell 启动的。这意味着它永远看不到你写在.zshrc里的那些export行。

打开网易新闻 查看精彩图片

结果就是:配置在终端里看起来完全正确,实际却毫无效果。上下文长度改不动,模型目录改不动,新手盯着屏幕找半天也找不出毛病。

在 macOS 上,这些变量必须通过launchd来设置,具体是用launchctl setenv。这是上下文长度或模型目录拒绝改变的最常见原因,没有之一。

结构化输出:两种写法,两种确定性

如果你用 Ollama 跑模型是为了拿到能直接进程序的数据,那format这个参数值得单独拎出来说。

把一个 JSON schema 传给format,解码过程就会被约束成那个形状。这样返回的结果每一次都能解析成功,而不是"大多数时候"能解析成功。

但如果你传的只是字符串"json",那就是宽松版本了:返回的确实是合法 JSON,但它不承诺会带上哪些键。想要确定性,就得把 schema 写清楚。

剩下的基础件

围绕这套用法,还有一批基础能力值得记住:

  • 磁盘管理相关的命令,用来清理和查看本地占用的模型
  • 两个主要端点:/api/chat/api/embed
  • 一层/v1/兼容层,让现成的 OpenAI 客户端几乎不用改代码就能切到 localhost
  • Modelfile,用来把一个基础模型连同你自己的默认配置一起保存下来
  • 一组环境变量,控制模型保持加载多久、同时能跑几个

把这些拼起来看,本地跑模型的难点其实不在"跑起来",而在跑起来之后的那些细节:显存有没有溢出、上下文到底分配了多少、配置有没有真的被读到、输出格式能不能被程序稳定消费。

这几件事想清楚了,本地模型才算是真的能用。