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

我为什么要给自己做一个本地 AI 知识库?

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

本文是第 01 篇。

最近在学习 Java、JVM、MySQL、Redis、Spring AI、RAG、Agent、MCP 的过程中,我越来越明显地感觉到一个问题:

知识越来越多,但真正能被我"找回来"的知识却越来越少。

以前学习技术,我的方式基本是:

text 复制代码
看到一篇文章
      ↓
收藏
      ↓
看完
      ↓
感觉自己学会了
      ↓
过几天
      ↓
忘了
      ↓
重新搜索

后来开始使用 Obsidian,我把大量学习笔记整理成 Markdown。

情况确实改善了。

但是新的问题又出现了:

笔记越来越多以后,怎么快速找到真正需要的内容?

于是我开始思考:

能不能把自己的 Obsidian 知识库和本地大模型连接起来?

我希望最终做到这样:

text 复制代码
我问 AI:

"MVCC 为什么需要 Undo Log?"

             ↓

AI 搜索我的知识库

             ↓

找到我以前整理的 MySQL MVCC 笔记

             ↓

把相关内容交给大模型

             ↓

结合我的笔记回答问题

这样,我的笔记就不再只是"存储文件"。

而是变成了一个真正可以被 AI 使用的个人知识库


一、我想做的到底是什么?

先不急着讲 RAG、Embedding、Milvus、MCP 这些概念。

先看最终效果。

我希望以后打开自己的 AI 知识库,可以直接问:

MySQL 的 MVCC 是什么?

AI 不只是凭自己的训练数据回答。

而是优先从我的知识库中寻找:

text 复制代码
MySQL
 ├── 索引
 ├── 事务
 ├── MVCC
 ├── 锁
 └── Buffer Pool

找到相关笔记以后,再交给大模型。

最终回答:

text 复制代码
根据你的 MySQL 笔记:

MVCC 是 Multi-Version Concurrency Control,
即多版本并发控制。

InnoDB 主要通过 Undo Log 和 Read View
实现 MVCC......

......

这和普通的聊天机器人有一个很大的区别:

它回答的是"我的知识"。


二、为什么选择 Obsidian?

我选择 Obsidian,并不是因为它本身有多"AI"。

恰恰相反。

我看中的是它非常简单的一点:

笔记本质上就是 Markdown 文件。

例如我的笔记:

text 复制代码
MySQL MVCC.md

打开以后就是普通文本:

markdown 复制代码
# MySQL MVCC

MVCC 是 Multi-Version Concurrency Control,
即多版本并发控制。

InnoDB 通过 Undo Log 和 Read View 实现 MVCC。

MVCC 可以在保证事务隔离性的同时,
减少读操作和写操作之间的锁竞争。

这意味着:

text 复制代码
Obsidian
   ↓
Markdown
   ↓
Python
   ↓
AI

中间没有特别复杂的格式转换。

AI 可以直接读取这些 Markdown 文件。

所以我最终希望:

text 复制代码
Obsidian = 我的知识存储层

而不是让 AI 替我保存知识。


三、为什么还需要本地 AI?

其实现在已经有很多在线 AI 产品。

为什么还要自己搭?

我的原因主要有三个。

1. 数据掌握在自己手里

我的学习笔记里面会包含:

  • Java 学习笔记
  • 面试题
  • 项目设计
  • 技术方案
  • 工作总结
  • 代码
  • 创作素材
  • 小说设定

这些内容我希望能够长期保存在自己的电脑上。

因此我希望:

text 复制代码
我的知识
   ↓
我的硬盘
   ↓
我的 AI

而不是完全依赖某一个在线服务。


四、第二个原因:我想真正搞懂 AI

如果只是使用 ChatGPT,我可以直接问:

什么是 Embedding?

但是我真正想知道的是:

text 复制代码
文本
 ↓
Embedding
 ↓
向量
 ↓
向量数据库
 ↓
相似度搜索
 ↓
RAG
 ↓
大模型

这些东西到底是怎么工作的?

所以这个项目对我来说不只是一个工具。

它也是一个AI 学习实验场

我会通过真正把系统搭起来,逐渐搞懂:

  • LLM
  • Embedding
  • Vector
  • Vector Database
  • RAG
  • Chunk
  • Metadata
  • Retrieval
  • Prompt
  • MCP
  • Tool
  • Agent

而不是只背这些概念。


五、第三个原因:我的电脑并不算强

我的机器是一台:

text 复制代码
MacBook Pro 13"
Apple M1
16GB Unified Memory

