概要
Fess は、大規模言語モデル(LLM)を活用したAI検索モード(RAG: Retrieval-Augmented Generation)機能をサポートしています。 この機能により、ユーザーは検索結果を基にしたAIアシスタントとの対話形式で情報を取得でき、自然言語による質問に対して社内の検索インデックスから引用元付きで直接回答します。
LLM連携機能は fess-llm-* プラグインとして提供されます。利用するLLMプロバイダーに対応するプラグインを導入してください。
AI検索モードは、専用のベクトルインデックスではなく Fess の標準の検索パイプライン(Rank Fusion)を通じてドキュメントを取得し、 デフォルトではキーワード(BM25)検索が使用されます。この標準パイプラインを再利用しているため、Semantic Searchプラグインを 導入・設定すると、そのsemantic(ベクトル)サーチャーはAI検索モードの検索ステップを含むすべての検索でRank Fusionに参加します。 AI検索モード専用の設定は不要です。詳細は ハイブリッド検索とランクフュージョン(セマンティック+キーワード) を参照してください。
対応プロバイダー
Fess は以下のLLMプロバイダーをサポートしています。
| プロバイダー | 設定値 | プラグイン | 説明 |
|---|---|---|---|
| Ollama | ollama | fess-llm-ollama | ローカル環境で動作するオープンソースのLLMサーバー。Llama、Mistral、Gemmaなどのモデルを実行可能。デフォルト設定。 |
| OpenAI | openai | fess-llm-openai | OpenAI社のクラウドAPI。GPT-4などのモデルを利用可能。 |
| Google Gemini | gemini | fess-llm-gemini | Google社のクラウドAPI。Geminiモデルを利用可能。 |
プロバイダー比較
プロバイダー( rag.llm.name ) | デフォルトモデル | エンドポイント | 認証 | データの保存場所 |
|---|---|---|---|---|
Ollama( ollama ) | gemma4:e4b | http://localhost:11434 | なし(ローカル) | ローカル / セルフホスト — 質問とドキュメントはホスト内に留まります |
OpenAI( openai ) | gpt-5-mini | https://api.openai.com/v1 | Authorization: Bearer ( rag.llm.openai.api.key ) | クラウド — 質問と取得されたドキュメントがOpenAIに送信されます |
Google Gemini( gemini ) | gemini-3.1-flash-lite-preview | https://generativelanguage.googleapis.com/v1beta | x-goog-api-key ( rag.llm.gemini.api.key ) | クラウド — 質問と取得されたドキュメントがGoogleに送信されます |
注釈
rag.llm.name が未設定の場合、既定では Ollama クライアントのみが有効です。使用するプロバイダーを導入し rag.llm.name で選択してください。
プラグイン導入
LLM機能はプラグインとして提供されます。利用するプロバイダーに対応する fess-llm-{provider} プラグインのJARファイルをプラグインディレクトリに配置する必要があります。
例として、OpenAIプロバイダーを利用する場合は fess-llm-openai-15.7.0.jar をダウンロードし、以下のディレクトリに配置します。
配置後、 Fess を再起動するとプラグインが読み込まれます。
アーキテクチャ
AI検索モード機能は以下のフローで動作します。
ユーザー入力: ユーザーがチャットインターフェースで質問を入力
意図解析(intent): LLMがユーザーの質問を分析し、検索キーワードを抽出
検索実行(search): Fess の検索エンジンで関連ドキュメントを検索
結果評価(evaluate): LLMが検索結果の関連性を評価し、最適なドキュメントを選択
クエリ再生成(必要に応じて): 検索結果が得られない場合、または評価で関連するドキュメントが見つからない場合、LLMがクエリを再生成して再検索
コンテンツ取得(fetch): 選択されたドキュメントの本文を取得
回答生成(answer): 取得したドキュメントを基にLLMが回答を生成(Markdownレンダリング対応)
ソース引用: 回答には参照元ドキュメントへのリンクが含まれる
注釈
内部処理は intent 、 search 、 evaluate 、 fetch 、 answer の5つのフェーズで構成され、各フェーズの進行状況はストリーミング(SSE)でクライアントに通知されます。
基本設定
LLM機能の設定は、以下の2つの場所で行います。
管理画面の全般設定 / system.properties
管理画面の全般設定、または system.properties で設定します。LLMプロバイダーの選択に使用します。
fess_config.properties
app/WEB-INF/conf/fess_config.properties で設定します。AI検索モードの有効化、セッション・履歴関連の設定に加え、プロバイダー固有の設定(接続先URLやAPIキー、生成パラメーターなど)もこのファイルに記述します。
各プロバイダーの詳細な設定については、以下のドキュメントを参照してください。
Ollamaの設定(ローカルLLM / RAG) - Ollamaの設定
OpenAIの設定(AI検索 / RAG) - OpenAIの設定
Google Geminiの設定(AI検索 / RAG) - Google Geminiの設定
共通設定
すべてのLLMプロバイダーで共通して使用される設定項目です。これらは fess_config.properties で設定します。
コンテキスト設定
| プロパティ | 説明 | デフォルト |
|---|---|---|
rag.chat.context.max.documents | コンテキストに含める最大ドキュメント数 | 5 |
rag.chat.content.fields | ドキュメントから取得するフィールド | title,url,content,doc_id,content_title,content_description |
注釈
コンテキストの最大文字数( context.max.chars )はプロバイダーおよびプロンプトタイプごとの設定に変更されました。 fess_config.properties で rag.llm.{provider}.{promptType}.context.max.chars として設定してください。
システムプロンプト
システムプロンプトはプロパティファイルではなく、各プラグインのDI XMLファイルで管理されます。
各 fess-llm-* プラグインのJARファイル内に含まれる fess_llm++.xml ファイルでシステムプロンプトが定義されています。このファイルはプラグインJARにバンドルされたクラスパスリソースであるため、プロンプトをカスタマイズするにはJAR内のDI XMLファイルを編集する必要があります。
可用性チェック
| プロパティ | 説明 | デフォルト |
|---|---|---|
rag.llm.{provider}.availability.check.interval | LLMの可用性をチェックする間隔(秒)。0で無効化 | 60 |
この設定は fess_config.properties で行います。 Fess は定期的にLLMプロバイダーの接続状態を確認します。
セッション管理
チャットセッションに関する設定です。これらは fess_config.properties で設定します。
| プロパティ | 説明 | デフォルト |
|---|---|---|
rag.chat.session.timeout.minutes | セッションのタイムアウト時間(分) | 30 |
rag.chat.session.max.size | セッションの最大数 | 10000 |
rag.chat.history.max.messages | 会話履歴に保持する最大メッセージ数 | 30 |
同時実行制御
LLMへのリクエストの同時実行数を制御する設定です。 fess_config.properties で設定します。
| プロパティ | 説明 | デフォルト |
|---|---|---|
rag.llm.{provider}.max.concurrent.requests | プロバイダーへの最大同時リクエスト数 | 5 |
rag.llm.{provider}.concurrency.wait.timeout | 同時実行数の上限に達した際、空きを待機する最大時間(ミリ秒)。この時間内に空きが得られない場合はレート制限エラーになります | 30000 |
例えば、OpenAIプロバイダーの同時実行数を設定する場合は以下のようになります。
評価設定
検索結果の評価に関する設定です。 fess_config.properties で設定します。
| プロパティ | 説明 | デフォルト |
|---|---|---|
rag.llm.{provider}.chat.evaluation.max.relevant.docs | 評価フェーズで選択する関連ドキュメントの最大数 | 3 |
プロンプトタイプ別設定
生成パラメーターをプロンプトタイプごとに設定できます。これにより、用途に応じた細かな調整が可能です。設定は fess_config.properties で行います。
プロンプトタイプ一覧
| プロンプトタイプ | 設定値 | 説明 |
|---|---|---|
| 意図解析 | intent | ユーザーの質問を分析し、検索キーワードを抽出する |
| 評価 | evaluation | 検索結果の関連性を評価する |
| 不明確な質問 | unclear | 質問が不明確な場合の応答を生成する |
| 検索結果なし | noresults | 検索結果が見つからない場合の応答を生成する |
| ドキュメント不在 | docnotfound | 該当するドキュメントが存在しない場合の応答を生成する |
| 回答生成 | answer | 検索結果を基に回答を生成する |
| 要約 | summary | ドキュメントの要約を生成する |
| FAQ | faq | FAQ形式の回答を生成する |
| 直接回答 | direct | 検索を介さずに直接回答を生成する |
| クエリ再生成 | queryregeneration | 検索結果が得られない場合にクエリを再生成する |
設定パターン
プロンプトタイプごとの設定は以下のパターンで指定します。
設定例(OpenAIプロバイダーの場合):
注釈
temperature 、 max.tokens 、 context.max.chars はすべてのプロバイダーで共通して使用できます。これに加えて、各プロバイダーは thinking.budget 、 top.p 、 reasoning.effort などのプロバイダー固有のパラメーターをサポートしています。詳細は各プロバイダーのドキュメントを参照してください。
次のステップ
Ollamaの設定(ローカルLLM / RAG) - Ollamaの詳細設定
OpenAIの設定(AI検索 / RAG) - OpenAIの詳細設定
Google Geminiの設定(AI検索 / RAG) - Google Geminiの詳細設定
AI検索モード機能の設定 - AI検索モード機能の詳細設定
ハイブリッド検索とランクフュージョン(セマンティック+キーワード) - Rank Fusion設定(ハイブリッド検索の結果統合)