进阶 12 分钟界面

本地 NotebookLM:开源替代方案 自托管

NotebookLM 让一个简单的想法广为人知:上传一批文档,提出问题并获得附有来源引用的回答,再生成可以像播客一样收听的音频摘要。问题在于,这些内容都会被发送到 Google 的服务器。本指南介绍如何将开源工具连接到自托管的 LLM,获得本地版 NotebookLM 的体验:资料笔记本、附有来源引用的回答和语音合成,同时不让您的任何文件离开自己的电脑。

作者: Léa B.·更新于 2026-08-27·已在 Windows、macOS 和 Linux 上测试

#NotebookLM 的功能以及我们可以复现的内容

在重建之前,需要先弄清楚 NotebookLM 真正提供了什么。它不是通用聊天机器人,而是一个以您选择的文档集为依据的助手。它只根据这些来源回答,引用其中的段落,并且理论上会拒绝编造资料中没有的内容。整个使用体验由三个部分组成。

资料来源笔记本
导入 PDF、网页、笔记或转录文本。这些材料构成助手唯一获准获取信息的范围。
所引用的回答
每条陈述都链接到支持它的来源段落,点击即可核实,无需盲目信任。
音频摘要(Audio Overview)
两个合成声音以播客的形式讨论您的文档,让您可以边走边听内容摘要,而不必阅读。

如今,这三项功能都可以用自由软件组件复现。前两项其实就是精心实现的 RAG(检索增强生成):对源材料建立索引,检索相关段落,再生成指向这些段落的回答。第三项是文本 → 对话 → 语音合成(TTS)的处理流程。没有什么特别的技术——整套流程在一台配备入门级 GPU 的机器上就能运行。

i
未完全复制的内容
NotebookLM 非常精致的界面设计及其 Audio Overview 的语音质量在像素级上仍难以复制。此处的目标并非复制界面,而是还原相同的使用体验——包括来源、引用和音频功能——同时始终掌握您的数据。

#为什么希望拥有本地版 NotebookLM

本地 AI 套件

只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。

  • 在线空间,终身可用
  • PDF + 文件
  • 30 天内退款

首要原因是隐私。笔记本中往往存储着最敏感的信息:未公开的研究笔记、企业内部文件、客户档案、合同、医疗记录。将这些数据上传至谷歌,相当于将一份副本交由第三方保管,且其使用条款随时可能变更,而您对此毫无控制权。部署本地 NotebookLM 可从根本上解决这一问题:文件始终保留在您的设备上,推理过程完全在本地硬件上运行。

数据主权
没有文档或请求会经过第三方服务。这对于GDPR、职业保密或机密研发至关重要。
无配额,无需订阅
技术栈搭建完成后,您可以处理任意数量的信息源,只要磁盘空间和您的耐心允许,没有每月数量限制。
离线
完整链路无需联网,适用于移动场景或隔离网络环境。
模型控制
您选择LLM、首选语言、量化方式以及相关参数设置——而不是被动接受一个黑箱模型。

#可信的开源替代方案

多个项目明确以成为本地版 NotebookLM 为目标。没有一个是完美的,但它们都能连接 Ollama,而且进展很快。以下是 2026 年值得使用的项目,按从最接近 NotebookLM 到最方便自行折腾和改造的顺序排列。

Open Notebook
最贴近 NotebookLM 的设计理念:采用笔记本这一组织方式,支持来源管理、带引用的聊天,并内置播客生成功能。开源,采用 Docker 容器部署,兼容 Ollama,可保持 100% 本地运行。
SurfSense
一个基于多源的开源研究助手(支持文档、网页、连接器)。适用于信息聚合与查询,支持本地 LLM。
Open WebUI / AnythingLLM
它们并不是 NotebookLM 的克隆,而是两个成熟的 RAG 界面,涵盖主要功能:导入文档、带来源引用的聊天,以及本地嵌入模型。这是实现“资料来源 + 问答”功能最简单的途径。
Podcastfy
专用于音频部分的模块:将文档或 URL 转换为双人语音对话。该模块通过本地 LLM 和您选择的 TTS 引擎进行控制。
→
两种策略
您可以选择一个直接与 NotebookLM 竞争的“一体化”工具(Open Notebook),也可以自行搭建用于处理来源和引用的 RAG 界面(Open WebUI),再搭配独立的 TTS 流水线来生成音频。第二条路线更加模块化,也能复用您可能已经拥有的组件。

#先决条件

Ollama
模型服务守护进程,默认运行在http://localhost:11434上。如尚未安装,请参见安装指南。
一个生成模型
可选 Qwen 3.5 9B(Q4_K_M 量化下约需 6.6 GB 显存,256k 上下文,支持多模态),或选择 Mistral Small 24B(约 14 GB)以获得出色的法语表现;对于低配置设备,Granite 4.2 8B(约 5.3 GB)就足够了。
嵌入模型
nomic-embed-text 或 mxbai-embed-large,可通过 ollama pull 获取。轻量级,甚至无需GPU即可运行。
Docker
大多数替代方案(Open Notebook、Open WebUI、AnythingLLM)只需一个容器即可部署,从而避免依赖冲突。
本地TTS引擎
Piper 用于音频部分:快速、轻量,支持法语语音。即使没有 GPU 也可进行语音合成。
获取模型
# Modèle de génération (adaptez à votre VRAM)
ollama pull qwen3.5:9b

