1. Ollama 是什么?适合谁用

Ollama 是一个用于**在本地拉取、运行和管理大语言模型(LLM)**的工具。它把模型下载、量化文件管理、推理服务(HTTP API)、命令行交互整合到一个工作流里。

适合:

  • 需要离线/内网使用模型(隐私数据、本地知识库、代码仓库等)

  • 想要低成本多模型切换、做对比评测

  • 想在本地给 IDE、脚本、自动化工具提供一个可用的 LLM 服务

不适合/需要注意:

  • Ollama 主要聚焦 LLM / 多模态理解模型(如看图问答)。

  • 图片生成(扩散模型)、**语音生成(TTS)**通常不直接由 Ollama 承载;更常见做法是“LLM 负责写提示词/脚本 + 专用生成工具负责出图/出声”。本文会给出组合方案。


2. 安装与基本命令

2.1 安装

  • macOS:官网下载或用 Homebrew(以官方文档为准)

  • Linux:官网下载或用官方安装脚本(以官方文档为准)

  • Windows:官网下载 MSI 安装

安装后确认版本:

ollama -v

2.2 拉取与运行

拉取模型:

ollama pull llama3.1

运行(交互式对话):

ollama run llama3.1

一次性提问:

ollama run llama3.1 "用三句话解释什么是所有权(Rust)"

查看本地已有模型:

ollama list

查看某个模型详情:

ollama show llama3.1

停止/查看运行中的模型(不同版本命令可能略有差异,以 ollama help 输出为准):

ollama ps

2.3 场景用例:用 Ollama 导入 Hugging Face 上的模型(GGUF)

很多人会在 Hugging Face(HF)上找到 GGUF 量化模型文件,希望“下载到本地并用 Ollama 跑起来”。这里需要先澄清一个关键点:

  • Ollama 的 ollama pull xxx 主要拉取的是 Ollama 模型库中的模型。

  • HF 上的模型形态很多(Transformers 权重、safetensors、GGUF 等)。Ollama 更适合直接导入 GGUF(即 llama.cpp 生态的量化文件)。

下面给出一个通用、可复现的流程。

第 1 步:在 Hugging Face 找到“提供 GGUF 文件”的仓库

判断方式:仓库文件列表里能看到诸如:

  • *Q4_K_M.gguf*Q5_K_M.gguf*Q8_0.gguf

一般来说:

  • Q4:更省资源、质量略降

  • Q5/Q6:更均衡

  • Q8:质量更好、占用更大

第 2 步:下载 GGUF 文件到本地

方式 A:使用 huggingface-cli(推荐)

# 需要先安装:pip install -U huggingface_hub
# 并登录(如需):huggingface-cli login

huggingface-cli download <ORG>/<REPO> \
  --local-dir ./hf-models/<REPO> \
  --local-dir-use-symlinks False \
  --include "*.gguf"

方式 B:直接用浏览器/wget 下载(适合单文件)

wget -O ./model.gguf "https://huggingface.co/<ORG>/<REPO>/resolve/main/<FILE>.gguf"

提示:如果你在国内网络环境访问 HF 较慢,很多工具支持通过环境变量设置镜像站点(例如设置 HF_ENDPOINT)。是否可用取决于你使用的镜像服务与网络策略。

第 3 步:用 Modelfile 把 GGUF 导入为 Ollama 模型

在任意目录创建一个 Modelfile(名字就叫 Modelfile,无扩展名):

FROM ./model.gguf

# 可选:固化你的系统提示词
SYSTEM 你是一个中文编程助手,回答要给出可运行的代码与解释。

然后创建模型(这里把新模型命名为 hf-qwen-coder,你也可以换成自己的名字):

ollama create hf-qwen-coder -f Modelfile

第 4 步:运行验证

ollama run hf-qwen-coder

你也可以用一次性提问验证代码能力:

ollama run hf-qwen-coder "用 Rust 写一个并发安全的计数器示例(Arc + Mutex)。"

常见坑与排查

  • 下载的不是 GGUF:如果仓库只有 *.safetensors,那通常不能直接被 Ollama 导入,需要先经过转换/量化到 GGUF(这属于另一个流程)。

  • GGUF 架构不匹配:某些 GGUF 对应特定架构/Tokenizer/上下文设置,导入后效果不佳或报错时,优先换同仓库的其他 GGUF 版本或确认模型说明。

  • 磁盘空间不足:GGUF 文件往往很大,建议结合本文第 7 节把模型库迁移到大盘,并把下载目录也放到大盘。


3. HTTP API:把 Ollama 当作本地 LLM 服务

Ollama 默认会提供本地 HTTP 服务(通常是 http://127.0.0.1:11434)。你可以用它接入:

  • 自己写的脚本(Python/Node/Go)

  • 代理层(如 LiteLLM)

  • Web UI(如 Open WebUI 等)

3.1 生成式接口(示例:curl)

curl http://127.0.0.1:11434/api/generate \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "llama3.1",
    "prompt": "写一个 Python 函数,输入列表返回去重后的列表(保持原顺序)"
  }'

