mcpField
O
open-notebook

open-notebook

github.com/crazymsn生産性2338 回インストール22 週間前に更新
リポジトリ

open-notebook について

Open Notebook は、研究者が資料を整理し、AI チャットや検索、コンテンツ生成を行うためのオープンソースのセルフホスト型ワークスペースです。REST API と複数の AI プロバイダーに対応し、データを自分の環境に保存できます。

主な機能

  1. 01ノートブックごとの資料とメモの整理
  2. 02PDF、ウェブページ、動画、音声の取り込み
  3. 03出典を示すコンテキストチャット
  4. 04全文検索とベクトル検索
  5. 05複数話者ポッドキャストの生成
  6. 06REST API による自動化

活用シーン

  1. 01研究テーマごとの文献や資料の整理
  2. 02出典を確認しながら研究資料について質問
  3. 03研究資料を複数話者のポッドキャストに変換

インストール

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

$npx skills add https://github.com/crazymsn/academic-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 ボリュームにローカル保存されます

コメント