在 M1 Mac 上搭建 Ollama:我的本地 AI 模型到底应该怎么选?
系列:《从 0 打造我的本地 AI 知识库:Obsidian + Ollama + Milvus + RAG + MCP + Agent》
第 02 篇
上一篇:《我为什么要给自己做一个本地 AI 知识库?》
本文关键词:
Ollama本地大模型Qwen3.5EmbeddingM1 Mac16GB

一、我为什么没有直接去部署一个"大模型"?
决定做本地 AI 知识库之后,我遇到的第一个问题并不是 RAG。
而是:
我的电脑到底能跑什么模型?
我的电脑配置并不算高:
text
MacBook Pro 13"
Apple M1
16GB Unified Memory
macOS
如果是在云服务器上,这个问题可能很好解决。
内存不够?
加内存。
模型太大?
换服务器。
但是我的 Mac 不行。
16GB 内存就是硬限制。
而且 Apple Silicon 使用的是统一内存。
也就是说:
text
CPU
+
GPU
+
系统
+
IDEA
+
Chrome
+
Ollama
+
大模型
都在竞争这 16GB 内存。
所以本地 AI 的第一个原则其实非常简单:
不要盲目追求最大的模型,而是选择自己的电脑真正能够长期运行的模型。
二、Ollama 到底是什么?
如果之前没有接触过本地大模型,第一次看到:
bash
ollama run qwen3.5:9b
可能会觉得有点神奇。
输入一条命令,大模型就跑起来了。
其实 Ollama 可以简单理解成:
一个让我们在自己的电脑上运行大语言模型的工具。
它帮我们处理了很多底层事情。
我们不需要自己研究:
- 模型文件怎么加载
- 推理服务怎么启动
- API 怎么提供
- 模型怎么切换
- 模型怎么管理
只需要:
bash
ollama run qwen3.5:9b
然后就可以和模型聊天。
这也是我选择 Ollama 的一个重要原因:
简单。
三、第一次安装 Ollama
在 Mac 上安装完成之后,可以先检查:
bash
ollama --version
如果安装正常,会看到版本信息。
然后:
bash
ollama list
查看当前已经安装的模型。
我目前本地使用的模型主要是:
text
qwen3.5:9b
qwen3-embedding:0.6b
qwen2.5-coder:7b
deepseek-r1:7b
但并不是说我要同时运行它们。
这一点非常重要。
四、16GB Mac 为什么不能随便跑模型?
很多人在选择本地模型的时候容易犯一个错误:
模型越大,是不是效果就一定越好?
对于本地电脑来说,并不是。
假设:
text
模型 A:4GB
模型 B:7GB
模型 C:14GB
模型 D:30GB
看到这里可能觉得:
text
30GB > 14GB > 7GB > 4GB
所以 30GB 最强。
但是我的电脑只有:
text
16GB
如果模型本身就需要大量内存,再加上:
text
macOS
Chrome
IntelliJ IDEA
Python
Milvus
Ollama
KV Cache
内存很快就会吃满。
于是电脑开始:
text
内存不足
↓
Memory Pressure
↓
Swap
↓
磁盘读写增加
↓
推理变慢
↓
电脑发热
所以我后来逐渐形成了一个非常现实的判断标准:
本地模型不是"能不能启动",而是"能不能稳定使用"。
五、我的主力模型:Qwen3.5 9B
经过考虑,我把:
text
Qwen3.5 9B
作为这台 Mac 的主力模型。
为什么?
因为我需要的并不是单纯聊天。
我的使用场景非常多:
text
Java
↓
MySQL
↓
JVM
↓
RAG
↓
Agent
↓
MCP
↓
代码
↓
博客
↓
知识整理
所以我需要一个比较综合的模型。
Qwen3.5 9B 对我来说比较合适。
它可以承担:
- 日常问答
- 技术学习
- 中文内容
- Java 编程
- 代码分析
- RAG 最终回答
- Agent 推理
- 后面的 MCP 调用
- 博客写作
- 创作
因此我把它定义成:
text
Qwen3.5 9B
↓
我的本地 AI 主模型
六、为什么还要安装 Embedding 模型?
这里很容易产生一个误区。
很多人第一次搭 RAG 的时候会想:
"我已经有 Qwen3.5 了,为什么还要再安装一个模型?"
因为:
聊天模型和 Embedding 模型负责的事情不一样。
我的系统里面实际上有两个任务。
第一件事:理解和生成
例如:
"解释一下 MySQL 的 MVCC。"
这时候使用:
text
Qwen3.5 9B
第二件事:把文字转换成向量
例如:
text
MySQL 的 MVCC 是什么?
需要转换成:
text
[-0.0655,
-0.0861,
-0.0121,
...
]
这时候使用:
text
Qwen3-Embedding 0.6B
所以:
text
AI 系统
│
┌────────┴────────┐
│ │
Embedding Chat
│ │
Qwen3-Embedding Qwen3.5
0.6B 9B
│ │
找知识 生成答案
这是我搭建 RAG 以后才真正理解的一件事情。
七、Embedding 模型到底在什么时候工作?
假设我的 Obsidian 里面有一篇:
text
MySQL MVCC.md
内容:
markdown
# MySQL MVCC
MVCC 是 Multi-Version Concurrency Control,
即多版本并发控制。
InnoDB 通过 Undo Log 和 Read View 实现 MVCC。
系统第一次建立知识库的时候:
text
Markdown
↓
Qwen3-Embedding
↓
向量
↓
Milvus
以后我问:
MVCC 是什么?
系统再把问题进行一次 Embedding:
text
用户问题
↓
Qwen3-Embedding
↓
问题向量
然后:
text
问题向量
↓
Milvus
↓
寻找相似向量
↓
找到 MVCC.md
最后才交给:
text
Qwen3.5 9B
生成最终答案。
所以整个过程实际上是:
text
用户问题
│
▼
Qwen3-Embedding
│
▼
向量
│
▼
Milvus
│
▼
找到相关知识
│
▼
Qwen3.5 9B
│
▼
最终回答
这就是后面 RAG 的核心流程。
八、我还保留了几个备用模型
除了主力模型之外,我还准备了:
text
Qwen2.5-Coder 7B
DeepSeek-R1 7B
它们的用途不完全一样。
Qwen2.5-Coder 7B
更偏向:
text
Java
Python
JavaScript
SQL
代码补全
代码分析
所以如果以后专门进行:
"帮我分析这段 Java 并发代码。"
我可以考虑使用它。
DeepSeek-R1 7B
更适合拿来做:
text
复杂问题分析
推理
技术方案思考
不过我的电脑只有 16GB 内存。
所以我不会:
text
Qwen3.5
+
Qwen2.5-Coder
+
DeepSeek-R1
全部同时运行。
而是:
需要谁就启动谁。
九、我的本地模型架构
到这里,我的本地 AI 环境基本就确定了。
text
Ollama
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
Qwen3.5 Coder DeepSeek
9B 7B R1
│
│
▼
主力 AI 模型
Embedding 单独:
text
Qwen3-Embedding 0.6B
│
▼
文本向量化
│
▼
Milvus
因此整个知识库:
text
Obsidian
│
Markdown
│
▼
Qwen3-Embedding
0.6B
│
▼
Milvus
│
│
用户问题 ────────────┘
│
▼
检索
│
▼
Qwen3.5 9B
│
▼
AI回答
十、第一次运行 Qwen3.5
模型安装完成以后,我直接运行:
bash
ollama run qwen3.5:9b
第一次运行的时候需要等待模型准备完成。
然后输入:
text
你好,请介绍一下你自己。
如果能够正常回答:
text
本地大模型
↓
已经跑起来了
第一关就完成了。
十一、我第一次真正意识到:本地 AI 和在线 AI 不一样
以前使用在线 AI 的时候,我只需要:
text
打开网页
↓
输入问题
↓
得到答案
本地 AI 则完全不同。
你需要考虑:
text
模型
↓
显存/内存
↓
推理速度
↓
上下文
↓
Embedding
↓
向量数据库
↓
RAG
↓
模型回答
也就是说:
本地 AI 真正有意思的地方,不只是"把模型跑起来"。
而是:
把模型变成自己的基础设施。
十二、一个非常现实的问题:我的电脑为什么会发热?
这个问题我在实际运行过程中也遇到了。
尤其是:
text
Qwen3.5 9B
持续进行推理的时候。
原因其实不难理解。
大模型推理本质上就是大量计算。
于是:
text
CPU / GPU
↓
持续计算
↓
功耗增加
↓
温度升高
对于 13 英寸 M1 MacBook Pro 来说,长时间运行本地模型出现明显发热并不奇怪。
真正需要关注的并不是:
"电脑为什么热?"
而是:
有没有长期发生严重的内存压力和 Swap。
可以使用:
bash
ollama ps
查看 Ollama 当前正在运行的模型。
如果暂时不用模型:
bash
ollama stop qwen3.5:9b
让模型退出。
然后观察:
text
Activity Monitor
里面的:
- Memory
- CPU
- Memory Pressure
- Swap Used
十三、所以我的 16GB Mac 最终策略是什么?
经过实际体验,我给自己定了几个规则。
规则 1:不追求最大的模型
text
能稳定运行
>
理论参数更大
规则 2:一次主要运行一个大模型
例如:
text
Qwen3.5 9B
用完以后再切换:
text
Qwen2.5-Coder 7B
规则 3:Embedding 模型单独承担向量化
text
Qwen3-Embedding 0.6B
不要让聊天模型承担所有工作。
规则 4:电脑发热时减少连续推理
尤其是长时间:
text
Agent
+
RAG
+
大上下文
+
连续调用
会明显增加负载。
十四、到这里,我的第一阶段环境就完成了
现在我已经有:
text
Mac M1 16GB
│
▼
Ollama
│
┌────┴─────┐
│ │
▼ ▼
Qwen3.5 Embedding
9B 0.6B
│ │
│ ▼
│ 向量
│ │
│ ▼
│ Milvus
│
▼
最终回答
但是这时候还不能叫:
AI 知识库
因为现在只是:
我的电脑上运行了一个大模型。
它还不知道我的知识。
十五、真正的关键来了
下一步,我需要解决一个问题:
如何把我的 Markdown 知识变成 AI 能搜索的东西?
比如:
text
MySQL MVCC.md
怎么变成:
text
文本
↓
Embedding
↓
1024维向量
↓
Milvus
这时候就会进入整个项目中非常重要的一环:
Embedding
也是我在真正动手以后,觉得最值得单独研究的一个概念。
因为当我第一次运行:
text
MySQL MVCC 是多版本并发控制机制
得到:
text
向量维度:1024
的时候,我才真正意识到:
原来计算机可以把"文字的语义"变成一组数字。
而这,正是后面实现:
text
语义搜索
↓
向量数据库
↓
RAG
的基础。