論文を自分の知識資産に変える パーソナルナレッジエージェント
論文を"読むだけ"で終わらせない。 概念と関係性を抽出し、自分だけの知識資産として再構築する。 AIエージェントと対話しながら、理解を深め、学びを加速する。
PaperForgeは次のような場面で価値を発揮します。
- 大学院生が関連研究を短時間で俯瞰したいとき
- 新しい分野の論文を体系的に学びたいとき
- 複数論文の差分を整理したいとき
- 知識の抜け漏れを可視化したいとき
- 試験・発表前に理解度を確認したいとき
PaperForgeは以下の機能群により、論文理解のワークフローをエンドツーエンドで支援します。
| 機能 | 説明 | Status |
|---|---|---|
| 📄 論文アップロード | PDFをアップロードして概念・関係性を自動抽出。起承転結の要約を日本語で生成 | Stable |
| 🤖 マルチエージェントパイプライン | アップロード後、Extraction → Graph → Tutor Agent が自動連携。SSEストリーミングでリアルタイム進捗表示 | Stable |
| 🕸️ ナレッジグラフ | 抽出した概念を階層構造で可視化。探索モードで接続概念をハイライト | Stable |
| 🔍 セマンティック検索 | ベクトル埋め込みによる意味的類似検索。類似概念の発見と関係性の自動提案 | Stable |
| 📅 タイムラインビュー | 論文の発表年に基づいてX軸に時系列配置。研究の発展を時間軸で俯瞰 | Stable |
| 🎨 論文別色分け | 各論文に固有の色を割り当て、概念の由来論文を視覚的に区別 | Stable |
| 📚 論文ライブラリ | 保存した論文の一覧管理。要約・抽出概念・起承転結をいつでも確認 | Stable |
| 🔀 論文比較 | 最大3本の論文を並列比較(カード/テーブル)。共通概念のハイライト | Stable |
| 🤖 AI比較分析 | 論文の優劣・手法・貢献度に加え、引用関係の推定・時系列の発展を自動分析 | Stable |
| 💬 学習チャット | ADK Tutor Agentと対話して知識を深める。クイックリプライで直感的に操作 | Stable |
| 🗺️ 学習パス | 概念の依存関係を考慮した最適な学習順序を自動生成。進捗も永続化 | Stable |
| ❓ 理解度クイズ | 登録した概念から4択クイズを自動生成。チャット経由では3段階の難易度指定も可能 | Stable |
| 🔥 Firestore永続化 | ナレッジグラフと論文データをFirestoreに保存。デバイス間同期に対応 | Stable |
| 📡 SSEストリーミング | パイプライン実行をSSE(Server-Sent Events)でリアルタイム配信。Activity Panelに1件ずつ表示 | Stable |
| ⚙️ 設定・データ管理 | API接続設定、Firestoreステータス表示、JSON形式でエクスポート/インポート、UI内確認ダイアログ | Stable |
PaperForge の実際の動作を 3 分で紹介したデモ動画です。
YouTube: https://youtu.be/zGGpBHW7ENM
- 論文アップロード
- 日本語訳、自動解析
- マルチエージェントパイプライン
- ナレッジ抽出、ナレッジグラフ
- セマンティック検索
- 学習AIチャット機能
- 学習パス
- クイズAI生成
| 指標 | 従来ワークフロー | PaperForge利用時 |
|---|---|---|
| 論文1本の概念整理 | 60〜90 分 | 5〜10 分(自動抽出) |
| 3本の横断比較 | 半日〜1日 | 数分(AI比較分析) |
| 知識の抜け漏れ発見 | 自己申告のみ | クイズ+グラフで定量化 |
※ 上記は一般的な英語論文(機械学習分野)を想定した目安であり、PDFレイアウトや分野・専門性により変動します。
Novelty — 何が新しいか: 既存ツール(Connected Papers, Elicit 等)が 論文同士の引用ネットワーク に留まるのに対し、PaperForge は 論文内部の"概念"を自動抽出し、マルチエージェントパイプラインで概念レベルの横断・比較・セマンティック検索・学習支援まで一気通貫で行う 点が新しい。
| 観点 | PaperForge | Connected Papers | Elicit | Research Rabbit |
|---|---|---|---|---|
| 概念自動抽出 | ◎ | △ | △ | △ |
| ナレッジグラフ | ◎ | ○ | × | ○ |
| セマンティック検索 | ◎ | × | ○ | × |
| マルチエージェント連携 | ◎ | × | × | × |
| 論文比較(AI分析) | ◎ | × | △ | × |
| 学習パス生成 | ◎ | × | × | × |
| 理解度クイズ | ◎ | × | × | × |
| 学習チャット(Tutor Agent) | ◎ | × | ○ | × |
| 日本語対応 | ◎ | △ | △ | △ |
┌─────────────────────────────────────────────────────────────┐
│ Frontend(React + TypeScript + Vite) │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ Home │ │Papers│ │Graph │ │ Path │ │ Quiz │ │ Chat │ │
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
│ Zustand(永続化ストア)+ Agent Activity Panel │
└─────────────────────┬───────────────────────────────────────┘
│ REST API + SSE(Server-Sent Events)
┌─────────────────────▼───────────────────────────────────────┐
│ Backend(FastAPI + Cloud Run) │
│ /papers /graph /chat /learning-path /adk /agents │
└─────────────────────┬───────────────────────────────────────┘
│
┌─────────────────────▼───────────────────────────────────────┐
│ ADK(Agent Development Kit) │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Orchestrator(Root Agent) │ │
│ │ 論文テキスト → 抽出 → 保存 → 学習支援 を統括 │ │
│ └──────────┬──────────┬──────────┬─────────────────────┘ │
│ │ │ │ │
│ ┌──────────▼───┐ ┌────▼────────┐ ┌▼─────────────┐ │
│ │ Extraction │ │ Graph │ │ Tutor │ │
│ │ Agent │ │ Agent │ │ Agent │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ FunctionTool │ FunctionTool │ FunctionTool │
│ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ │
│ │ 概念抽出 │ │ グラフ操作 │ │ 説明/クイズ │ │
│ │ 関係抽出 │ │ Firestore │ │ 学習パス │ │
│ └─────────────┘ └──────┬──────┘ └─────────────┘ │
└─────────────────────────┼───────────────────────────────────┘
│
┌─────────────────┼─────────────────┐
│ │ │
┌───────▼───────┐ ┌───────▼───────┐ ┌───────▼───────┐
│ Vertex AI │ │ Firestore │ │ Vector Store │
│ Gemini 2.0 │ │ 概念・関係 │ │ Embeddings │
│ Flash │ │ 論文データ │ │ セマンティック │
└───────────────┘ └───────────────┘ └───────────────┘
Vector Store は現在 自前Embeddings + コサイン類似度 で実装。将来的に Vertex AI Vector Search への差し替えも検討中。
論文アップロード後、ADK の Orchestrator(Root Agent)が 3つのサブエージェントを自動連携させます。
📄 論文PDF → [Extraction Agent] → [Graph Agent] → [Tutor Agent] → 📊 学習支援
│ │ │
▼ ▼ ▼
概念・関係性を Firestoreに 重要概念の
Geminiで抽出 ナレッジグラフ保存 やさしい説明を生成
| エージェント | 役割 | FunctionTools |
|---|---|---|
| Extraction Agent | 論文テキストから概念・関係性・要約を抽出 | extract_concepts, extract_relations |
| Graph Agent | 抽出結果をFirestoreのナレッジグラフに保存・検索 | add_concept, add_relation, search_concepts, get_related_concepts |
| Tutor Agent | 概念の説明、クイズ生成、学習パス提案 | explain_concept, generate_quiz, generate_learning_path, suggest_related_papers |
パイプライン実行中のエージェント活動は SSE(Server-Sent Events) でフロントエンドの Agent Activity Panel に1件ずつリアルタイムストリーミング表示されます。POST /api/agents/start でバックグラウンド実行を開始し、GET /api/agents/stream/{session_id} でアクティビティを受信します。
[Activity Panel の表示例]
🔬 Extraction Agent — extract_concepts を実行中... [thinking]
🔬 Extraction Agent — 8個の概念と5個の関係性を抽出 [completed]
📊 Graph Agent — add_concept「Transformer」を保存 [completed]
📊 Graph Agent — add_relation を保存 [completed]
🎓 Tutor Agent — explain_concept を実行中... [thinking]
🎓 Tutor Agent — 重要概念の説明を生成 [completed]
| レイヤー | 技術 | 役割 |
|---|---|---|
| フロントエンド | React + TypeScript + Vite | SPA UI |
| 状態管理 | Zustand (persist) | グラフ・論文データのローカル永続化 |
| 可視化 | react-force-graph-2d + Canvas API | ナレッジグラフ描画(階層/タイムラインレイアウト) |
| バックエンド | FastAPI + Uvicorn | REST API + SSE ストリーミング |
| データベース | Firestore | 概念・関係性・論文データの永続化(デバイス間同期) |
| ベクトル検索 | Embeddings + コサイン類似度 | セマンティック検索・類似概念発見・関係性提案 |
| エージェント | Google ADK (Runner + FunctionTool) | マルチエージェントオーケストレーション |
| AI | Vertex AI (Gemini 2.0 Flash) | 概念抽出・対話・推論 |
| デプロイ | Docker + Cloud Run (asia-northeast1) | コンテナデプロイ |
paperforge/
├── readme.md
├── Dockerfile # Cloud Run向けマルチステージビルド
├── pyproject.toml # Python依存関係
├── .env.example # 環境変数テンプレート
├── agents/ # ADKエージェント
│ ├── extraction/ # 概念抽出Agent(Gemini APIで概念・関係性を抽出)
│ │ ├── agent.py
│ │ └── tools.py # extract_concepts, extract_relations
│ ├── graph/ # グラフ操作Agent(Firestoreへの保存・検索)
│ │ ├── agent.py
│ │ └── tools.py # add_concept, add_relation, search_concepts
│ ├── tutor/ # 学習支援Agent
│ │ ├── agent.py # ADK Agent定義(gemini-2.0-flash)
│ │ └── tools.py # explain_concept, generate_quiz, etc.
│ ├── runner.py # ADK Runner ラッパー
│ └── orchestrator.py # Root Agent(3エージェントをオーケストレーション)
├── api/ # FastAPI バックエンド
│ ├── main.py # エントリーポイント
│ ├── db/
│ │ ├── firestore.py # Firestore連携(概念・関係・論文の永続化)
│ │ └── vectors.py # ベクトルストア(セマンティック検索用)
│ └── routers/
│ ├── papers.py # 論文アップロード・概念抽出
│ ├── graph.py # グラフCRUD + セマンティック検索 + 関係性提案
│ ├── chat.py # チャット(Function Calling)
│ ├── adk_chat.py # ADK Runner統合チャット
│ ├── agents.py # エージェント管理 + パイプライン実行
│ └── learning_path.py # 学習パス生成
├── frontend/ # React フロントエンド
│ └── src/
│ ├── App.tsx # ルーティング
│ ├── pages/
│ │ ├── HomePage.tsx # 論文アップロード・要約表示・パイプライン実行
│ │ ├── PapersPage.tsx # 論文ライブラリ・比較・AI分析
│ │ ├── GraphPage.tsx # ナレッジグラフ(階層/タイムライン、セマンティック検索)
│ │ ├── ChatPage.tsx # ADK Tutor Agentチャット
│ │ ├── LearningPathPage.tsx # 学習パス
│ │ ├── QuizPage.tsx # 理解度クイズ
│ │ └── SettingsPage.tsx # 設定・データ管理
│ ├── stores/
│ │ ├── graphStore.ts # 概念・関係の状態管理
│ │ ├── paperStore.ts # 論文データの状態管理
│ │ └── learningPathStore.ts # 学習パスの状態管理(進捗永続化)
│ ├── components/
│ │ ├── Layout.tsx # 共通レイアウト
│ │ └── AgentActivity.tsx # エージェント活動表示
│ └── api/
│ └── client.ts # APIクライアント
└── fine-tuning/ # Gemma LoRA関連
├── train_lora.py
└── convert_scierc.py
cp .env.example .env
# .env を編集して API キーを設定Option 1: Gemini API キー(開発用)
GOOGLE_API_KEY=your-api-key-here
Option 2: Vertex AI(本番環境・推奨)
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_GENAI_USE_VERTEXAI=TRUE
# Python仮想環境
python -m venv .venv
source .venv/bin/activate
# 依存関係インストール
pip install -e .
# サーバー起動
uvicorn api.main:app --reload --port 8001cd frontend
npm install
npm run devdocker build -t paperforge .
docker run -p 8080:8080 --env-file .env paperforgegcloud run deploy paperforge \
--source . \
--project=your-project-id \
--region=asia-northeast1 \
--set-env-vars="GOOGLE_GENAI_USE_VERTEXAI=TRUE,GOOGLE_CLOUD_PROJECT=your-project-id,GOOGLE_CLOUD_LOCATION=us-central1" \
--allow-unauthenticatedNote: Cloud Run は
asia-northeast1にデプロイしますが、Vertex AI (Gemini) の呼び出し先はus-central1です(モデル提供リージョンの制約)。
- URL: https://paperforge-740219973201.asia-northeast1.run.app
- プラットフォーム: Cloud Run (
asia-northeast1) - AI: Vertex AI / Gemini 2.0 Flash (
us-central1)
- デプロイURL: https://paperforge-740219973201.asia-northeast1.run.app
- GitHubリポジトリ
- Zenn記事(4000〜6000字)
- プロジェクト概要
- システムアーキテクチャ図
- デモ動画(3分以内、YouTube)— https://youtu.be/zGGpBHW7ENM
- 概念抽出の精度は Gemini 2.0 Flash の出力に依存します。専門性の高い論文では手動補正が必要な場合があります
- Firestore 未設定の場合、データはブラウザの LocalStorage(Zustand persist)に保存されます。Firestore を設定するとデバイス間でデータが同期されます
- Vertex AI の利用には Google Cloud の課金アカウントが必要です
- マルチエージェントパイプラインは ADK Runner を使用しており、初回実行時にセッション初期化のための遅延が発生する場合があります
MIT License
y.ori