Open Notebook — 开源 NotebookLM 替代 / 你的二脑工作台
// HOW IT WORKS 工具使用流程 — AI 时代知识管理的五步闭环 采集 → 编译 → 沉淀 → 检索 → 产出
// AI-NATIVE KNOWLEDGE LOOP 5 stages · 1 closed loop · powered by 18+ LLM providers 多模态采集 SEARCH · INGEST 论文 · PDF · 网页 · 音视频 YouTube · 笔记 · 贴文本 → Source 实体入库 AI 技能编译 SKILLS · COMPILE Docling 解析 · 向量嵌入 总结提炼 · 关系抽取 → 18+ LLM 任选切换 知识库沉淀 STORE · GRAPH SurrealDB · 概念节点 关系边 · 全程加密 → 越用越值 · 长期资产 语义检索 RETRIEVE · CITE 向量相似度 + 引用溯源 原文页码 · 上下文重组 → 索引 ≠ 推理 AI 辅助产出 CHAT · WRITE · PODCAST 引用问答 · 学术写作 双主持播客 + TTS → 产出反哺 · 闭环 // 闭环:产出反哺 — 新的对话与播客也会回流为新的 Source

核心思路:Open Notebook 不是「文件夹 + 全文搜索」式的旧时代笔记软件,而是一台知识编译机——把搜索来的多模态资料,通过 AI 技能(解析 / 嵌入 / 总结 / 播客)持续编译进结构化的 SurrealDB 知识库;当你回头检索时,模型给出的不是切片召回,而是编译后的上下文 + 引用溯源。每一次问答、每一段播客,都让你的私有知识库更厚——这就是 AI 时代知识管理的核心范式。

Open Notebook 是一个开源、隐私优先的 NotebookLM 替代品,定位为个人与团队的 “二脑工作台”:将论文、组织文档、会议记录、网页、音频与视频等多模态资料集中管理,以 Notebook → Sources → Notes 三层结构进行语义检索、AI 辅助问答、学术写作与播客生成。


项目作者 lfnovo 采用 MIT License 开源,推荐部署方式为 docker compose up -d,一键启动 Streamlit UI (8502) + FastAPI Service (5055) + SurrealDB v2 (8000) 三件套;首次启动仅需一个加密密钥 OPEN_NOTEBOOK_ENCRYPTION_KEY,所有模型提供商(18+,含 DashScope/Qwen、OpenAI、Anthropic、Google、Ollama、vLLM 等)都在 UI 里动态配置,数据全部落在本地 SurrealDB 中。是今年「AI 原生个人知识库」赛道里最接近生产可用、且完全开源的代表工具之一。

多模态来源入库

支持 PDF / Markdown / DOCX / HTML 网页、YouTube 字幕、本地音频转录、贴文本等多种来源;Web 抓取使用 Firecrawl/Jina,文档解析使用 Docling。所有资料以 Source 实体落在 SurrealDB。

18+ 模型提供商免锁定

同时支持 OpenAI、Anthropic、Google Gemini、DashScope (Qwen)、Ollama、vLLM、Groq、DeepSeek、火山方舟、Mistral、Cohere 等;在 UI Settings 中点击切换,不需重启。

语义检索 + 引用溯源

内置向量检索,问答时自动返回 原文引用 + 页码定位,遵循 Karpathy 在 LLM Wiki Gist 中提出的 “索引 ≠ 检索,检索 ≠ 推理” 原则。

一键生成播客/讲述

复现 NotebookLM 最火的能力:选中一组 Sources 后,以你选择的语言生成双主持对话脚本 + 语音音频;语音后端可接 ElevenLabs / Coqui TTS / Edge-TTS。

隐私优先 / 完全本地

所有 Notebook、Sources、Notes、嵌入向量与 API Key 均加密后落在本地 SurrealDB(./surreal_data);启用 Ollama 后可脱网运行,数据不出机器,适合企业内部与高隐私需求场景。

API + UI 双接口

5055 端口提供一套 FastAPI REST,可被外部 Agent / Workflow / IDE 插件调用;可作为个人知识库的 后端服务,与 Obsidian / Logseq / VSCode / Claude Code 联动。

友好提示:Open Notebook 采用 Docker Compose 部署,三个容器一键拉起,安装阶段仅需一个加密密钥。所有模型提供商(OpenAI / DashScope / Ollama / Anthropic ...)都在 UI Settings → Models 里动态配置,不需重启

成功判定:通过公网域名访问 https://your-domain 返回 200(Streamlit UI 可访问)且 https://your-domain/health 返回 ok(域名通过 SLB / Nginx 反向代理绑定到容器 8502 端口)。

① 前置条件检查(Agent 自检)

Open Notebook 推荐使用 Docker Compose 部署;MacOS 推荐装 Docker Desktop,Linux 装 docker-ce + docker compose plugin
docker --version             # required docker compose version       # required (v2 syntax) lsof -i :8502 || echo free   # 8502 不能被占 lsof -i :5055 || echo free   # 5055 不能被占 lsof -i :8000 || echo free   # 8000 不能被占

② 需人类补齐(Agent 必须暂停询问)

