# Simple Knowledge Base - バックエンドサービス (Server) [NestJS](https://nestjs.com/) フレームワークで構築された RAG (検索拡張生成) ナレッジベースのバックエンドシステムです。ファイルの解析、ベクトルインデックス、ハイブリッド検索、およびマルチモデル管理機能を提供します。 ## 🌟 主な特徴 - **インテリジェントなドキュメント処理**: [Apache Tika](https://tika.apache.org/) を統合し、PDF、Word、Markdown、TXT など多様な形式からのテキスト抽出をサポート。 - **効率的なベクトル検索**: [Elasticsearch](https://www.elastic.co/) をベクトルデータベースとして使用。KNN ベクトル検索と全文検索を組み合わせたハイブリッド検索 (Hybrid Search) をサポート。 - **柔軟な RAG エンジン**: LangChain をベースに構築。チャンク分割ルール (Chunking) や再ランキング (Rerank) のカスタマイズが可能。 - **マルチモデルプロバイダー**: OpenAI、Google Gemini、およびローカルデプロイの LLM モデルへの動的な接続をサポート。 - **安全な管理機能**: JWT による認証とユーザー権限管理機能を内蔵。 ## 🛠️ 技術スタック - **フレームワーク**: NestJS (TypeScript) - **データベース**: SQLite (TypeORM) - **検索エンジン**: Elasticsearch 8.x/9.x - **AI フレームワーク**: LangChain - **ライブラリ**: RxJS, Class-Validator ## 📋 前提条件 プロジェクトを実行する前に、以下の環境が整っていることを確認してください: - [Node.js](https://nodejs.org/) (v18 以上推奨) - [Yarn](https://yarnpkg.com/) - [Docker](https://www.docker.com/) & Docker Compose (インフラ実行用) ## 🚀 クイックスタート ### 1. インフラストラクチャの起動 プロジェクトのルートディレクトリ (`simple-kb/`) にある `docker-compose.yml` ファイルを使用して、Elasticsearch と Tika をクイック起動します。 ```bash # プロジェクトのルートディレクトリで実行 docker-compose up -d ``` 起動成功後: - **Elasticsearch**: ポート `19200` をリスン (コンテナの 9200 ポートをマッピング) - **Tika**: ポート `9998` をリスン ### 2. 依存関係のインストール `server` ディレクトリに移動し、パッケージをインストールします: ```bash cd server yarn install ``` ### 3. 環境設定 プロジェクトは、基本設定を環境変数のファイルに基づきます。設定(特に Elasticsearch のアドレス)が正しいことを確認してください: ```env # データベースのパス DATABASE_PATH=server/data/metadata.db # JWT シークレット JWT_SECRET=your_secure_secret # Elasticsearch 設定 (docker-compose のポートと一致させてください) ELASTICSEARCH_HOST=http://localhost:19200 ELASTICSEARCH_INDEX=knowledge_base # Tika 設定 TIKA_HOST=http://localhost:9998 # ファイルアップロードの保存パス UPLOAD_FILE_PATH=./uploads ``` ### 4. サービスの起動 ```bash # 開発モード (推奨。ホットリロード対応) yarn run start:dev # 本番モードでのビルドと実行 yarn build yarn run start:prod ``` バックエンドサービスはデフォルトで **** で実行され、API プレフィックスは `/api` です。 ## 🧪 テスト ```bash # ユニットテスト yarn run test # E2E テスト yarn run test:e2e ``` ## ⚠️ 注意事項とヒント 1. **データベースの初期化**: - 初回実行時に、TypeORM は `server/data/` ディレクトリ配下に `metadata.db` (または設定された DB) を自動的に作成します。 - 開発環境では `synchronize: true` により、テーブル構造が自動同期されます。 2. **Elasticsearch への接続**: - `Connection refused` エラーが発生した場合は、Docker コンテナが正常に動作しているか確認してください (`docker ps`)。 - サービス起動時に、`knowledge_base` という名前のインデックスが自動的に検出・作成されます。 3. **デフォルトのアカウント**: - データベースをリセットした場合は、新規ユーザー登録を行うか、既存の管理データを参照してください。通常はフロントエンドの登録機能を使用して最初のユーザーを作成することをお勧めします。 4. **ファイルの解析**: - 大容量のファイルをアップロードした場合、Tika による解析に数秒かかることがあります。フロントエンドの処理ステータスを確認しながらお待ちください。