关于 open-notebook
Open Notebook 是面向研究者的开源、可自托管研究资料管理工具,可整理来源、生成洞察并与文档对话。它提供 REST API,支持多种 AI 提供方,并可从资料生成多说话人播客。
主要功能
- 01按笔记本整理来源与笔记
- 02处理 PDF、视频、音频和网页等来源
- 03全文与向量搜索
- 04基于资料对话并引用来源
- 05生成可配置说话人的播客
- 06通过 REST API 管理与自动化
适用场景
- 01整理不同主题的研究资料
- 02搜索文档并获取带来源依据的回答
- 03将研究材料转换为播客
- 04通过 API 自动化资料管理
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ eturkes/ claude-scientific-skills --skill open-notebook安装后在 Claude Code 中输入/open-notebook确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api_reference.mdarchitecture.mdconfiguration.mdexamples.mdscripts/chat_interaction.pynotebook_management.pysource_ingestion.pytest_open_notebook_skill.py详细介绍
Open Notebook
概述
Open Notebook 是 Google NotebookLM 的开源、可自托管替代方案,可帮助研究人员整理资料、生成 AI 洞见、创建播客,并与文档进行具备上下文感知能力的对话,同时完全保护数据隐私。
与 Google NotebookLM 不同,后者除企业版外没有公开 API;Open Notebook 提供全面的 REST API,支持 16+ 个 AI 提供商,并完全运行在你自己的基础设施上。
相较于 NotebookLM 的主要优势:
- 提供完整的 REST API,支持通过程序访问和自动化
- 可选择 16+ 个 AI 提供商(不局限于 Google 模型)
- 支持由 1–4 位可自定义发言者参与的多发言者播客生成(而非限制为 2 位发言者)
- 通过自托管实现完整的数据自主权
- 开源且可全面扩展(MIT 许可证)
代码仓库: https://github.com/lfnovo/open-notebook
快速开始
前提条件
- 已安装 Docker Desktop
- 至少一个 AI 提供商的 API 密钥(或用于免费本地推理的 Ollama)
安装
使用 Docker Compose 部署 Open Notebook:
# Download the docker-compose file
curl -o docker-compose.yml https://raw.githubusercontent.com/lfnovo/open-notebook/main/docker-compose.yml
# Set the required encryption key
export OPEN_NOTEBOOK_ENCRYPTION_KEY="your-secret-key-here"
# Launch the services
docker-compose up -d
访问应用:
- 前端界面: http://localhost:8502
- REST API: http://localhost:5055
- API 文档: http://localhost:5055/docs
配置 AI 提供商
启动后,配置至少一个 AI 提供商:
- 在界面中前往 Settings > API Keys
- 添加你首选提供商(OpenAI、Anthropic 等)的凭据
- 测试连接并发现可用模型
- 注册模型,以便在整个平台中使用
也可以通过 REST API 进行配置:
import requests
BASE_URL = "http://localhost:5055/api"
# Add a credential for an AI provider
response = requests.post(f"{BASE_URL}/credentials", json={
"provider": "openai",
"name": "My OpenAI Key",
"api_key": "sk-..."
})
credential = response.json()
# Discover available models
response = requests.post(
f"{BASE_URL}/credentials/{credential['id']}/discover"
)
discovered = response.json()
# Register discovered models
requests.post(
f"{BASE_URL}/credentials/{credential['id']}/register-models",
json={"model_ids": [m["id"] for m in discovered["models"]]}
)
核心功能
笔记本
将研究内容整理到不同的笔记本中,每个笔记本都包含来源、笔记和聊天会话。
import requests
BASE_URL = "http://localhost:5055/api"
# Create a notebook
response = requests.post(f"{BASE_URL}/notebooks", json={
"name": "Cancer Genomics Research",
"description": "Literature review on tumor mutational burden"
})
notebook = response.json()
notebook_id = notebook["id"]
来源
导入各种类型的内容,包括 PDF、视频、音频文件、网页和 Office 文档。系统会处理来源,以支持全文搜索和向量搜索。
# Add a web URL source
response = requests.post(f"{BASE_URL}/sources", data={
"url": "https://arxiv.org/abs/2301.00001",
"notebook_id": notebook_id,
"process_async": "true"
})
source = response.json()
# Upload a PDF file
with open("paper.pdf", "rb") as f:
response = requests.post(
f"{BASE_URL}/sources",
data={"notebook_id": notebook_id},
files={"file": ("paper.pdf", f, "application/pdf")}
)
笔记
创建和管理与笔记本关联的笔记(由人工或 AI 生成)。
# Create a human note
response = requests.post(f"{BASE_URL}/notes", json={
"title": "Key Findings",
"content": "TMB correlates with immunotherapy response in NSCLC...",
"note_type": "human",
"notebook_id": notebook_id
})
上下文感知聊天
使用能够引用来源的 AI,与研究资料进行聊天。
# Create a chat session
session = requests.post(f"{BASE_URL}/chat/sessions", json={
"notebook_id": notebook_id,
"title": "TMB Discussion"
}).json()
# Send a message with context from sources
response = requests.post(f"{BASE_URL}/chat/execute", json={
"session_id": session["id"],
"message": "What are the key biomarkers for immunotherapy response?",
"context": {"include_sources": True, "include_notes": True}
})
搜索
使用全文搜索或向量(语义)搜索,搜索所有资料。
# Vector search across the knowledge base
results = requests.post(f"{BASE_URL}/search", json={
"query": "tumor mutational burden immunotherapy",
"search_type": "vector",
"limit": 10
}).json()
# Ask a question with AI-powered answer
answer = requests.post(f"{BASE_URL}/search/ask/simple", json={
"query": "How does TMB predict checkpoint inhibitor response?"
}).json()
播客生成
根据研究资料生成专业的多发言者播客,支持 1–4 位可自定义发言者。
# Generate a podcast episode
job = requests.post(f"{BASE_URL}/podcasts/generate", json={
"notebook_id": notebook_id,
"episode_profile_id": episode_profile_id,
"speaker_profile_ids": [speaker1_id, speaker2_id]
}).json()
# Check generation status
status = requests.get(f"{BASE_URL}/podcasts/jobs/{job['job_id']}").json()
# Download audio when ready
audio = requests.get(
f"{BASE_URL}/podcasts/episodes/{status['episode_id']}/audio"
)
内容转换
对内容应用自定义的 AI 转换,以进行摘要、提取和分析。
# Create a custom transformation
transform = requests.post(f"{BASE_URL}/transformations", json={
"name": "extract_methods",
"title": "Extract Methods",
"description": "Extract methodology details from papers",
"prompt": "Extract and summarize the methodology section...",
"apply_default": False
}).json()
# Execute transformation on text
result = requests.post(f"{BASE_URL}/transformations/execute", json={
"transformation_id": transform["id"],
"input_text": "...",
"model_id": "model_id_here"
}).json()
支持的 AI 提供商
Open Notebook 通过 Esperanto 库支持 16+ 个 AI 提供商:
| 提供商 | 大模型 | 嵌入 | 语音转文本 | 文本转语音 |
|---|---|---|---|---|
| OpenAI | 是 | 是 | 是 | 是 |
| Anthropic | 是 | 否 | 否 | 否 |
| Google GenAI | 是 | 是 | 否 | 是 |
| Vertex AI | 是 | 是 | 否 | 是 |
| Ollama | 是 | 是 | 否 | 否 |
| Groq | 是 | 否 | 是 | 否 |
| Mistral | 是 | 是 | 否 | 否 |
| Azure OpenAI | 是 | 是 | 否 | 否 |
| DeepSeek | 是 | 否 | 否 | 否 |
| xAI | 是 | 否 | 否 | 否 |
| OpenRouter | 是 | 否 | 否 | 否 |
| ElevenLabs | 否 | 否 | 是 | 是 |
| Perplexity | 是 | 否 | 否 | 否 |
| Voyage | 否 | 是 | 否 | 否 |
环境变量
Docker 部署的关键配置变量:
| 变量 | 说明 | 默认值 |
|---|---|---|
OPEN_NOTEBOOK_ENCRYPTION_KEY | **必需。**用于加密存储凭据的密钥 | 无 |
SURREAL_URL | SurrealDB 连接 URL | ws://surrealdb:8000/rpc |
SURREAL_NAMESPACE | 数据库命名空间 | open_notebook |
SURREAL_DATABASE | 数据库名称 | open_notebook |
OPEN_NOTEBOOK_PASSWORD | 可选的界面密码保护 | 无 |
API 参考
REST API 的地址为 http://localhost:5055/api,交互式文档位于 /docs。
核心端点组:
/api/notebooks- Notebook 的 CRUD 操作和来源关联/api/sources- 来源导入、处理和检索/api/notes- 笔记管理/api/chat/sessions- 聊天会话管理/api/chat/execute- 聊天消息执行/api/search- 全文和向量搜索/api/podcasts- 播客生成和管理/api/transformations- 内容转换管线/api/models- AI 模型配置和发现/api/credentials- 提供商凭据管理
如需完整的 API 参考(包括所有端点和请求/响应格式),请参阅 references/api_reference.md。
架构
Open Notebook 使用现代技术栈:
- 后端: 使用 FastAPI 的 Python
- 数据库: SurrealDB(文档型 + 关系型)
- AI 集成: LangChain 和 Esperanto 多提供商库
- 前端: 使用 React 的 Next.js
- 部署: 使用持久化卷的 Docker Compose
重要说明
- Open Notebook 需要 Docker 才能部署
- 必须至少配置一个 AI 提供商,AI 功能才能正常运行
- 如需免费使用本地推理且无需支付 API 费用,请使用 Ollama
- 必须在首次启动前设置
OPEN_NOTEBOOK_ENCRYPTION_KEY,并确保每次重启时保持一致 - 所有数据均存储在 Docker 卷中,实现完整的数据主权