近年、大規模言語モデル(LLM)の発展により、検索結果をもとにAIが回答を生成するRAG(Retrieval-Augmented Generation:検索拡張生成)が注目されています。

Fess 15.5では、LLMを活用した「AI検索モード」が新たに搭載されました。AI検索モードを利用すると、検索対象のドキュメントに基づいて、AIがチャット形式で質問に回答してくれます。

本稿では、OllamaをLLMバックエンドとして利用し、Docker ComposeでFessのAI検索モード環境を構築する方法を解説。構築後、Fess公式サイトをクロールし、AI検索モードで質問に回答できるようになるまでの一連の流れを紹介します。今回は、Fess 15.5.1を利用して手順を説明します。

AI検索モードとは

AI検索モードは、Fessの全文検索機能とLLMを組み合わせた検索機能を提供します。ユーザーが自然言語で質問を入力すると、Fessが以下の処理を自動的に行います。

  1. 質問の分析 - ユーザーの質問意図を理解し、適切な検索キーワードを生成
  2. ドキュメント検索 - Fessの全文検索エンジンで関連ドキュメントを検索
  3. 検索結果の評価 - 検索結果の関連性を評価
  4. コンテンツ取得 - 関連性の高いドキュメントの内容を取得
  5. 回答生成 - 取得したドキュメントをコンテキストとして、LLMが質問に対する回答を生成

この仕組みにより、LLM単体では回答できない組織内のドキュメントに基づいた正確な回答が得られます。また、回答には参照元ドキュメントへのリンクが表示されるため、情報の出典を確認することもできます。

FessのAI検索モードは、LLMバックエンドとしてOllama、OpenAI、Geminiに対応しています。本稿では、ローカル環境で無料で利用できるOllamaを使った構成を解説します。

AI検索モードは、まだ実験的な機能であるため、今後も継続的に改善され、処理の仕様が変わる場合もあります。

Ollamaとは

Ollamaは、LLMをローカル環境で手軽に実行できるオープンソースのツールです。GemmaやLlamaなど多様なモデルに対応しており、コマンド一つでモデルのダウンロードと実行が可能です。また、APIを提供しているため、Fessのような外部アプリケーションからLLMを呼び出すことができます。

環境構築(GPU環境向け)

NVIDIAのGPUを利用できる環境向けの構築方法を説明します。

Docker Composeファイルのダウンロード

Docker Composeを使用して、Fess、OpenSearch、Ollamaを起動します。 以下のコマンドで、起動に必要なファイルをダウンロードします。

$ curl -o compose.yaml https://raw.githubusercontent.com/codelibs/docker-fess/v15.5.1/compose/compose.yaml
$ curl -o compose-opensearch3.yaml https://raw.githubusercontent.com/codelibs/docker-fess/v15.5.1/compose/compose-opensearch3.yaml
$ curl -o compose-ollama-gpu.yaml https://raw.githubusercontent.com/codelibs/docker-fess/v15.5.1/compose/compose-ollama-gpu.yaml

Fessの起動

以下のコマンドで、Fess、OpenSearch、Ollamaを起動します。

$ docker compose -f compose.yaml -f compose-opensearch3.yaml -f compose-ollama-gpu.yaml up -d

LLMモデルのダウンロード

Ollamaコンテナが起動したら、LLMモデルをダウンロードします。ここでは、gemma3:4bモデルを使用します。

$ docker exec -it ollama01 ollama pull gemma3:4b

適当なプロンプトを送信して、正常に利用できることを確認します。

$ docker exec -it ollama01 ollama run gemma3:4b Hello

他のモデルを利用する場合は、compose-ollama-gpu.yamlFESS_JAVA_OPTS-Dfess.config.rag.llm.ollama.model=<モデル名> を追加してください。

起動の確認

全てのコンテナが起動したら、ブラウザで http://localhost:8080/ にアクセスします。Fessの検索画面が表示されることを確認します。

Fessのトップ画面

画面右上のナビゲーションに「AIモード」のリンクが表示されていれば、AI検索モードが正常に有効化されています。

AIモードのリンク

Webクロール設定

AI検索モードで質問に回答するためには、検索対象のドキュメントが必要です。ここでは、Fess公式サイトをクロールして検索対象に登録します。

クロール設定の作成

