Appearance
1.10 在本地跑模型(Ollama)
云端 API 很方便,但有时候你会想在自己的电脑上跑模型:数据不出本地、零调用成本、断网也能用、随便折腾不心疼。这一节讲怎么用 Ollama 在本地跑模型,以及什么时候值得这么做。
本地 vs 云端:怎么选
| 维度 | 本地(Ollama) | 云端 API |
|---|---|---|
| 成本 | 一次性硬件,调用免费 | 按 Token 付费 |
| 隐私 | 数据不出本机 | 数据发给厂商 |
| 能力 | 受你显存限制,通常是中小模型 | 可用最强的大模型 |
| 速度 | 取决于你的硬件 | 通常更快、更稳 |
| 联网 | 离线可用 | 必须联网 |
💡 一句话判断:敏感数据 / 想免费折腾 / 离线 → 本地;要最强能力 / 高并发 / 省心 → 云端。很多人是开发调试用本地,生产上线用云端(靠 OpenAI 兼容协议 无缝切换)。
装好 Ollama,几条命令就能跑
bash
# 1. 安装后,拉一个模型(首次会下载,几个 GB)
ollama pull qwen2.5:14b
# 2. 直接命令行对话,验证能跑
ollama run qwen2.5:14b "用一句话解释什么是闭包"
# 3. 它会在后台开一个 OpenAI 兼容服务(默认 11434 端口)
# 确认服务在跑:
ollama serve # 多数情况安装后会自动常驻跑起来后,就能用 OpenAI SDK 连它(注意 baseURL 带 /v1):
javascript
import OpenAI from "openai"
const client = new OpenAI({
baseURL: "http://localhost:11434/v1",
apiKey: "ollama" // 本地不校验,占位即可
})
const res = await client.chat.completions.create({
model: "qwen2.5:14b",
messages: [{ role: "user", content: "你好" }]
})
console.log(res.choices[0].message.content)量化:为什么 14B 模型能塞进你的电脑
一个 14B(140 亿参数)的模型,如果每个参数用 16 位存,光权重就要 ~28GB 显存——普通电脑根本放不下。量化(Quantization) 就是用更少的比特存每个参数,把模型"压小"。
原始(FP16,16位) 14B 模型 ≈ 28 GB
Q8(8位量化) ≈ 15 GB 几乎无损
Q4(4位量化) ≈ 8 GB 轻微质量损失,最常用Ollama 默认拉的就是量化版(通常 Q4),所以一个 14B 模型大概 8-9GB,消费级显卡甚至较新的 Mac 都跑得动。
⚠️ 量化是用"一点点质量"换"能跑起来 + 更快"。日常任务 Q4 体感几乎没差别;对精度极敏感的任务,可以拉 Q8 版本(
ollama pull qwen2.5:14b-instruct-q8_0这类标签)。
显存粗略估算:能跑的模型大小 ≈ 你的显存(GB)。8GB 显存跑 7B-8B,16GB 跑 14B,24GB 能跑到 32B 量化版。Mac 用统一内存,把内存当显存估。
选哪个本地模型
| 模型 | 大小 | 适合 |
|---|---|---|
qwen2.5:7b / qwen2.5:14b | 中小 | 中文综合任务、支持工具调用 |
gemma2(如 gemma2:9b) | 小 | 轻量问答、改写;工具调用支持有限 |
llama3.1:8b | 小 | 英文任务 |
deepseek-r1(蒸馏版) | 中 | 本地体验推理模型 |
nomic-embed-text | 极小 | 做 Embedding(RAG 用,见 2.1 节) |
💡 你提到本地有
qwen2.5:14b和gemma——做需要工具调用的练习(如 1.4 Tool Use)优先用 qwen,它对 function calling 支持更好;gemma 在这方面不一定可靠。
本地模型的现实预期
⚠️ 别期望本地中小模型能和云端旗舰(DeepSeek-V4、GPT、Claude)一个水平:
- 复杂推理、长上下文、严谨代码:明显弱于云端大模型
- 简单问答、改写、分类、本地 RAG、跑通流程做实验:完全够用
- 速度取决于你的硬件,老机器上可能慢到影响体验
最佳实践:本地模型用来学习、调试、处理敏感数据、跑实验;真正要质量和并发的生产场景,用云端 API。两者代码靠 OpenAI 兼容协议共享,切换只改配置。
🛠️ 实战练习:本地 vs 云端同题对比
用 1.9 节 的多厂商配置,让同一个问题分别走本地 Ollama 和云端 DeepSeek:
javascript
const question = "写一个 JS 函数,判断一个字符串是不是合法的 IPv4 地址,并加注释。"
// 分别用 PROVIDERS.ollama 和 PROVIDERS.deepseek 跑同一个 question
// 对比:响应速度、代码质量、是否能直接用观察要点:
- 本地模型的速度和质量,和云端差多少?
- 这个任务的难度,本地模型够用吗?
- 换一个简单任务(如翻译一句话),差距是不是就不明显了?
进阶挑战:把 2.1 节的 RAG 例子 完全改成本地运行(对话用 qwen2.5:14b,Embedding 用 nomic-embed-text),实现一个完全离线、零成本的知识库问答。
📌 关键结论
- 本地跑模型靠 Ollama:几条命令搞定,对外提供 OpenAI 兼容服务(11434 端口)
- 量化用更少比特存参数,让大模型能塞进消费级硬件;Q4 最常用,体感损失很小
- 能跑多大模型主要看显存:粗估"模型大小(GB) ≈ 显存(GB)"
- 本地模型适合学习、调试、敏感数据、离线、实验;要质量和并发用云端
- 本地与云端代码靠 OpenAI 兼容协议共享,切换只改配置
第 1 章完成。下一步:第 2 章 · 构建 AI 产品