# Modèle d'embeddings pour le RAG
ollama pull nomic-embed-text
i
Q4_K_M 量化下的显存参考值
3B 模型约需 2 GB,7B 模型约需 5 GB,14B 模型约需 9 GB,32B 模型约需 19 GB。配备 12 GB 显存的 RTX 3060 可流畅运行 14B 模型;在配备统一内存的 Mac(M4 Pro 24–48 GB)上,运行 32B 模型仍有可能。

#步骤 1:用 Ollama 搭建自己的资料笔记本

本地版 NotebookLM 的第一个组件就是笔记本本身:用于存放来源资料并为其建立索引的地方。这里我们选用 Open Notebook,它忠实地复现了这一概念。它以容器形式启动,并可配置为与您的 Ollama 通信,而非连接云端服务。

  1. 01
    获取项目源码
    克隆 Open Notebook 仓库并进入其目录。该仓库提供了一个开箱即用的 docker-compose 文件。
  2. 02
    指向 Ollama
    在配置(环境文件)中,将Ollama设为模型提供商,并指定URL http://localhost:11434(从容器内访问时则使用http://host.docker.internal:11434)。选择您的生成模型,并使用nomic-embed-text生成嵌入向量。
  3. 03
    启动服务栈
    运行 docker compose up。随后即可在浏览器中打开网页界面,数据库和索引会由系统为您管理。
  4. 04
    创建一个笔记本并导入
    创建一个笔记本,然后将您的 PDF 文件拖入其中,或粘贴 URL 或文本。每份来源资料都会被自动切分并进行向量化处理。
终端
# Récupérer et lancer Open Notebook
git clone https://github.com/lfnovo/open-notebook.git
cd open-notebook

# Configurer le fournisseur Ollama dans le fichier d'environnement
cp .env.example .env
# éditez .env : OLLAMA_API_BASE=http://host.docker.internal:11434

# Démarrer la stack complète
docker compose up -d
!
Linux 系统中使用 host.docker.internal
从 Docker 容器中运行时,localhost 指向容器本身,而非您的主机机器。在 macOS 和 Windows 上,host.docker.internal 指向主机。在 Linux 上,有时需要显式添加(在 compose 文件中配置 extra_hosts: host.docker.internal:host-gateway)或使用 Docker 网关的 IP 地址。否则 Ollama 将无法访问。

如果您不想再添加一个工具,Open WebUI 和 AnythingLLM 都很适合充当资料来源笔记本:创建一个工作空间(workspace),将文档导入其中,系统就会自动通过 nomic-embed-text 建立索引。这就是本站 RAG 指南中详细介绍的“无代码”方案。

#步骤 2:带有来源引用的问答

这就是本地版 NotebookLM 的核心:用自然语言提问,获得仅依据您提供的资料作出的回答,并附上确切的原文段落作为依据。从技术上说,RAG 会检索与问题最相关的片段,然后由 LLM 根据这些片段撰写回答,而不是依靠其通用知识。引用质量主要取决于两点:严格的系统提示词,以及明确要求提供来源。

在 Open Notebook 以及 Open WebUI 中,这种行为已经内置:在笔记本的聊天框中提出问题,回复会显示所使用的片段。如果您自行搭建链路,系统提示则起决定性作用。

用于生成带引用回答的系统提示词
Tu réponds UNIQUEMENT à partir des extraits fournis ci-dessous.

Règles :
- Si la réponse ne figure pas dans les extraits, dis « Je ne trouve pas cette information dans les sources. »
- N'utilise jamais tes connaissances générales pour compléter.
- Après chaque affirmation, indique la source entre crochets, ex. [source 2].
- Cite mot pour mot le passage clé quand c'est utile.

Réponds en français, de façon concise.

在模型设置方面,有两个参数很重要。较低的温度(0.2)能减少凭空发挥,让模型紧扣来源。足够大的上下文窗口(num_ctx)可以容纳检索到的片段,避免截断——否则模型只会根据其中一部分段落作答。

调用 Ollama 并附带来源
import requests

SYSTEM = open('prompt_systeme.txt').read()

# extraits = passages renvoyés par votre recherche vectorielle
contexte = "\n\n".join(
    f"[source {i+1}] {e}" for i, e in enumerate(extraits)
)

resp = requests.post("http://localhost:11434/api/chat", json={
    "model": "qwen3.5:9b",
    "stream": False,
    "options": {"num_ctx": 8192, "temperature": 0.2},
    "messages": [
        {"role": "system", "content": SYSTEM},
        {"role": "user", "content": f"{contexte}\n\nQuestion : {question}"},
    ],
})