这意味着我不能像服务器一样随便运行几十 GB、上百 GB 的大模型。

所以我反而想尝试一个问题:

一台普通的 M1 16GB Mac,到底能不能搭出一个真正能用的本地 AI 知识库?

这也是这个系列比较有意思的地方。

我的目标不是:

"我要跑最大的模型。"

而是:

在有限硬件下,把整个 AI 系统真正跑起来。


六、我的第一版技术方案

目前我的思路非常简单。

先用:

text 复制代码
Ollama

负责运行本地模型。

然后使用:

text 复制代码
Qwen3.5 9B

作为主要的大语言模型。

使用:

text 复制代码
Qwen3-Embedding 0.6B

把我的 Markdown 笔记转换成向量。

然后使用:

text 复制代码
Milvus Lite

保存这些向量,并进行相似度搜索。

整体结构:

text 复制代码
                 我的电脑
                    │
        ┌───────────┴───────────┐
        │                       │
     Obsidian                Ollama
        │                       │
    Markdown              ┌────┴────┐
        │                  │         │
        │               Qwen3.5   Embedding
        │                  │       0.6B
        │                  │         │
        └──────────────→ RAG ←───────┘
                           │
                        Milvus
                           │
                           ▼
                        AI回答

当然,这只是第一版。

后面还会继续加入:

text 复制代码
Chunk
Metadata
自动索引
MCP
Agent

最终希望变成:

text 复制代码
                    Obsidian
                       ↕
                  Markdown
                       ↕
                    MCP
                       ↕
                    Agent
                       ↕
                     RAG
                       ↕
                    Milvus
                       ↕
                  Embedding
                       ↕
                   Qwen3.5

七、RAG 在这里到底负责什么?

这里先简单理解。

假设我有 10,000 篇 Markdown 笔记。

我问:

MySQL 的 MVCC 如何实现?

大模型不可能每次都把我的 10,000 篇笔记全部读一遍。

所以需要一个"搜索系统"。

这就是 RAG 中的 Retrieval

大概过程:

text 复制代码
用户问题

"MVCC 如何实现?"

        ↓

把问题转换成向量

        ↓

去 Milvus 搜索

        ↓

找到最相关的几个知识片段

        ↓

交给大模型

        ↓

生成答案

所以可以先把 RAG 理解成:

先搜索知识,再让 AI 根据搜索结果回答。


八、Embedding 又是什么?

这是我在真正做这个项目以后,第一个觉得特别有意思的东西。

例如:

text 复制代码
MySQL 的 MVCC 是什么?

Embedding 模型可以把它转换成一组数字:

text 复制代码
[-0.0655,
 -0.0861,
 -0.0121,
 ...
]

我的实际测试中:

text 复制代码
向量维度:1024

也就是说:

text 复制代码
一句话
 ↓
Embedding
 ↓
1024维向量

那么另外一句:

text 复制代码
InnoDB 的多版本并发控制机制是什么?

也可以转换成一个 1024 维向量。

然后比较两个向量之间的相似程度。

于是计算机就能够判断:

text 复制代码
"MVCC 是什么?"

          ≈

"InnoDB 的多版本并发控制机制是什么?"

这就是后面实现语义搜索的基础。

这一部分我会在后面的文章里单独展开。


九、为什么需要 Milvus?

有了向量以后,还需要一个地方保存它们。

比如我的知识库有:

text 复制代码
Java → 500篇
MySQL → 300篇
Redis → 200篇
JVM → 300篇
AI → 500篇

如果以后变成几千甚至几万篇笔记,就需要专门的向量检索系统。

所以我选择:

Milvus。

第一阶段并没有直接部署一个复杂的 Milvus 集群,而是使用:

text 复制代码
Milvus Lite

直接在本地运行。

最终:

text 复制代码
Markdown
   ↓
Embedding
   ↓
1024维向量
   ↓
Milvus

以后用户输入问题:

text 复制代码
问题
 ↓
Embedding
 ↓
Milvus
 ↓
找到最相似的知识

十、我希望这个项目最终做到什么程度?

第一阶段,我只想做到:

text 复制代码
Markdown
 ↓
Embedding
 ↓
Milvus
 ↓
搜索
 ↓
Qwen3.5
 ↓
回答

然后逐渐升级。

V1:能搜索

text 复制代码
Obsidian
 ↓
Embedding
 ↓
Milvus
 ↓
Vector Search

V2:能问答

text 复制代码
用户问题
 ↓
