概要
Ollamaは、ローカル環境で大規模言語モデル(LLM)を実行するためのオープンソースプラットフォームです。 Fess 15.6では、Ollama連携機能はプラグイン fess-llm-ollama として提供されており、プライベート環境での利用に適しています。
Ollamaを使用することで、データを外部に送信せずにAI検索モード機能を利用できます。
主な特徴
ローカル実行: データは外部に送信されず、プライバシーを確保
多様なモデル: Llama、Mistral、Gemma、CodeLlamaなど多数のモデルに対応
コスト効率: APIコストがかからない(ハードウェアコストのみ)
カスタマイズ: 独自にファインチューニングしたモデルも利用可能
対応モデル
Ollamaで利用可能な主なモデル:
llama3.3:70b- Meta社のLlama 3.3(70Bパラメーター)gemma4:e4b- Google社のGemma 4(E4Bパラメーター、デフォルト)mistral:7b- Mistral AI社のMistral(7Bパラメーター)codellama:13b- Meta社のCode Llama(13Bパラメーター)phi3:3.8b- Microsoft社のPhi-3(3.8Bパラメーター)
注釈
利用可能なモデルの最新リストは Ollama Library で確認できます。
前提条件
Ollamaを使用する前に、以下を確認してください。
Ollamaのインストール: https://ollama.com/ からダウンロードしてインストール
モデルのダウンロード: 使用するモデルをOllamaにダウンロード
Ollamaサーバーの起動: Ollamaが動作していることを確認
Ollamaのインストール
Linux/macOS
curl -fsSL https://ollama.com/install.sh | sh
Windows
公式サイトからインストーラーをダウンロードして実行します。
Docker
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
モデルのダウンロード
# デフォルトモデル(Gemma 4 E4B)をダウンロード
ollama pull gemma4:e4b
# Llama 3.3をダウンロード
ollama pull llama3.3:70b
# モデルの動作確認
ollama run gemma4:e4b "Hello, how are you?"
プラグインのインストール
Fess 15.6では、Ollama連携機能はプラグインとして分離されました。 Ollamaを利用するには fess-llm-ollama プラグインのインストールが必要です。
fess-llm-ollama-15.6.0.jar をダウンロードします。
Fess のインストールディレクトリ内の
app/WEB-INF/plugin/ディレクトリに配置します。
cp fess-llm-ollama-15.6.0.jar /path/to/fess/app/WEB-INF/plugin/
Fess を再起動します。
注釈
プラグインのバージョンは Fess のバージョンと合わせてください。
基本設定
Fess 15.6では、LLM関連の設定は複数の設定ファイルに分かれています。
最小構成
``system.properties``(管理画面 > システム > 全般 でも設定可能):
# LLMプロバイダーをOllamaに設定
rag.llm.name=ollama
app/WEB-INF/conf/fess_config.properties:
# AI検索モード機能を有効にする
rag.chat.enabled=true
# OllamaのURL(ローカル環境の場合)
rag.llm.ollama.api.url=http://localhost:11434
# 使用するモデル
rag.llm.ollama.model=gemma4:e4b
注釈
LLMプロバイダーの設定は、管理画面(管理画面 > システム > 全般)から rag.llm.name を設定することもできます。
推奨構成(本番環境)
``system.properties``(管理画面 > システム > 全般 でも設定可能):
# LLMプロバイダー設定
rag.llm.name=ollama
app/WEB-INF/conf/fess_config.properties:
# AI検索モード機能を有効にする
rag.chat.enabled=true
# OllamaのURL
rag.llm.ollama.api.url=http://localhost:11434
# モデル設定(大規模モデルを使用)
rag.llm.ollama.model=llama3.3:70b
# タイムアウト設定(大規模モデル用に増加)
rag.llm.ollama.timeout=120000
# 同時リクエスト数の制御
rag.llm.ollama.max.concurrent.requests=5
設定項目
Ollamaクライアントで使用可能なすべての設定項目です。 rag.llm.name 以外はすべて fess_config.properties に設定します。
| プロパティ | 説明 | デフォルト |
|---|---|---|
rag.llm.ollama.api.url | OllamaサーバーのベースURL | http://localhost:11434 |
rag.llm.ollama.model | 使用するモデル名(Ollamaにダウンロード済みのモデル) | gemma4:e4b |
rag.llm.ollama.timeout | リクエストのタイムアウト時間(ミリ秒) | 60000 |
rag.llm.ollama.availability.check.interval | 可用性チェック間隔(秒) | 60 |
rag.llm.ollama.max.concurrent.requests | 最大同時リクエスト数 | 5 |
rag.llm.ollama.chat.evaluation.max.relevant.docs | 評価最大関連ドキュメント数 | 3 |
rag.llm.ollama.concurrency.wait.timeout | 同時実行制御のパーミット取得待ちタイムアウト(ミリ秒) | 30000 |
詳細設定
履歴やコンテキストサイズに関する詳細な設定項目です。
| プロパティ | 説明 | デフォルト |
|---|---|---|
rag.llm.ollama.chat.evaluation.description.max.chars | 評価時の説明の最大文字数 | 500 |
rag.llm.ollama.history.max.chars | 会話履歴の最大文字数 | 4000 |
rag.llm.ollama.intent.history.max.messages | 意図判定時の履歴最大メッセージ数 | 6 |
rag.llm.ollama.intent.history.max.chars | 意図判定時の履歴最大文字数 | 3000 |
rag.llm.ollama.history.assistant.max.chars | アシスタント応答の履歴最大文字数 | 500 |
rag.llm.ollama.history.assistant.summary.max.chars | アシスタント要約の履歴最大文字数 | 500 |
同時実行制御
rag.llm.ollama.max.concurrent.requests を使用して、Ollamaへの同時リクエスト数を制御できます。 デフォルトは5です。Ollamaサーバーのリソースに応じて調整してください。 同時リクエスト数が多すぎるとOllamaサーバーに負荷がかかり、応答速度が低下する場合があります。
プロンプトタイプ別設定
Fess では、プロンプトタイプごとにLLMのパラメーターをカスタマイズできます。 設定は fess_config.properties に記述します。
プロンプトタイプ別に以下のパラメーターを設定できます:
rag.llm.ollama.{promptType}.temperature- 生成時のtemperaturerag.llm.ollama.{promptType}.max.tokens- 最大トークン数rag.llm.ollama.{promptType}.context.max.chars- コンテキストの最大文字数rag.llm.ollama.{promptType}.thinking.budget- 思考バジェットrag.llm.ollama.{promptType}.top.p- Top-Pサンプリングの値rag.llm.ollama.{promptType}.top.k- Top-Kサンプリングの値rag.llm.ollama.{promptType}.num.ctx- コンテキストウィンドウサイズ
利用可能なプロンプトタイプ:
| プロンプトタイプ | 説明 |
|---|---|
intent | ユーザーの意図を判定するプロンプト |
evaluation | 検索結果の評価プロンプト |
unclear | 不明確なクエリへの応答プロンプト |
noresults | 検索結果なしの場合のプロンプト |
docnotfound | ドキュメントが見つからない場合のプロンプト |
answer | 回答生成プロンプト |
summary | 要約生成プロンプト |
faq | FAQ生成プロンプト |
direct | 直接応答プロンプト |
queryregeneration | クエリ再生成プロンプト |
設定例:
# 回答生成時のtemperatureを設定
rag.llm.ollama.answer.temperature=0.7
# 要約生成時の最大トークン数を設定
rag.llm.ollama.summary.max.tokens=2048
# 意図判定時のコンテキスト最大文字数を設定
rag.llm.ollama.intent.context.max.chars=4000
Ollamaモデルオプション
Ollamaのモデルパラメーターを fess_config.properties で設定できます。 これらのパラメーターはプロンプトタイプごとに設定可能で、 default をプロンプトタイプとして指定するとすべてのプロンプトタイプのフォールバック値として使用されます。
| プロパティ | 説明 | デフォルト |
|---|---|---|
rag.llm.ollama.default.top.p | Top-Pサンプリングの値(0.0〜1.0)。プロンプトタイプごとに rag.llm.ollama.{promptType}.top.p で上書き可能 | (未設定) |
rag.llm.ollama.default.top.k | Top-Kサンプリングの値。プロンプトタイプごとに rag.llm.ollama.{promptType}.top.k で上書き可能 | (未設定) |
rag.llm.ollama.default.num.ctx | コンテキストウィンドウサイズ。プロンプトタイプごとに rag.llm.ollama.{promptType}.num.ctx で上書き可能 | (未設定) |
rag.llm.ollama.options.* | OllamaのAPIに直接渡されるグローバルオプション。サフィックスがオプション名として使用される(例: rag.llm.ollama.options.repeat_penalty=1.1)。値は自動的にInteger、Double、Boolean、Stringに変換される | (未設定) |
設定例:
# デフォルトのTop-Pサンプリング(全プロンプトタイプ共通)
rag.llm.ollama.default.top.p=0.9
# デフォルトのTop-Kサンプリング
rag.llm.ollama.default.top.k=40
# デフォルトのコンテキストウィンドウサイズ
rag.llm.ollama.default.num.ctx=4096
# 回答生成時のみTop-Pを変更
rag.llm.ollama.answer.top.p=0.95
# グローバルオプション(Ollama APIに直接渡される)
rag.llm.ollama.options.repeat_penalty=1.1
思考モデル対応
gemma4やqwen3などの思考モデル(thinking model)を使用する場合、 Fess は思考バジェット(thinking budget)の設定をサポートしています。
思考バジェットはプロンプトタイプごとに fess_config.properties で設定します:
# 回答生成時の思考バジェットの設定
rag.llm.ollama.answer.thinking.budget=1024
# 要約生成時の思考バジェットの設定
rag.llm.ollama.summary.thinking.budget=1024
思考バジェットを設定することで、モデルが回答を生成する前に「考える」ステップに割り当てるトークン数を制御できます。
注釈
Ollamaでは、思考バジェットはブーリアンフラグに変換されます(値が0より大きい場合は think: true 、0の場合は think: false )。トークン数による細かい制御はOllama APIの制約により利用できません。
ネットワーク構成
Dockerでの構成
Fess とOllamaの両方をDockerで実行する場合の構成例です。
docker-compose.yml:
version: '3'
services:
fess:
image: codelibs/fess:15.6.0
environment:
- RAG_CHAT_ENABLED=true
- RAG_LLM_NAME=ollama
- RAG_LLM_OLLAMA_API_URL=http://ollama:11434
- RAG_LLM_OLLAMA_MODEL=gemma4:e4b
depends_on:
- ollama
# ... その他の設定
ollama:
image: ollama/ollama
volumes:
- ollama_data:/root/.ollama
ports:
- "11434:11434"
volumes:
ollama_data:
注釈
Docker Compose環境では、ホスト名として ollama を使用します(localhost ではなく)。
リモートOllamaサーバー
OllamaをFessとは別のサーバーで実行する場合:
rag.llm.ollama.api.url=http://ollama-server.example.com:11434
警告
Ollamaはデフォルトで認証機能を持たないため、外部からアクセス可能にする場合は ネットワークレベルでのセキュリティ対策(ファイアウォール、VPN等)を検討してください。
モデルの選択ガイド
使用目的に応じたモデル選択の指針です。
| モデル | サイズ | 必要VRAM | 用途 |
|---|---|---|---|
phi3:3.8b | 小 | 4GB以上 | 軽量環境、シンプルな質問応答 |
gemma4:e4b | 小〜中 | 8GB以上 | バランスの良い汎用用途、思考モード対応(デフォルト) |
mistral:7b | 中 | 8GB以上 | 高品質な回答が必要な場合 |
llama3.3:70b | 大 | 48GB以上 | 最高品質の回答、複雑な推論 |
GPU対応
OllamaはGPUアクセラレーションをサポートしています。NVIDIAのGPUを使用することで、 推論速度が大幅に向上します。
# GPU対応の確認
ollama run gemma4:e4b --verbose
トラブルシューティング
接続エラー
症状: チャット機能でエラーが発生する、LLMが利用不可と表示される
確認事項:
Ollamaが動作しているか確認:
curl http://localhost:11434/api/tags
モデルがダウンロードされているか確認:
ollama list
ファイアウォールの設定を確認
fess-llm-ollamaプラグインがapp/WEB-INF/plugin/に配置されているか確認
モデルが見つからない
症状: 「Configured model not found in Ollama」というログが出力される
解決方法:
モデル名が正確か確認(
:latestタグを含める場合がある):# モデル一覧を確認 ollama list
必要なモデルをダウンロード:
ollama pull gemma4:e4b
タイムアウト
症状: リクエストがタイムアウトする
解決方法:
タイムアウト時間を延長:
rag.llm.ollama.timeout=120000
より小さなモデルを使用するか、GPU環境を検討
デバッグ設定
問題を調査する際は、Fess のログレベルを調整してOllama関連の詳細なログを出力できます。
app/WEB-INF/classes/log4j2.xml:
<Logger name="org.codelibs.fess.llm.ollama" level="DEBUG"/>
参考情報
LLM統合の概要 - LLM統合の概要
AI検索モード機能の設定 - AI検索モード機能の詳細