mcpField
O
open-notebook

open-notebook

github.com/kalarislabs生産性7748 回インストール4 日前に更新
リポジトリ

open-notebook について

Open Notebookは、文書を中心に資料、メモ、会話を整理するセルフホスト型の研究ワークスペースです。REST API、複数のAIプロバイダー、セマンティック検索、ポッドキャスト生成を備え、自前の環境で研究資料を管理したい研究者向けです。

主な機能

  1. 01ノートブック単位で資料、メモ、会話を整理
  2. 02PDF、動画、音声、Web、Officeファイルの取り込み
  3. 03出典を示す文書チャット
  4. 04全文検索とベクトル検索
  5. 05複数話者のポッドキャスト生成
  6. 06REST APIと複数AIプロバイダーへの対応

活用シーン

  1. 01研究プロジェクトの資料整理
  2. 02出典を確認しながら文書に質問
  3. 03テキストまたは意味による資料検索
  4. 04研究資料からポッドキャストを作成

インストール

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

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill open-notebook

インストール後、Claude Code で/open-notebookを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
architecture.md
examples.md
configuration.md
api_reference.md
scripts/
notebook_management.py
source_ingestion.py
chat_interaction.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 は最新の技術スタックを使用しています:

  • バックエンド: Python と FastAPI
  • データベース: SurrealDB(ドキュメント型 + リレーショナル)
  • AI 統合: Esperanto マルチプロバイダーライブラリを使用した LangChain
  • フロントエンド: React を使用した Next.js
  • デプロイ: 永続ボリュームを使用した Docker Compose

重要事項

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

エージェントの作業手順

  1. 環境を確認します。 調査の質問、データベース、期間、採用基準を確認します。
  2. 入力を明確にします。 データまたはユーザーから、形式、識別子、パラメーターを確認します。結果に影響する値は推測せず、質問してください。
  3. まず小規模に実行します。 1 つのデータベースで絞り込んだクエリを使って検索し、結果に関連性があることを確認します。
  4. 上記の手順と参考資料を使って、タスク全体を実行します。
  5. 結果を検証します。 すべての参考文献が、解決可能な識別子を持つ実在のレコードから取得されていることを確認し、件数と検索文字列を記録します。
  6. 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未確定の事項を伝えます。
発生した場合対応
API がレート制限を返す、またはエラーを返す待機して再試行する、バッチサイズを小さくする、またはデータベースを切り替え、発生した問題を報告します。
これらの手順に記載された関数、フラグ、エンドポイントがインストール済みのバージョンにないインストール済みバージョン独自のドキュメント(help()、--help、公式ドキュメント)を確認し、適宜対応してユーザーに伝えます。API を決して捏造しないでください。
必須の入力、識別子、またはパラメーターが曖昧ユーザーに質問するか、実行前に仮定を明示します。

完全性に関するルール

  • 結果、パラメーター、識別子、引用、統計情報を決して捏造しないでください。実行または検証できない場合は、その旨を明確に伝えます。
  • 取得していない論文を要約しないでください。記憶に基づいて引用しないでください。
  • ここにあるバージョン固有の詳細は古くなっている可能性があるため、インストール済みバージョンの公式ドキュメントで確認してください。
  • 金銭が発生する、共有 GPU やクラウドのクォータを消費する、個人データや患者データに触れる、または取り消し不可能な操作を行う前に、必ず確認してください。

関連スキル

  • chroma:AI アプリケーション向けのオープンソース埋め込みデータベースです。
  • exa-search:科学・技術コンテンツに特化した、Exa を利用する Web ツールキットです。
  • langchain:エージェント、チェーン、RAG を備えた LLM 搭載アプリケーションを構築するためのフレームワークです。

コメント