3.2 Chat 接口(示例:curl)

curl http://127.0.0.1:11434/api/chat \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "llama3.1",
    "messages": [
      {"role": "system", "content": "你是一个严谨的资深软件工程师。"},
      {"role": "user", "content": "用 TypeScript 写一个 LRU Cache(只要核心实现)。"}
    ]
  }'

3.3 Python 调用示例

import requests

url = "http://127.0.0.1:11434/api/chat"
payload = {
  "model": "llama3.1",
  "messages": [
    {"role": "system", "content": "你是一个中文技术写作助手。"},
    {"role": "user", "content": "写一段面向小学生的说明:什么是‘算法’?"}
  ]
}

r = requests.post(url, json=payload, timeout=300)
r.raise_for_status()
print(r.json()["message"]["content"])

4. 经典模型推荐(按用途)

说明:Ollama 的模型来源以其模型库/社区为主,不同平台、不同版本可用模型名可能略有差异。下面给的是“常见、好用、覆盖面广”的方向,并给出选型思路。

4.1 通用对话/知识问答

  • Llama 3.1(llama3.1:通用能力强,英文较好,中文尚可。

  • Qwen 2.5(qwen2.5 / qwen2.5:xxb:中文与代码场景都很均衡,很多人本地首选。

  • Mistral(mistral:轻量、速度快,适合资源有限机器。

  • Gemma 2(gemma2:中小尺寸表现不错,适合做本地助手。

  • Phi-3(phi3:体积小、速度快,适合边缘设备或快速原型。

选型要点:

  • 机器资源少:优先中小模型 + 低量化(例如 Q4)

  • 更稳的中文:优先 Qwen 系

  • 更强通用:优先 Llama 3.x 系

4.2 写代码(Coding)

  • Qwen2.5-Coder(qwen2.5-coder:代码能力强,中文注释/解释也不错。

  • DeepSeek-Coder(常见名如 deepseek-coder:代码补全与重构能力突出。

  • CodeLlama(codellama:经典代码模型,生态成熟。

  • StarCoder2(starcoder2:适合多语言代码生成与补全。

建议实践:

  • 先用一个“主力代码模型”(如 Qwen2.5-Coder)

  • 再配一个“快速小模型”(如 Phi-3 / Mistral 小尺寸)用于简单脚本、快速问答

4.3 写作文/写小说/面向小学生讲解(通俗表达)

这里分两类:

  • 通用写作(结构化、长文、润色):Qwen2.5、Llama3.1

  • 通俗解释(低龄化表达、类比):中等参数的通用模型往往就足够,关键是提示词

提示词模板(面向小学生):

请用小学三年级能听懂的方式解释:{概念}
要求:
- 不要使用专业术语(如果必须出现,要先解释)
- 给一个生活中的比喻
- 最后用 3 个要点总结

4.4 看图/读图(多模态“理解”,不是出图)

  • LLaVA 系(常见名如 llava:适合图片问答、OCR 辅助、图表解释(效果因版本而异)。

使用思路:

  • LLM 做“理解与描述”

  • 需要“生成图片”时,用扩散模型工具(见下一节)

4.5 画图/画书(图片生成)与 Ollama 的关系

Ollama 的主场是 LLM,不是扩散模型推理框架。实际工程里更常见的组合是:

  1. Ollama 上跑的 LLM 负责:

  • 把你的想法整理成高质量绘图提示词(prompt)

  • 生成分镜脚本、角色设定、风格约束

  1. 专用出图工具负责生成:

  • Stable Diffusion / SDXL(AUTOMATIC1111、ComfyUI 等)

  • FLUX.1(常见在其他推理框架/产品中使用)

示例:让 LLM 生成“绘本分镜提示词”:

你是儿童绘本导演。
请为主题《勇敢的小树苗》设计 8 页分镜。
每页输出:画面描述、角色表情动作、场景风格、色彩、镜头、以及适用于 Stable Diffusion 的英文提示词(含负面提示词)。

4.6 生成声音(TTS/语音克隆)与 Ollama 的关系

同样地,语音生成通常用专门的 TTS 引擎/模型:

  • Piper:轻量、本地部署方便

  • Coqui XTTS / XTTS-v2:跨语言/声音克隆能力强(具体以项目版本为准)

  • Bark:更偏“生成式语音/音色风格”探索

推荐组合:

  • Ollama:生成台词、分角色对白、情绪/语速标注

  • TTS:按脚本生成音频

脚本格式示例:

[旁白][温柔][中速] 今天,小树苗第一次迎来了大风……
[小树苗][紧张][稍快] 我会不会被吹倒?
[大树][沉稳][慢速] 抓紧泥土,深呼吸。

5. 与 OpenAI / Claude 的对比与混用

5.1 什么时候用 Ollama(本地)

  • 数据不出内网:代码库、客户资料、机密文档

  • 成本敏感:大量调用、批处理

  • 可控性强:模型版本固定、可离线

5.2 什么时候用 OpenAI / Claude(云端)

  • 追求更强的综合能力、工具调用生态

  • 需要“更强的长上下文/更稳定的多模态能力”(取决于具体产品)

  • 不想维护本地推理环境

5.3 一个实用的“混用”策略

  • 日常:Ollama 本地模型(快、便宜)

  • 遇到难题:切到云端(OpenAI/Claude)做最终审稿/复杂推理

工程上建议做一个统一的“Provider 抽象层”:

  • provider=ollama | openai | claude

  • 统一输入 messages,统一输出 content

  • 失败自动 fallback(例如本地超时则走云端)

5.4 安全建议

  • API Key 放环境变量,不要写进仓库

  • 记录脱敏日志(必要时对敏感字段打码)


6. 关于 OpenClaw 与 Claude:如何接入 Ollama

你提到的 OpenClaw 我无法确认你具体指的是哪一个项目(不同社区可能重名)。但大多数“多模型客户端/Agent 框架”的接入方式都类似:

  1. 它们通常支持:

  • “OpenAI 风格接口(chat/completions)”

  • 或者“自定义 HTTP Provider”

  1. 你可以用两种方式接入 Ollama:

  • 方式 A:直接按 Ollama 原生接口对接/api/chat/api/generate

  • 方式 B:用代理层把 Ollama 适配成 OpenAI 风格(推荐:LiteLLM)

如果 OpenClaw 支持配置一个“OpenAI 兼容 base_url”,常见做法是:

  • 让 OpenClaw 指向 LiteLLM 的地址

  • LiteLLM 再指向 Ollama

这样你可以在同一套配置里同时用:

  • Ollama(本地)

  • OpenAI(云端)

  • Claude(云端)

Claude 的调用则通常需要:

  • 在框架里配置 ANTHROPIC_API_KEY

  • 选择对应模型(如 Claude 3.x 系)

具体字段名、配置文件位置,请以 OpenClaw/框架的官方文档为准。


7. 模型库位置(Model Store)自定义:迁移到大硬盘/数据盘

很多人最关心的是:模型默认会占用大量磁盘空间,怎么把模型库挪到更大的盘。

7.1 默认模型目录(常见情况)

  • Linux/macOS:通常在 ~/.ollama/models

  • Windows:通常在用户目录下的 .ollama\\models

(以你的实际安装与版本为准。)

7.2 通过环境变量自定义模型目录(推荐)

Ollama 通常支持用环境变量指定模型目录:

export OLLAMA_MODELS=/data/ollama/models

然后重新启动 Ollama 服务,再拉取模型,模型文件就会落到新目录。

7.3 systemd 服务(Linux)里永久生效

如果你是 systemd 服务方式运行 Ollama,可以创建覆盖配置(示例路径):

sudo mkdir -p /etc/systemd/system/ollama.service.d
sudo tee /etc/systemd/system/ollama.service.d/override.conf >/dev/null <<'EOF'
[Service]
Environment="OLLAMA_MODELS=/data/ollama/models"
EOF

sudo systemctl daemon-reload
sudo systemctl restart ollama

7.4 Docker 部署时的目录映射

如果你在 Docker 里跑 Ollama,一般用 volume 把模型目录映射到宿主机大盘:

docker run -d --name ollama \
  -p 11434:11434 \
  -e OLLAMA_MODELS=/models \
  -v /data/ollama/models:/models \
  ollama/ollama

8. 常用进阶技巧

8.1 自定义模型(Modelfile)

当你想把:

  • 系统提示词(system prompt)

  • 采样参数

  • 模板

固化成一个“你自己的模型名”时,可以用 Modelfile(示意):

FROM llama3.1
SYSTEM 你是一个中文技术写作助手,输出结构化 markdown,严谨、可复现。

创建:

ollama create my-writer -f Modelfile

运行:

ollama run my-writer

8.2 在局域网提供服务(谨慎)

如果你要让同局域网的其他机器访问 Ollama,需要让服务监听非本地地址,并在网络层做访问控制(防火墙、反向代理、鉴权)。

注意:不要把 11434 直接暴露到公网


9. 常见问题(FAQ)

Q1:为什么我感觉模型回答“变笨了”?

  • 量化等级更低(更小的 Q 值)会更省资源,但质量可能下降

  • 上下文过长、提示词过于发散也会影响质量

  • 建议:固定一个基准提示词做对比测试,逐步换模型/换量化

Q2:本地跑不动大模型怎么办?

  • 换更小参数的模型(7B/8B -> 3B/1.5B)

  • 选择更轻量的量化

  • 优先用“本地小模型 + 云端大模型兜底”的混用策略


10. 小结

  • Ollama 适合把 LLM 能力“本地化、服务化”。

  • 写代码优先选代码模型(如 Qwen2.5-Coder / DeepSeek-Coder / CodeLlama)。

  • 写作文/写小说/面向小学生讲解,通用模型也能胜任,关键在提示词与结构化输出。

  • 画图与语音生成通常用专用工具,Ollama 更适合作为“脚本与提示词生成器”。

  • 通过 OLLAMA_MODELS 可以把模型库迁移到大盘,减少系统盘压力。