mcpField
O
open-notebook

open-notebook

github.com/eturkes生产力037 次安装18 周前更新
代码仓库

关于 open-notebook

Open Notebook 是面向研究者的开源、可自托管研究资料管理工具,可整理来源、生成洞察并与文档对话。它提供 REST API,支持多种 AI 提供方,并可从资料生成多说话人播客。

主要功能

  1. 01按笔记本整理来源与笔记
  2. 02处理 PDF、视频、音频和网页等来源
  3. 03全文与向量搜索
  4. 04基于资料对话并引用来源
  5. 05生成可配置说话人的播客
  6. 06通过 REST API 管理与自动化

适用场景

  1. 01整理不同主题的研究资料
  2. 02搜索文档并获取带来源依据的回答
  3. 03将研究材料转换为播客
  4. 04通过 API 自动化资料管理

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/eturkes/claude-scientific-skills --skill open-notebook

安装后在 Claude Code 中输入/open-notebook确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api_reference.md
architecture.md
configuration.md
examples.md
scripts/
chat_interaction.py
notebook_management.py
source_ingestion.py
test_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

访问应用:

配置 AI 提供商

启动后,配置至少一个 AI 提供商:

  1. 在界面中前往 Settings > API Keys
  2. 添加你首选提供商(OpenAI、Anthropic 等)的凭据
  3. 测试连接并发现可用模型
  4. 注册模型,以便在整个平台中使用

也可以通过 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_URLSurrealDB 连接 URLws://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 卷中,实现完整的数据主权

评论

支持 Markdown