RAG
 ↓
Qwen3.5
 ↓
答案

V3:自动同步

text 复制代码
修改 Markdown
 ↓
自动检测
 ↓
重新 Embedding
 ↓
更新 Milvus

V4:接入 MCP

text 复制代码
AI
 ↓
MCP
 ↓
Obsidian

让 AI 可以:

text 复制代码
搜索笔记
读取笔记
创建笔记
修改笔记

V5:Agent

最终希望能够直接告诉 AI:

"帮我整理一下最近学习的 MySQL MVCC,并生成一篇新的 Obsidian 笔记。"

然后 AI 自己完成:

text 复制代码
搜索相关知识
       ↓
读取已有笔记
       ↓
分析
       ↓
整理
       ↓
生成
       ↓
写入 Obsidian

这时候,它才真正开始像一个:

我的个人 AI 知识助手


十一、整个项目的学习路线

所以接下来这个系列不会一上来就讲复杂 Agent。

而是从最基础的东西一点一点往上搭。

text 复制代码
01  为什么做本地 AI 知识库
        ↓
02  Ollama 本地 AI 环境
        ↓
03  Embedding
        ↓
04  Milvus
        ↓
05  向量搜索
        ↓
06  完整 RAG
        ↓
07  Chunk
        ↓
08  自动索引 Markdown
        ↓
09  Metadata
        ↓
10  RAG 优化
        ↓
11  接入真实 Obsidian
        ↓
12  自动同步
        ↓
13  MCP
        ↓
14  MCP Server
        ↓
15  AI 修改 Obsidian
        ↓
16  RAG + MCP + Agent
        ↓
17  个人 AI 知识助手
        ↓
18  完整项目总结

十二、写在最后

做这个项目之前,我对很多 AI 概念其实都是:

"听过,但是没有真正跑过。"

比如:

text 复制代码
Embedding
Milvus
RAG
Chunk
MCP
Agent

看文章的时候感觉都懂。

但真正自己写代码以后,会发现:

"看懂"和"做出来"完全是两回事。

比如第一次用 Milvus 搜索时,我就遇到了:

text 复制代码
Collection 'knowledge_base'
is in state 'released'

这种问题。

而解决问题的过程,反而让我真正理解了:

向量数据库到底是怎么工作的。

所以我决定把这个项目完整记录下来。

不追求一开始就做得多复杂。

而是:

text 复制代码
能跑
 ↓
理解
 ↓
优化
 ↓
扩展
 ↓
最终做成真正能用的系统

如果最终成功,我希望得到的不只是一个 AI 工具。

而是一套属于自己的:

「本地 AI + 个人知识库 + RAG + MCP + Agent」系统。


下一篇

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

下一篇会直接开始动手:

text 复制代码
M1 16GB
   ↓
安装 Ollama
   ↓
选择模型
   ↓
Qwen3.5 9B
   ↓
Qwen3-Embedding 0.6B
   ↓
第一次运行本地大模型

并且会解释一个非常现实的问题:

16GB 内存的 Mac,到底应该跑多大的本地模型?

相关推荐
您^_^1 小时前
DeepSeek-Harness v0.1.5-alpha.1更新后旧会话打不开?5 步抢救 8MB 会话照抄
人工智能·windows·个人开发·deepseek v4 pro·deepseekharness
倔强的石头1061 小时前
【深度学习】神经网络前向传播与反向传播推导
人工智能·深度学习·神经网络
行业研究员1 小时前
企业智能体安全厂商综合评估
人工智能·智能体安全
智能运维指南1 小时前
AI加持下的可观测平台与传统平台有什么本质区别?智能告警降噪和根因分析是否可靠?
运维·人工智能·可观测平台·嘉为蓝鲸
七牛云行业应用1 小时前
OpenCode 跑本地 Llama:编程 Agent 接入本地大模型的完整思路
人工智能·ai编程·llama
AI技术新视界1 小时前
从“只观不控”到“即时御防”:基于感知治理遥测(GAAT)的多 AI 智能体闭环治理架构
人工智能
Theo_xx1 小时前
声学感知基础:Day2(1).Chirp信号
人工智能·无线感知·声学感知
云雀衔光1 小时前
Java Spring AI MCP:在 Spring 里把 AI 接上你的业务系统
java·开发语言·人工智能·后端·测试工具·spring
小白说大模型1 小时前
去AI味提示词大全:25个实用Prompt帮你降低AI率
大数据·人工智能·pytorch·深度学习·机器学习·prompt