Open Notebook 是什么?

Google NotebookLM 是 Google 推出的 AI 研究助手,允许用户上传 PDF、文档和网页,然后与这些材料进行对话、生成摘要甚至播客。但它有一个致命缺陷:你的所有数据都在 Google 云上,而且只能使用 Google 自家的 Gemini 模型。

Open Notebook 是一个完全开源、可自托管的 NotebookLM 替代方案,由开发者 lfnovo 主导开发。它的核心理念是:知识管理不应该被大厂垄断,也不应该以牺牲隐私为代价。

截至 2026 年 6 月,Open Notebook 在 GitHub 上已获得 超过 26,000 个 Star,并且每日新增数百星,是当下最热门的开源 AI 工具之一。

Open Notebook vs Google NotebookLM 核心对比

特性 Open Notebook Google NotebookLM
部署方式 Docker 自托管 / 本地运行 Google 云端(不可自托管)
数据隐私 数据完全掌握在自己手中 数据存储在 Google 服务器
AI 模型选择 18+ 提供商(OpenAI、Anthropic、Ollama、DeepSeek 等) 仅限 Google Gemini
播客生成 1-4 人自定义角色,脚本可控 固定 2 人 Deep Dive 格式
API 访问 完整 REST API(localhost:5055/docs) 无公开 API
内容转换 自定义 + 内置多种转换动作 有限的内置选项
成本 仅支付 AI 调用费用(可选本地 Ollama 免费) 免费层 + 月度订阅
扩展性 开源代码,可任意修改和集成 封闭系统,无法定制
许可证 Apache 2.0 专有软件

从对比可以看出,Open Notebook 的核心优势在于数据主权灵活性。对于注重隐私的研究者、企业开发者或需要定制化工作流的用户来说,这是比 NotebookLM 更合适的选择。

为什么选择 Open Notebook?

1. 隐私优先:你的数据你做主

在使用 NotebookLM 时,你上传的所有 PDF、笔记和对话记录都会存储在 Google 的服务器上。对于涉及商业机密、学术研究或个人敏感信息的内容,这可能是一个安全隐患。

Open Notebook 采用自托管架构,所有数据都存储在你自己的机器或服务器上。配合 SurrealDB 作为后端数据库,你可以完全控制数据的存储位置和访问权限。

2. 18+ AI 模型提供商支持

Open Notebook 通过 Esperanto 库实现了对主流 AI 提供商的统一接入:

提供商 LLM Embedding STT TTS
OpenAI
Anthropic (Claude)
Google (Gemini)
Ollama(本地)
DeepSeek
Groq
Mistral
Azure OpenAI
OpenRouter
xAI
LM Studio(兼容端点)

这意味着你可以: - 用 Ollama 本地运行 Llama 3 或 Qwen 模型,实现零 API 成本的完全离线使用 - 用 Groq 获得超高速推理(适合快速问答) - 用 DeepSeek 获得高性价比的中文理解能力 - 随时切换提供商,避免供应商锁定

3. 专业级播客生成

Open Notebook 的播客生成功能比 NotebookLM 更加灵活:

  • 1-4 名演讲者:可以自定义每个角色的声音、语气和专业知识
  • Episode Profiles:为每期播客定义主题、风格和受众
  • 脚本预览和编辑:在生成音频前可以审查和修改脚本
  • 多语言支持:支持英语、中文、日语、葡萄牙语等多种语言

相比之下,NotebookLM 的 Podcast 功能固定为两人对话(一男一女),风格单一,无法自定义。

4. 完整的 REST API

