全文検索サーバーFessの次期バージョン15.5に、LLMを使ったRAG(Retrieval-Augmented Generation)チャット機能をAIモードとして追加しました。
企業の文書検索において、ChatGPTのような対話形式で回答を得たいというニーズは増えています。一般的なRAGの実装では、ベクトル検索(Embedding検索)を使って関連文書を取得しますが、数百万から数千万件規模のドキュメントをベクトル検索で運用するには、計算リソースやインフラコストの面でハードルが高いのが現状です。Fessでベクトル検索でRAGをしたい場合は、商用サポートに相談みたいな感じかな。
FessのAIモードでは、検索部分は従来どおりの全文検索(OpenSearch)を使い、検索結果をコンテキストとしてLLMに渡すことで、RAGを実現しています。これにより、既存のFess環境にLLMを追加するだけでRAGチャットが使えるようになります。
主な機能
マルチLLMプロバイダー対応
以下のLLMプロバイダーをサポートしています。
- Ollama: ローカルで動作するLLM。APIキー不要で、プライベート環境での利用に最適
- OpenAI (GPT-4, GPT-4o等): OpenAI APIを使用
- Google Gemini: Google AI StudioのAPIを使用
デフォルトではOllamaが設定されており、ローカル環境で手軽に試すことができます。
ストリーミングレスポンス
REST APIでServer-Sent Events(SSE)によるストリーミングに対応しています。LLMからの応答をリアルタイムで表示できるため、ユーザー体験が向上します。
- 同期API:
/api/v1/chat - ストリーミングAPI:
/api/v1/chat/stream
チャットセッション管理
会話履歴を保持するセッション管理機能を実装しています。
- セッションタイムアウト: デフォルト30分(設定変更可)
- レートリミット: デフォルト10リクエスト/分(設定変更可)
チャットUI
Web UIにチャット画面を追加しました。検索結果を基にした対話形式での情報探索が可能です。
アーキテクチャ
AIモードのワークフローは以下のとおりです。
- ユーザーからの質問を受け取る
- Fessの全文検索で関連文書を検索
- 検索結果をコンテキストとしてLLMに渡す
- LLMが回答を生成してユーザーに返す
LLMクライアントは抽象化されており、LlmClientインターフェースを実装することで、他のLLMプロバイダーも追加できます。
設定
fess_config.propertiesで各種設定が可能です。
- LLMプロバイダーの選択
- APIキー
- モデル名
- レートリミット
- セッションタイムアウト
まとめ
Fess 15.5のAIモードは、全文検索とLLMを組み合わせることで、現実的なコストでRAGを実現する機能です。大規模なベクトルDBを構築せずとも、既存のFess環境を活かしてAIチャット機能を追加できます。
現時点では実験的な機能として提供しますが、フィードバックをいただきながら改善していく予定です。