【从 0 打造我的本地 AI 知识库】在 M1 Mac 上搭建 Ollama:我的本地 AI 模型到底应该怎么选?

在 M1 Mac 上搭建 Ollama:我的本地 AI 模型到底应该怎么选?

系列:《从 0 打造我的本地 AI 知识库:Obsidian + Ollama + Milvus + RAG + MCP + Agent》

第 02 篇

上一篇:《我为什么要给自己做一个本地 AI 知识库?》

本文关键词:Ollama 本地大模型 Qwen3.5 Embedding M1 Mac 16GB


一、我为什么没有直接去部署一个"大模型"?

决定做本地 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

的基础。

相关推荐
Java后端的Ai之路1 小时前
Git pull弹出vim编辑器完整排查指南
开发语言·人工智能·git·编辑器·vim
西瓜拿铁好喝2 小时前
2026 语义缓存实战:把命中契约写进SPEC,MonkeyCode 云端跑通
人工智能·机器学习·缓存
老余说AI3 小时前
AI 漫剧赛道转向:游戏 IP 改编如何走出同质化,AI 多语种工具如何补上海外分发缺口
人工智能·短剧
hhzz3 小时前
【OpenCV 入门到精通 03】图像入门:读取、显示、保存完全指南
人工智能·python·opencv·计算机视觉
hfywmsj7 小时前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
沧沧凉凉10 小时前
同一个 Blender 建模,Claude 两个模型都翻车,GPT-6 一次过
人工智能·游戏·ai编程
X54先生(人文科技)10 小时前
ELR-SELLM Edge 神经元网络架构评估报告
人工智能·深度学习·架构·开源
今年下半年10 小时前
从零开始搭建一套大语言模型 + LangGraph 多智能体编排 + RAG 知识库检索** 的智能问答平台
人工智能·语言模型·自然语言处理