你有一堆零散的日记、会议记录和灵感便签,散落在各个文件夹里。你试过用云端 AI 整理它们,但一想到那些最私密的文字被上传到某个服务器上等着被“训练”,就打消了念头。
如果你需要的只是一个能理解上下文、帮你提炼要点、还能按需搜索旧笔记的助手,而这一切都能在本地的笔记本电脑上完成,不必联网——你会试试看吗?
今天我们就来做这件事:用 Ollama 在本地运行 Google 的 Gemma4(31B),搭建一个完全离线的隐私笔记助手。你的笔记文件不会离开这台机器,却能被一个能读懂自然语言的大模型唤醒。
Ollama 和 Gemma4 在扮演什么角色?
先说 Ollama。把它想象成一个“本地 AI 管家”:你告诉它想用哪个模型,它负责下载、量化、加载,并提供一个统一的 HTTP 接口(兼容 OpenAI 格式)。你不需要手动配置 CUDA、PyTorch 版本——它把底层复杂性都封装了,安装只需一行命令。
Gemma4 则是一个 310 亿参数的语言模型,来自 Google DeepMind 的 Gemma 系列。310 亿参数听起来很大,但经过量化——就像把一张高清位图保存为 JPG,肉眼几乎分辨不出差别,文件却小了 4 到 8 倍——你可以在消费级硬件上运行它。Ollama 提供的 gemma4:31b 默认就是 4-bit 量化版,推理所需显存降到约 18-20 GB;如果你的电脑有 32 GB 内存且没有独立显卡,也可以启用纯 CPU 推理,速度会慢一些,但处理笔记这种间断性需求完全够用。
这两样加在一起,意味着你可以把一个接近 GPT-4 级别的语言模型塞进一台高配 MacBook 或 Linux 工作站里,而且后续的推理完全断网进行。
从零搭建:三步获得一个本地笔记助手
下面我假设你有一台至少 16 GB 内存的电脑(推荐 32 GB),并且操作系统是 macOS 或 Linux。Windows 用户也可以参照,但建议在 WSL2 下操作。
1. 安装 Ollama 并拉取模型
去 ollama.com 下载 0.24.0 版安装包,或者直接用终端:
# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh
# 安装完成后启动服务(通常自动启动,若无则运行)
ollama serve
然后拉取 Gemma4 的 31B 量化模型。这一步会下载约 19 GB 的数据,请留出足够空间和耐心。
ollama pull gemma4:31b
下载完成后,可以先测试一下模型能否正常对话:
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemma4:31b",
"messages": [
{"role": "user", "content": "用一句话解释什么是量子纠缠"}
]
}'
如果返回了正常的回复,说明本地推理链路已经跑通。
2. 让模型“阅读”你的笔记
接下来我们要写一个极简的 Python 脚本,它负责做三件事:
- 扫描指定文件夹中的所有 Markdown 笔记;
- 把笔记内容拼接成提示词发给 Ollama;
- 根据你的问题(如“我过去一周记了哪些关于睡眠的内容?”),返回回答,并附带引用来源。
你需要安装 Python 3.10+,然后创建一个脚本 notes_assistant.py:
import os
import sys
import requests
OLLAMA_API = "http://localhost:11434/v1/chat/completions"
NOTES_DIR = "./my_notes" # 你的笔记目录
def load_notes(directory):
"""遍历目录,读取所有 .md 文件,返回文件名到内容的映射"""
notes = {}
for root, _, files in os.walk(directory):
for file in files:
if file.endswith(".md"):
path = os.path.join(root, file)
with open(path, "r", encoding="utf-8") as f:
notes[file] = f.read()
return notes
def build_prompt(notes, question):
"""将笔记作为上下文,构建提示词"""
context = "\n\n".join(
f"### {name}\n{content}" for name, content in notes.items()
)
prompt = (
"你是一个隐私笔记助手。下面是用户的全部笔记内容。"
"请根据这些笔记回答问题,并在答案末尾注明引用的笔记文件名。\n\n"
f"{context}\n\n"
f"问题:{question}"
)
return prompt
def ask_model(prompt):
payload = {
"model": "gemma4:31b",
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.3,
"max_tokens": 1024
}
resp = requests.post(OLLAMA_API, json=payload)
resp.raise_for_status()
return resp.json()["choices"][0]["message"]["content"]
if __name__ == "__main__":
if len(sys.argv) < 2:
print("用法: python notes_assistant.py '你的问题'")
sys.exit(1)
question = sys.argv[1]
notes = load_notes(NOTES_DIR)
if not notes:
print("在目录中未找到任何 .md 文件")
sys.exit(1)
prompt = build_prompt(notes, question)
print("思考中(本地推理,请耐心等待)...")
answer = ask_model(prompt)
print("\n" + answer)
将这个脚本放在与笔记目录平级的位置,然后运行:
python notes_assistant.py "我上个月记了哪些关于焦虑情绪的内容?"
模型会扫描所有笔记,找到相关段落,并总结出一个凝练的回答,末尾列出涉及的文件名。整个过程,笔记内容只在你本机的内存和 CPU/GPU 中流转。
3. (可选)配上界面,更像“助手”
如果你想要一个带浏览界面的工具,可以安装 Open WebUI(v0.9.5),它提供了一个类 ChatGPT 的网页界面,并且支持将本地文件夹作为知识库。安装后连接本地的 Ollama API,就能直接在浏览器里与你的笔记对话,还支持多轮上下文。
但这种方案对笔记的结构化程度有一定要求,初期建议先用上面的命令行脚本跑通,验证模型确实能理解你的笔记风格。
这意味着什么?
坦白说,这套方案不是“一键开箱即用”的消费品。Gemma4:31B 在纯 CPU 模式下响应一个问题可能需要 20 到 40 秒(取决于你的硬件),做不到实时聊天式的体验。同时,模型一次能输入的笔记总字数有限(上下文窗口约 8K token,相当于 6000 个中文字),如果你的笔记库非常大,需要额外做分块检索(RAG),那又是另一篇文章的主题了。
但它打开了一个重要的可能性:本地大模型已经跨过了“能用”的门槛。过去我们觉得“本地 AI 顶多做做翻译、分类”,现在一个 31B 的模型可以在你的笔记本上完成总结、联想、按语义搜索等复杂任务,而且效果与云端小模型差距不大。
这意味着你的私人知识库不再是死的文档堆积。你可以对它说:“把我所有关于‘拖延症’的笔记整理成一个行动清单”,或者“比较我今年 1 月和 3 月的日记,找出情绪变化的相同点”。模型会老老实实读你的文字,而不把它们变成某家公司改善下个版本的数据。
至于隐私——本地推理就是最彻底的隐私。没有网络请求,没有 API 调用记录,你的日记只有你和这块 CPU 知道。
你不需要立刻丢弃 Notion 或 Obsidian。但下次深夜合上电脑时,你可以想一件事:你写下的那些字,其实可以在你下次打开它们时,主动跟你聊聊自己。