OPEN_NOTEBOOK_ENCRYPTION_KEY 任意 32+ 位随机字符串,推荐 openssl rand -hex 32一旦设定不得修改(会锁住数据库里已保存的 API Key)
OPEN_NOTEBOOK_PASSWORD 可选 UI 登录密码;本地单机使用可留空
DASHSCOPE_API_KEY 可选;部署后在 UI Settings → Models → Add Provider 填入即可,不走 .env

③ docker-compose.yml 模板(Agent 写入 open-notebook/ 目录)

services:   surrealdb:     image: surrealdb/surrealdb:v2     ports: ["8000:8000"]     volumes: ["./surreal_data:/mydata"]     user: root     command: start --user $${SURREAL_USER} --pass $${SURREAL_PASS} rocksdb:/mydata/database.db    open_notebook:     image: lfnovo/open_notebook:v1-latest     ports:       - "8502:8502"   # Streamlit UI       - "5055:5055"   # FastAPI service     env_file: ["docker.env"]     depends_on: ["surrealdb"]     volumes: ["./notebook_data:/app/data"]

④ docker.env 模板(Agent 替换 ${...} 后写入)

# open-notebook/docker.env OPEN_NOTEBOOK_ENCRYPTION_KEY=${OPEN_NOTEBOOK_ENCRYPTION_KEY} OPEN_NOTEBOOK_PASSWORD=${OPEN_NOTEBOOK_PASSWORD:-} SURREAL_USER=root SURREAL_PASS=root SURREAL_NAMESPACE=open_notebook SURREAL_DATABASE=staging

⑤ 按序执行命令(Agent 串行跑)

# 1. 创建工作目录 mkdir -p open-notebook && cd open-notebook mkdir -p surreal_data notebook_data  # 2. 生成加密密钥(首次部署才需) openssl rand -hex 32   # 复制输出,作为 OPEN_NOTEBOOK_ENCRYPTION_KEY  # 3. 写入 docker-compose.yml 与 docker.env(见上方模板)  # 4. 拉起服务 docker compose --env-file docker.env up -d  # 5. 查看状态 docker compose ps docker compose logs -f open_notebook   # Ctrl+C 退出  # 6. 配置反向代理(阿里云 SLB / Nginx) #    将公网 443 / HTTPS 流量转发到容器 8502;同步绑域名 + 申请免费 SSL 证书 #    示例 Nginx:proxy_pass http://127.0.0.1:8502;  # 7. 通过公网域名访问 UI open https://your-domain   # 先在 DNS / SLB 绑定好域名 + HTTPS 证书

⑥ 部署成功验证

# === 容器内部自检(在服务器上跑) === sleep 15 && docker compose ps curl -fsS http://127.0.0.1:8502 >/dev/null && echo "✅ 容器 UI OK" curl -fsS http://127.0.0.1:5055/health && echo "✅ 容器 API OK"  # === 公网验证(必须通过 SLB / Nginx 反代后才能跑通) === curl -fsS https://your-domain >/dev/null && echo "✅ 公网 UI OK" curl -fsS https://your-domain/health && echo "✅ 公网 /health OK"
⑦ 常见故障排查
docker pull 镜像超时(国内)/etc/docker/daemon.json 配置阿里云容器镜像加速:{"registry-mirrors": ["https://<your-id>.mirror.aliyuncs.com"]},然后 systemctl restart docker
8502 / 5055 / 8000 端口占用docker-compose.yml 修改左侧映射(例如 "8503:8502"),并同步更新 SLB / Nginx upstream 端口;公网入口仍走 https://your-domain
surrealdb 容器启动后立即退出检查 ./surreal_data 目录可写权限;若以前跑过 surreal v1,需 rm -rf surreal_data 后重启
UI 启动但加载不出模型Settings → Models → Add Provider 选择 DashScope/OpenAI/Ollama 中的任一个,填入 API Key + Base URL,点击 Test 验证联通
遗忘加密密钥无法恢复。需 docker compose downrm -rf surreal_data → 重新生成密钥后重起(已保存的 API Key 会丢失
想接 Qwen / DashScopeUI Settings → Models → Add Provider → DashScope;base_url:https://dashscope.aliyuncs.com/compatible-mode/v1;model:qwen-maxqwen3-72b
完全脱网跑安装 Ollama 后,UI Settings → Provider=Ollama,base_url=http://host.docker.internal:11434,model 选 qwen2.5 / llama3.1 等本地已拉取的型号
学术科研论文调研库 · 文献综述 · 实验记录 · 引用溯源写作
研发团队技术调研笔记 · 项目记忆库 · 内部 Wiki 替代 · API 5055 后端服务
咨询行业行业报告库 · 客户案例归档 · 会议纪要播客化 · 隐私可控
个人二脑阅读笔记 · YouTube 字幕沉淀 · 长期资产化的知识库
企业私域合规要求高的知识库 · 完全本地 + Ollama 脱网 · 数据不出机器
内容创作长文资料整合 · 双主持播客生成 · 多语言 TTS 合成

AI·RESEARCH·HUB — Open Notebook — 隐私优先的开源二脑工作台