管理画面(http://localhost:8080/admin/)にログインします。デフォルトの管理者アカウントは、ユーザー名「admin」、パスワード「admin」です。

左メニューの「クローラー」>「ウェブ」をクリックし、「新規作成」をクリックします。以下の内容を入力します。

項目名 設定値
名前 Fess Site
URL https://fess.codelibs.org/ja/
クロール対象とするURL https://fess.codelibs.org/ja/.*
深さ 2

入力後、「作成」ボタンをクリックして設定を保存します。

Webクロール設定画面

クロールの実行

左メニューの「システム」>「スケジューラ」をクリックし、「Default Crawler」を選択します。「今すぐ開始」をクリックしてクロールを開始します。

スケジューラ画面

クロールが完了したら、検索画面に戻って「Fess」と検索し、検索結果が表示されることを確認します。

検索結果画面

環境構築(CPU環境向け)

CPU版の compose-ollama.yaml も提供していますが、非常に低速な動作になります。

CPU版のDocker環境で起動する場合は、以下のファイルをダウンロードします。

$ curl -o compose.yaml https://raw.githubusercontent.com/codelibs/docker-fess/v15.5.1/compose/compose.yaml
$ curl -o compose-opensearch3.yaml https://raw.githubusercontent.com/codelibs/docker-fess/v15.5.1/compose/compose-opensearch3.yaml
$ curl -o compose-ollama.yaml https://raw.githubusercontent.com/codelibs/docker-fess/v15.5.1/compose/compose-ollama.yaml

以下のコマンドで起動します。

$ docker compose -f compose.yaml -f compose-opensearch3.yaml -f compose-ollama.yaml up -d

起動後はGPU環境向けと同様に、LLMモデルのダウンロード以降の手順を実施してください。

Apple SiliconのMac環境の場合

Apple SiliconのMac環境であれば、DockerのOllamaでなく、Ollamaをローカルにインストールして、以下の手順で試すことができます。

Ollamaのダウンロードサイトからインストールします。 Ollamaを起動して、gemma3:4bが利用できること、および curl http://localhost:11434 でアクセス可能であることを確認します。

以下のコマンドで、起動に必要なファイルをダウンロードします。

$ curl -o compose.yaml https://raw.githubusercontent.com/codelibs/docker-fess/v15.5.1/compose/compose.yaml
$ curl -o compose-opensearch3.yaml https://raw.githubusercontent.com/codelibs/docker-fess/v15.5.1/compose/compose-opensearch3.yaml

compose.yaml のenvironmentに以下を追記します。

      - "FESS_JAVA_OPTS=-Dfess.config.rag.chat.enabled=true -Dfess.config.rag.llm.ollama.api.url=http://host.docker.internal:11434 -Dfess.config.rag.llm.ollama.model=gemma3:4b"

以下のコマンドで、Fess、OpenSearchを起動します。

$ docker compose -f compose.yaml -f compose-opensearch3.yaml up -d

起動後はGPUを利用した環境構築の方法と同様になります。

AI検索モードの使い方

チャット画面へのアクセス

検索画面の右上にある「AIモード」リンクをクリックすると、AIチャット画面が表示されます。

AIチャット画面

質問の入力と回答

画面下部の入力欄に質問を入力し、送信ボタンをクリックするか、Enterキーを押して質問を送信します。

例えば、「Fessのインストール方法を教えてください」と質問すると、AIがクロール済みのドキュメントから関連する情報を検索し、回答を生成します。

質問の入力

質問を送信すると、画面上部にプログレスインジケータが表示され、処理の進行状況を確認できます。「分析」「検索」「評価」「取得」「回答」の5つのステップが順に実行されます。

処理の進行状況

回答が生成されると、チャット形式で表示されます。回答の下部には「参照元」として、回答の根拠となったドキュメントへのリンクが表示されます。

AIの回答と参照元

会話の継続

AI検索モードでは、会話の履歴が保持されるため、前の質問を踏まえた追加の質問ができます。例えば、最初の回答に対して「Docker Composeで起動する方法は?」と続けて質問すると、文脈を考慮した回答が得られます。

新しいトピックについて質問する場合は、画面右上の「新規チャット」ボタンをクリックして、会話をリセットできます。

* * *

本稿では、Fess 15.5で新たに追加されたAI検索モードの構築手順と使い方を紹介しました。Docker ComposeでFess、OpenSearch、Ollamaを起動し、Webクロールで登録したドキュメントに基づいてAIがチャット形式で質問に回答する環境を構築しました。

AI検索モードを活用することで、従来のキーワード検索では見つけにくかった情報も、自然言語で質問するだけで的確な回答を得ることができます。また、回答には参照元ドキュメントが明示されるため、情報の正確性を確認することも容易です。

まだ実験的な機能であるため、さまざまなフィードバックを受けて、検索精度や回答品質を改善していく予定です。ぜひFessのAI検索モードを試して、新しい検索体験を感じてみてください。