Open Notebook 提供了完整的 REST API(默认在 http://localhost:5055/docs),支持:

  • 创建和管理 Notebook
  • 上传和处理各种类型的源文件(PDF、视频、网页等)
  • 执行 AI 驱动的笔记生成和内容转换
  • 查询聊天历史和上下文

这使得 Open Notebook 可以轻松集成到现有的工作流中,例如: - 自动将 Slack/Discord 讨论归档到 Notebook - 定时抓取特定网站并生成摘要 - 与 CI/CD 管道集成,自动生成技术文档总结

快速开始:5 分钟部署 Open Notebook

Open Notebook 的官方推荐部署方式是使用 Docker Compose,整个过程只需要两条命令。

前置要求

  • Docker Desktop 已安装并运行
  • 至少 4GB 可用磁盘空间(用于 SurrealDB 数据和本地缓存)
  • 一个 AI 提供商的 API Key(或使用 Ollama 本地模型则不需要)

Step 1: 下载 docker-compose.yml

curl -o docker-compose.yml https://raw.githubusercontent.com/lfnovo/open-notebook/main/docker-compose.yml

或者手动创建 docker-compose.yml 文件:

services:
  surrealdb:
    image: surrealdb/surrealdb:v2
    command: start --log info --user root --pass root rocksdb:/mydata/mydatabase.db
    user: root
    ports:
      - "8000:8000"
    volumes:
      - ./surreal_data:/mydata
    restart: always

  open_notebook:
    image: lfnovo/open_notebook:v1-latest
    ports:
      - "8502:8502"   # Web UI
      - "5055:5055"   # REST API
    environment:
      - OPEN_NOTEBOOK_ENCRYPTION_KEY=change-me-to-a-secret-string
      - SURREAL_URL=ws://surrealdb:8000/rpc
      - SURREAL_USER=root
      - SURREAL_PASSWORD=root
      - SURREAL_NAMESPACE=open_notebook
      - SURREAL_DATABASE=open_notebook
    volumes:
      - ./notebook_data:/app/data
    depends_on:
      - surrealdb
    restart: always

重要:OPEN_NOTEBOOK_ENCRYPTION_KEY 改为一个你自己的秘密字符串,例如 my-super-secret-key-2026。这个密钥用于加密存储在数据库中的敏感信息(如 API Key)。

Step 2: 启动服务

docker compose up -d

等待 15-20 秒让 SurrealDB 初始化,然后打开浏览器访问:

http://localhost:8502

你应该能看到 Open Notebook 的登录/注册界面。

Step 3: 配置 API Key

  1. 首次访问时,系统会提示你创建管理员账户
  2. 登录后,进入 Settings → API Keys
  3. 点击 Add Credential
  4. 选择你的 AI 提供商(例如 OpenAI、Anthropic、Google 等)
  5. 粘贴 API Key 并点击 Save
  6. 点击 Test Connection 验证连接是否正常
  7. 点击 Discover Models 自动获取可用模型列表
  8. 点击 Register Models 完成注册

如果你没有 API Key,可以从以下平台获取: - OpenAI - Anthropic - Google AI Studio - Groq(有免费层)

使用 Ollama 实现零成本本地运行

如果你想完全免费且离线使用,可以搭配 Ollama:

# 安装 Ollama(macOS/Linux)
curl -fsSL https://ollama.ai/install.sh | sh

# 拉取一个轻量级模型
ollama pull llama3.2:3b

# 启动 Ollama 服务
ollama serve

然后在 Open Notebook 的 API Keys 设置中: 1. 添加凭证,提供商选择 Ollama 2. URL 填写 http://host.docker.internal:11434(Docker 内访问宿主机) 3. 测试连接并注册模型

这样你就可以在不支付任何 API 费用的情况下使用 Open Notebook 的全部功能(除了 TTS 播客生成需要外部服务)。

核心功能实战

创建第一个 Notebook

登录 Open Notebook 后,点击左上角的 + New Notebook 按钮:

  1. Notebook 名称:例如「2026 AI 技术趋势研究」
  2. 描述(可选):简要说明这个 Notebook 的用途
  3. 选择默认模型:从已注册的模型中选择一个作为默认聊天模型
  4. 点击 Create

每个 Notebook 都是独立的知识库,你可以为不同的项目创建不同的 Notebook,例如: - 「Python 学习笔记」 - 「竞品分析报告」 - 「产品需求文档库」

添加内容源(Sources)

Open Notebook 支持多种类型的内容源,这是它最强大的功能之一。

支持的源类型

类型 格式 说明
PDF 文档 .pdf 学术论文、电子书、报告
文本文件 .txt, .md 笔记、代码片段、日志
Office 文档 .docx, .pptx Word 文档、PowerPoint 演示文稿
网页链接 URL 自动抓取并提取正文内容
YouTube 视频 YouTube URL 自动转录字幕(需要配置 STT)
音频文件 .mp3, .wav 会议录音、播客(需要配置 STT)

添加 PDF 示例

  1. 在 Notebook 页面,点击 Add Source
  2. 选择 Upload File
  3. 拖拽或选择一个 PDF 文件(例如一篇 arXiv 论文)
  4. 等待处理完成(系统会自动提取文本并生成向量嵌入)
  5. 你可以在 Sources 列表中看到处理状态和字数统计

添加网页链接示例

  1. 点击 Add SourceWeb Page
  2. 粘贴 URL,例如 https://arxiv.org/abs/2401.12345
  3. Open Notebook 会自动抓取页面并提取正文
  4. 如果页面有付费墙或反爬机制,可能需要手动复制粘贴内容

与你的知识库对话(Chat)

添加完源文件后,就可以开始与 AI 对话了。

在 Notebook 页面的右侧是 Chat 面板

  1. 选择上下文范围: - 「All Sources」:基于所有源文件回答 - 「Selected Sources」:只基于选中的几个文件回答 - 「Notes Only」:只基于你手动写的笔记回答

  2. 输入问题,例如: 这篇论文的核心贡献是什么?用中文总结三个关键点。

  3. 查看引用:AI 的回答会附带来源引用,点击引用可以跳转到原文对应位置

  4. 保存为笔记:如果 AI 的回答很有价值,点击 Save as Note 将其保存为永久笔记

生成 AI 辅助笔记

除了实时对话,Open Notebook 还支持批量生成笔记:

  1. 在 Notebook 页面,点击 Generate Notes
  2. 选择要处理的源文件(可以多选)
  3. 选择笔记模板: - Summary:生成全文摘要 - Key Points:提取关键要点 - Q&A:生成常见问题及解答 - Custom:自定义提示词
  4. 点击 Generate,等待 AI 处理完成
  5. 生成的笔记会出现在左侧 Notes 面板,可以进一步编辑

内容转换(Transformations)

Content Transformations 是 Open Notebook 的高级功能,允许你对源文件执行自定义的 AI 处理动作。

例如,你可以创建一个 Transformation 来: - 将所有技术文档翻译成中文 - 从会议记录中提取行动项(Action Items) - 将长篇博客文章压缩为 500 字摘要

配置步骤: 1. 进入 Settings → Transformations 2. 点击 New Transformation 3. 定义名称和提示词模板,例如: 请将以下技术文档翻译成简体中文,保持专业术语准确: {{content}} 4. 保存后,在任何源文件上右键选择该 Transformation 即可执行

播客生成:把笔记变成音频节目

Open Notebook 的播客生成功能是其最具特色的功能之一。你可以将任何 Notebook 的内容转化为专业的多人对话播客。

配置播客角色

  1. 进入 Settings → Podcast Profiles
  2. 点击 New Profile
  3. 定义角色: - 主持人:负责引导话题、提问 - 专家 A:负责深入讲解技术细节 - 专家 B:负责提供不同视角或反驳观点 - (可选)旁白:负责开场介绍和结尾总结

每个角色可以配置: - 声音类型:男声/女声/中性 - 语速:慢/正常/快 - 语气风格:正式/轻松/幽默/严肃 - TTS 提供商:OpenAI、ElevenLabs、Google 等

生成播客

  1. 在 Notebook 页面,点击 Generate Podcast
  2. 选择要包含的源文件和笔记(系统会自动提取关键内容)
  3. 选择播客配置文件
  4. 设置时长目标(例如 10 分钟、20 分钟)
  5. 点击 Generate Script 预览脚本
  6. 审查并编辑脚本(可选)
  7. 点击 Generate Audio 开始合成音频
  8. 完成后可以下载 MP3 文件或在线播放

实际应用场景

  • 学习回顾:将一周的学习笔记转化为通勤时听的播客
  • 知识分享:为团队创建内部培训音频材料
  • 内容复用:将博客文章转化为播客发布到 Spotify/Apple Podcasts
  • 语言学习:用目标语言生成播客,练习听力

REST API 实战:自动化你的工作流

Open Notebook 提供了完整的 REST API,默认运行在 http://localhost:5055。API 文档可通过 Swagger UI 访问:http://localhost:5055/docs

认证

所有 API 请求需要在 Header 中携带 API Token:

curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  http://localhost:5055/api/notebooks

你可以在 Settings → API Keys 中生成 API Token。

常用 API 示例

1. 列出所有 Notebook

curl -H "Authorization: Bearer $TOKEN" \
  http://localhost:5055/api/notebooks

响应:

{
  "notebooks": [
    {
      "id": "nb_abc123",
      "title": "2026 AI 技术趋势研究",
      "created_at": "2026-06-07T10:00:00Z",
      "source_count": 5,
      "note_count": 12
    }
  ]
}

2. 创建新 Notebook

curl -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title": "新产品调研", "description": "竞品分析资料库"}' \
  http://localhost:5055/api/notebooks

3. 上传源文件

curl -X POST -H "Authorization: Bearer $TOKEN" \
  -F "file=@research-paper.pdf" \
  -F "notebook_id=nb_abc123" \
  http://localhost:5055/api/sources/upload

4. 发起聊天请求

curl -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "notebook_id": "nb_abc123",
    "message": "总结这篇论文的核心观点",
    "model": "gpt-4o",
    "temperature": 0.7
  }' \
  http://localhost:5055/api/chat