print(resp.json()["message"]["content"])
i
RAG不会读取‘全部’内容
与普遍的直觉相反,模型并不会在每次提问时遍历您的全部资料:它只会收到最相近的几个段落。问题表述不当会检索到错误的片段,导致回答偏题。如果回答不理想,请使用文档中的确切术语重新表述问题。

#步骤3:生成本地音频摘要(TTS)

这是 NotebookLM 的标志性功能——Audio Overview,由两个声音围绕您的文档展开讨论——也是在本地重现时最令人惊叹的功能。流程分为两个阶段:LLM 根据源材料编写对话脚本,然后本地 TTS 引擎将脚本转换为音频。这样,语音和文本都能完全保持离线。

第一步是让 LLM 撰写对话。要求 LLM 生成两个角色之间的对话,用通俗易懂的方式讲解内容,并为每句台词标注说话者——这些标注将用于在语音合成时交替使用不同声音。

播客脚本提示词
À partir des sources ci-dessous, écris un dialogue de podcast en français
entre deux animateurs, Alex et Camille, qui vulgarisent le contenu.

Règles :
- Format strict, une réplique par ligne : « Alex: ... » ou « Camille: ... ».
- Reste fidèle aux sources, n'invente aucun fait ni chiffre.
- Ton vivant et curieux, phrases courtes, adaptées à l'oral.
- 12 à 18 répliques, une vraie conversation qui se répond.

第二步是语音合成。Piper 是本地运行时的自然选择:速度快、轻量,并提供质量良好的法语语音。为每位说话者分配一种声音(两个不同的 .onnx 模型文件),以区分 Alex 和 Camille,然后拼接音频片段。

安装 Piper 和一个法语音色
# Installer Piper
pip install piper-tts

# Télécharger deux voix françaises depuis Hugging Face (rhasspy/piper-voices)
# ex. fr_FR-siwis-medium et fr_FR-upmc-medium (fichiers .onnx + .onnx.json)

# Synthétiser une réplique
echo "Bonjour et bienvenue dans cet épisode." | \
  piper --model fr_FR-siwis-medium.onnx --output_file alex_01.wav
script_vers_audio.py
import subprocess, re

VOIX = {
    "Alex": "fr_FR-siwis-medium.onnx",
    "Camille": "fr_FR-upmc-medium.onnx",
}

segments = []
for i, ligne in enumerate(open("script.txt")):
    m = re.match(r"(Alex|Camille):\s*(.+)", ligne.strip())
    if not m:
        continue
    locuteur, texte = m.group(1), m.group(2)
    wav = f"seg_{i:03d}.wav"
    subprocess.run(
        ["piper", "--model", VOIX[locuteur], "--output_file", wav],
        input=texte.encode(),
    )
    segments.append(wav)

# Concaténer les segments (ex. avec ffmpeg ou pydub)
print("Segments générés :", len(segments))

为避免手动编写该流程,Open Notebook 内置了播客生成功能,Podcastfy 正是通过本地 LLM 和您选择的 TTS 引擎,实现「文档 → 音频对话」的转换。上述手动流程仍有助于理解其工作原理,并保持对语音和格式的完全控制。

→
更自然的语音
Piper 更重视速度,而非表现力。如果您觉得合成语音过于机械,Kokoro 或 Coqui XTTS 等引擎可以生成更自然的声音,但代价是合成所需的计算资源更多,而且几乎必须配备 GPU。对于实用性的语音收听,Piper 完全够用。

#故障排除

容器无法连接到 Ollama
在Docker容器内,localhost指向容器本身。请使用host.docker.internal(Linux下通过extra_hosts添加)或主机的IP地址,并在需要时确认Ollama确实监听0.0.0.0。
未注明来源或凭空编造的回答
系统提示不够严格,或温度过高。请强制要求「仅基于摘录内容」,要求使用 [source N] 格式,并将温度降至 0.2。
为 PDF 建立索引时,提取结果为空
这是没有文本层的扫描件。导入前,请先进行 OCR 识别(ocrmypdf entree.pdf sortie.pdf)。
回答忽略了部分来源
num_ctx 太小:文本片段已被截断。如果显存足够,请增大 num_ctx,或者减少检索返回的文本片段数量。
Piper 找不到语音音色
每个音色都需要两个文件:.onnx 文件及其对应的 .onnx.json 文件,两者须放在同一目录中。请检查传给 --model 的路径是否准确。
音频在各句对白之间出现卡顿
直接拼接会将 WAV 文件连在一起,不留停顿。在音频片段之间插入短暂的静音(使用 ffmpeg 或 pydub),可让音频衔接更流畅。

#深入了解

本指南整合了网站其他位置已详细说明的内容。如需深入了解每一步骤:

安装 Ollama:Windows、macOS 和 Linux
如果尚未配置本地模型服务,可从这里开始,在端口 11434 上提供本地模型服务。
使用 Ollama 实现本地 RAG,无需编写代码(Open WebUI、AnythingLLM)
无需编写代码,即可实现您的本地 NotebookLM 中的“来源材料 + 带来源引用的问答”部分。
100 % 本地语音助手:Whisper + Ollama + Piper
进一步了解 Piper 和本地语音合成,不局限于音频摘要。
这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。