# 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
```

バックエンドサービスはデフォルトで **<http://localhost:13000>** で実行され、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 による解析に数秒かかることがあります。フロントエンドの処理ステータスを確認しながらお待ちください。