Python 客户端示例

import requests

BASE_URL = "http://localhost:5055/api"
TOKEN = "your_api_token_here"
headers = {"Authorization": f"Bearer {TOKEN}"}

# 获取所有 Notebook
response = requests.get(f"{BASE_URL}/notebooks", headers=headers)
notebooks = response.json()["notebooks"]

for nb in notebooks:
    print(f"Notebook: {nb['title']} ({nb['source_count']} sources)")

# 创建新 Notebook
new_nb = requests.post(
    f"{BASE_URL}/notebooks",
    headers=headers,
    json={"title": "测试 Notebook", "description": "API 测试"}
)
print(f"Created: {new_nb.json()['id']}")

通过 REST API,你可以将 Open Notebook 集成到现有的自动化工作流中,例如: - 定时从 RSS 订阅抓取最新文章并生成摘要 - 将 Slack 频道的讨论自动归档到 Notebook - 与 CI/CD 管道集成,自动生成代码变更的技术影响分析

进阶配置

密码保护公开部署

如果你将 Open Notebook 部署在公网服务器上,建议启用密码保护:

docker-compose.yml 中添加环境变量:

open_notebook:
  environment:
    - OPEN_NOTEBOOK_PASSWORD=my-secure-password

重启服务后,访问 Web UI 时需要输入密码。

