自分用保存のため
On-premise Agentic Search System
社内ドキュメント(PDF, Markdown, Text)を対象とした、オンプレミス完結型の AI 検索(RAG)エージェントシステムです。外部クラウドにデータが送信されることはありません。
構成アーキテクチャ
- 推論 / Embedding サーバー: LM Studio (OpenAI互換API)
- エージェントフレームワーク: LangGraph (ReActパターン)
- ベクトルDB: Qdrant (Local Storageモード)
- APIサーバー: FastAPI (OpenAI互換インターフェース)
-
フロントエンドチャットUI: Open WebUI
主要機能
- リアルタイム・ストリーミング: AI の回答を逐次表示し、待ち時間を短縮します。
- パフォーマンス統計: トークン生成速度 (tokens/s) や生成時間を計測・表示します。
- 正確なソース参照: 引用元ファイルを特定し、ダウンロードリンクを自動生成します。
- 暗号化 PDF 対応: パスワード保護や特定の暗号化アルゴリズムが使用された PDF も読み込み可能です。
必要条件
- OS: Windows (WSL不要)
- Python: 3.11 必須
-
LM Studio: ダウンロードはこちら
OpenAI互換APIが可能であればベースURLの調整で動くはず
セットアップ
1. リポジトリの準備
git clone https://github.com/yourusername/rag-test.git
cd rag-test
2. Agent サーバー環境の構築 (Python 3.11)
py -3.11 -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
3. Open WebUI 環境の構築 (Python 3.11)
py -3.11 -m venv .venv-webui
.venv-webui\Scripts\activate
pip install open-webui
使用方法
Step 1: LM Studio の起動
- LM Studio を開き、LLM (例: Qwen3.5-9B) と Embedding (例: bge-m3) の両方をロードします。
- サーバーを起動します (デフォルト:
localhost:1234)。 -
config.py内のLLM_MODELとEMBEDDING_MODELが LM Studio 上の Identifier と一致していることを確認してください。
Step 2: ドキュメントの取り込み (Ingest)
-
docs/フォルダに取り込みたいドキュメントを配置します。 - 重要: Agent サーバーが起動している場合は、一度停止させてください(後述)。
- 以下のコマンドを実行します:
.venv\Scripts\activate python ingest.py
Step 3: 各サーバーの起動
-
Agent サーバー:
start_agent.batを実行します (ポート 8000)。 -
Open WebUI:
start_webui.batを実行します (ポート 3000)。
Step 4: Open WebUI の連携設定
-
http://localhost:3000にアクセスし、管理者アカウントを作成します。 -
Settings > Connections > OpenAI API に以下を設定します:
-
URL:
http://localhost:8000/v1 -
API Key:
dummy
-
URL:
- モデル選択から
agentic-searchを選んでチャットを開始します。
運用上の注意点
-
Qdrant のストレージロック:
ローカルモードでの Qdrant は、同時に1つのプログラムしかデータベースにアクセスできません。ingest.pyを実行する際は、必ずserver.py(Agentサーバー) を停止させてください。 停止させずに実行するとRuntimeErrorが発生します。 -
統計情報の表示:
Open WebUI で tokens/s 等を表示するには、UI 設定のSettings > Interface > Always show details(常に詳細を展開) をオンにすることを推奨します。
ライセンス
このプロジェクトは MIT ライセンスの下で公開されています。詳細は LICENSE ファイルを参照してください。
謝辞
このプロジェクトは以下のオープンソースソフトウェアを活用して構築されています: