# 簡易ナレッジベース (Simple Knowledge Base) - システム設計ドキュメント ## 1. プロジェクト概要 本プロジェクトは、React + NestJS をベースに開発されたフルスタックのナレッジベースQ&Aシステム(RAG - Retrieval-Augmented Generation)です。 ユーザーは多様な形式のドキュメントをアップロードし、チャンク分割やインデックス設定をカスタマイズした上で、大規模言語モデル(LLM)を利用してナレッジベースに基づいた質問応答を行うことができます。 --- ## 2. コアアーキテクチャ設計 ### 2.1 技術スタック - **フロントエンド**: React 19 + TypeScript + Vite + Tailwind CSS - **バックエンド**: NestJS + LangChain + TypeORM - **データベース**: SQLite (ユーザー、モデル設定、ナレッジベースのメタデータ) - **ベクトルストレージ**: Elasticsearch - **ファイル処理**: Apache Tika (高速モード) + Vision Pipeline (高精度モード) - **認証**: JWT - **ドキュメント変換**: LibreOffice + ImageMagick ### 2.2 システムアーキテクチャ ``` ユーザー -> Reactフロントエンド -> NestJSバックエンド -> SQLite/Elasticsearch | v LangChain Agent | v 大言語モデル (LLM) 高精度モードのプロセス: PDF/Word/PPT -> LibreOffice -> PDF -> ImageMagick -> Vision Model -> 構造化コンテンツ ``` --- ## 3. コア機能モジュール ### 3.1 ユーザー認証システム - **JWT 認証**: ユーザー名/パスワードに基づくログインシステム - **ユーザー管理**: ユーザー登録、パスワード変更をサポート - **権限制御**: ユーザーデータの隔離。各ユーザーに独立したナレッジベースを提供 - **管理画面**: 統合された設定モーダルによるユーザー管理(作成/リスト表示) ### 3.2 モデル設定管理 - **マルチプロバイダー対応**: - **OpenAI 互換**: OpenAI API および互換インターフェース(DeepSeek, Claude など)に対応 - **Google Gemini**: ネイティブ SDK によるサポート - **モデルタイプ**: - **LLM**: 対話生成モデル - **Embedding**: ベクトル化モデル - **Rerank**: 再ランキングモデル - **ユーザーカスタマイズ**: ユーザーが独自の API キーとモデルパラメータを設定可能 - **ビジョンサポート**: モデルが画像処理に対応しているかどうかのフラグ管理 - **統合管理**: 設定モーダルの「モデル管理」タブで一括管理 ### 3.3 ナレッジベース管理 - **ファイルアップロード**: PDF、ドキュメント、画像など多様な形式に対応 - **デュアルモード処理**: - **高速モード**: Apache Tika を使用したテキスト抽出 - **高精度モード**: Vision Pipeline を使用した画像・テキスト混合処理 - **インテリジェント・チャンキング**: チャンクサイズとオーバーラップを調整可能 - **ベクトルインデックス**: ユーザーが選択した Embedding モデルによるベクトル化 - **ステータス管理**: ファイル処理状況の追跡(待機中、インデックス中、完了、失敗) ### 3.4 RAG 質問応答システム - **インテリジェント検索**: - キーワード抽出とクエリの最適化 - ハイブリッド検索(ベクトル検索 + 全文検索) - 類似度しきい値によるフィルタリング - **ストリーミング生成**: - Server-Sent Events (SSE) によるストリーミング出力 - 処理の進捗をリアルタイムに表示 - 生成コンテンツを1文字ずつ表示 - **引用追跡**: - 回答の出典ファイルを表示 - 関連するドキュメントセグメントを表示 - 類似度スコアの表示 ### 3.5 多言語サポート - **インターフェースの国際化**: 日本語、中国語、英語に対応 - **インテリジェント回答**: ユーザーの言語設定に基づいた AI による回答 - **言語設定の永続化**: ユーザーの選択した言語を自動保存 --- ## 4. データモデル設計 ### 4.1 SQLite テーブル **ユーザー表 (users)** - id, username, password_hash, is_admin, created_at **モデル設定表 (model_configs)** - id, user_id, name, provider, model_id, base_url, api_key, type, supports_vision **ナレッジベースファイル表 (knowledge_bases)** - id, user_id, name, original_name, storage_path, size, mimetype, status, created_at **ユーザー設定表 (user_settings)** - user_id, selected_llm_id, selected_embedding_id, temperature, max_tokens, top_k, similarity_threshold, language ### 4.2 Elasticsearch インデックス **ナレッジベース・チャンクインデックス (knowledge_base_chunks)** ```json { "chunk_id": "string", "knowledge_base_id": "string", "user_id": "string", "file_name": "string", "content": "text", "embedding": "dense_vector[1536]", "chunk_index": "integer", "metadata": "object" } ``` --- ## 5. API エンドポイント設計 ### 5.1 認証 - `POST /auth/login` - ログイン - `POST /auth/register` - ユーザー登録 - `POST /auth/change-password` - パスワード変更 ### 5.2 モデル管理 - `GET /model-configs` - モデル設定の取得 - `POST /model-configs` - モデル設定の作成 - `PUT /model-configs/:id` - モデル設定の更新 - `DELETE /model-configs/:id` - モデル設定の削除 ### 5.3 ナレッジベース - `POST /upload` - ファイルアップロード - `GET /knowledge-bases` - ファイル一覧の取得 - `DELETE /knowledge-bases/:id` - ファイルの削除 - `DELETE /knowledge-bases/clear` - ナレッジベースの全削除 ### 5.4 チャット - `POST /chat/stream` - ストリーミングチャット(SSE) ### 5.5 ユーザー設定 - `GET /user-settings` - 設定の取得 - `PUT /user-settings` - 設定の更新 --- ## 6. コアフロー ### 6.1 ファイル処理フロー **高速モード**: ``` アップロード → メタデータ保存 → Tikaテキスト抽出 → チャンク分割 → ベクトル化 → ESインデックス → ステータス更新 ``` **高精度モード**: ``` アップロード → LibreOffice変換 → PDF画像化 → Vision分析 → 構造化コンテンツ → ベクトル化 → ESインデックス ``` ### 6.2 RAG 質問応答フロー ``` ユーザーの質問 → キーワード抽出 → ハイブリッド検索 → 類似度フィルタリング → プロンプト構築 → LLM生成 → ストリーミング出力 → 引用表示 ``` --- ## 7. デプロイ構成 ### 7.1 開発環境 - フロントエンド: Vite 開発サーバー (ポート 5173) - バックエンド: NestJS 開発サーバー (ポート 3000) - Elasticsearch: Docker コンテナ (ポート 9200) - Apache Tika: Docker コンテナ (ポート 9998) ### 7.2 本番環境 - Docker Compose を使用したコンテナ化デプロイ - Nginx によるリバースプロキシと負荷分散 - SSL 証明書の設定 --- ## 8. 特徴的な機能 - ✅ **ユーザー分離**: ユーザーごとに独立したモデル設定とナレッジベースを保持 - ✅ **ストリーミング体験**: 処理状況と生成内容をリアルタイム表示 - ✅ **インテリジェント検索**: キーワード抽出 + ハイブリッド検索 + 類似度フィルタリング - ✅ **引用追跡**: 回答の根拠となるソースと関連セグメントを明確に表示 - ✅ **マルチモデル対応**: OpenAI 互換インターフェース + Gemini ネイティブサポート - ✅ **柔軟な設定**: ユーザー独自の API キーと推論パラメータのカスタマイズ - ✅ **多言語対応**: UI と AI 回答の完全な国際化サポート - ✅ **ビジョン機能**: 画像処理に対応したマルチモーダルモデルのサポート - ✅ **デュアルモード処理**: 高速モード (テキストのみ) + 高精度モード (画像・テキスト混合)