自定义域名和 HTTPS

使用 Nginx 反向代理可以实现自定义域名和 HTTPS:

server {
    listen 443 ssl;
    server_name notebook.example.com;

    ssl_certificate /etc/letsencrypt/live/notebook.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/notebook.example.com/privkey.pem;

    location / {
        proxy_pass http://localhost:8502;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /api/ {
        proxy_pass http://localhost:5055/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

数据备份

Open Notebook 的数据存储在两个目录中: - ./surreal_data/:SurrealDB 数据库文件 - ./notebook_data/:上传的源文件和缓存

定期备份这两个目录即可:

# 创建备份
tar czf open-notebook-backup-$(date +%Y%m%d).tar.gz \
  surreal_data/ notebook_data/

# 恢复备份
tar xzf open-notebook-backup-20260607.tar.gz

常见问题排查

1. Docker 容器启动后无法访问 Web UI

症状: docker compose up -d 成功,但 http://localhost:8502 无法访问

解决方案:

# 检查容器状态
docker compose ps

# 查看日志
docker compose logs open_notebook
docker compose logs surrealdb

# 如果 SurrealDB 未就绪,等待 30 秒后重试
docker compose restart

2. API Key 测试连接失败

症状: 在 Settings 中测试 OpenAI/Anthropic 连接时显示错误

解决方案: - 确认 API Key 正确且未过期 - 检查网络连接(某些地区可能需要代理) - 查看 Docker 日志确认是否有 SSL 或超时错误 - 尝试在宿主机上直接调用 API 验证 Key 有效性

3. Ollama 模型无法被发现

症状: 添加 Ollama 凭证后,Discover Models 返回空列表

解决方案:

# 确认 Ollama 正在运行
ollama list

# 从 Docker 内测试连接
docker exec -it <open_notebook_container_id> curl http://host.docker.internal:11434/api/tags

# 如果连接失败,检查 Docker 网络配置
# macOS/Docker Desktop 默认支持 host.docker.internal
# Linux 可能需要额外配置

4. PDF 处理失败或内容为空

症状: 上传 PDF 后,Source 显示处理完成但字数为 0

解决方案: - 确认 PDF 不是扫描件(扫描件需要 OCR,Open Notebook 暂不支持) - 尝试用其他 PDF 阅读器打开确认文本可复制 - 检查 Docker 日志是否有内存不足错误 - 大文件(>50MB)可能需要增加 Docker 内存限制

5. 播客生成音频质量差

症状: 生成的播客人声机械感强或不自然

解决方案: - 切换到更高质量的 TTS 提供商(如 ElevenLabs) - 调整角色配置文件中的语速和语气参数 - 确保选择的 TTS 模型支持目标语言 - 检查 API 配额是否充足

总结

Open Notebook 是目前最成熟的开源 NotebookLM 替代方案,它在以下方面超越了 Google 的原生产品:

  1. 数据主权:自托管架构确保你的研究数据完全私有
  2. 模型自由:支持 18+ AI 提供商,避免供应商锁定
  3. 功能丰富:专业级播客生成、REST API、自定义转换动作
  4. 成本可控:可选本地 Ollama 实现零 API 成本
  5. 开源透明:Apache 2.0 许可证,社区驱动开发

对于注重隐私的研究者、需要定制化工作流的开发者,或者只是想摆脱大厂垄断的知识工作者来说,Open Notebook 是一个值得投入时间学习的工具。

下一步行动: - 访问 GitHub 仓库 了解最新进展 - 加入 Discord 社区 与其他用户交流 - 阅读官方文档获取更详细的教程 - 在本地部署并创建你的第一个 Notebook


本文基于 Open Notebook v1 版本编写,项目持续迭代中,具体功能以最新版本为准。