mcpField
O
open-notebook

open-notebook

github.com/eturkes生産性037 回インストール18 週間前に更新
リポジトリ

open-notebook について

Open Notebookは、研究資料の整理、洞察の生成、文書との対話に使えるオープンソースのセルフホスト型ワークスペースです。REST APIと複数のAIプロバイダーに対応し、資料から複数話者のポッドキャストも作成できます。

主な機能

  1. 01ノートブックごとの資料とノートの整理
  2. 02PDF、動画、音声、ウェブページなどの処理
  3. 03全文検索とベクトル検索
  4. 04出典を示す資料ベースのチャット
  5. 05話者を設定したポッドキャスト生成
  6. 06REST APIによる管理と自動化

活用シーン

  1. 01研究テーマ別の資料整理
  2. 02文書検索と出典に基づく回答の取得
  3. 03研究資料からのポッドキャスト作成
  4. 04APIを使った資料管理の自動化

インストール

コマンドをコピーしてターミナルで実行します。

$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 の Notebook LM は Enterprise 版以外に公開 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 がインストールされていること
  • 少なくとも 1 つの 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 プロバイダーを設定する

起動後、少なくとも 1 つの AI プロバイダーを設定します。

  1. UI で 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、動画、音声ファイル、Web ページ、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 プロバイダーに対応しています。

プロバイダーLLM埋め込み音声テキスト変換テキスト音声変換
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_PASSWORDUI を保護する任意のパスワードなし

API リファレンス

REST API は http://localhost:5055/api で利用でき、インタラクティブなドキュメントは /docs で確認できます。

主要なエンドポイントグループ:

  • /api/notebooks - ノートブックの 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 統合: Esperanto マルチプロバイダーライブラリを使用した LangChain
  • フロントエンド: React を使用した Next.js
  • デプロイ: 永続ボリュームを使用した Docker Compose

重要な注意事項

  • Open Notebook のデプロイには Docker が必要です
  • AI 機能を利用するには、少なくとも 1 つの AI プロバイダーを設定する必要があります
  • API の利用料金なしで無料のローカル推論を行うには、Ollama を使用してください
  • 初回起動前に OPEN_NOTEBOOK_ENCRYPTION_KEY を設定し、再起動後も同じ値を使用してください
  • データの完全な主権を確保するため、すべてのデータは Docker ボリュームにローカル保存されます

コメント