DESIGN.md 8.1 KB

簡易ナレッジベース (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)

{
  "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 回答の完全な国際化サポート
  • ビジョン機能: 画像処理に対応したマルチモーダルモデルのサポート
  • デュアルモード処理: 高速モード (テキストのみ) + 高精度モード (画像・テキスト混合)