Ollamaの設定

概要

Ollamaは、ローカル環境で大規模言語モデル(LLM)を実行するためのオープンソースプラットフォームです。 Fess の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を使用する前に、以下を確認してください。

  1. Ollamaのインストール: https://ollama.com/ からダウンロードしてインストール

  2. モデルのダウンロード: 使用するモデルをOllamaにダウンロード

  3. 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?"

プラグインのインストール

Ollama連携機能はプラグインとして提供されます。 Ollamaを利用するには fess-llm-ollama プラグインのインストールが必要です。

  1. fess-llm-ollama-15.7.0.jar をダウンロードします。

  2. Fess のインストールディレクトリ内の app/WEB-INF/plugin/ ディレクトリに配置します。

cp fess-llm-ollama-15.7.0.jar /path/to/fess/app/WEB-INF/plugin/
  1. Fess を再起動します。

注釈

プラグインのバージョンは Fess のバージョンと合わせてください。

基本設定

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 可用性チェック間隔(秒)。 0 以下を指定すると定期的な可用性チェックを無効化します 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.connect.timeout TCP接続タイムアウト(ミリ秒)。 rag.llm.ollama.timeout とは別に指定可能 5000
rag.llm.ollama.retry.max HTTPリトライの最大試行回数( 429 および 5xx 系エラー時) 3
rag.llm.ollama.retry.base.delay.ms 指数バックオフの基準遅延時間(ミリ秒) 2000

詳細設定

履歴やコンテキストサイズに関する詳細な設定項目です。

プロパティ 説明 デフォルト
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 - 生成時のtemperature

  • rag.llm.ollama.{promptType}.max.tokens - 最大トークン数(Ollama APIの num_predict にマッピングされます)

  • rag.llm.ollama.{promptType}.context.max.chars - コンテキストの最大文字数

  • rag.llm.ollama.{promptType}.thinking.budget - 思考バジェット(ブーリアン形式の思考制御。詳細は「思考モデル対応」を参照)

  • rag.llm.ollama.{promptType}.thinking.level - 思考レベル( high / medium / low の文字列形式。詳細は「思考モデル対応」を参照)

  • rag.llm.ollama.{promptType}.top.p - Top-Pサンプリングの値

  • rag.llm.ollama.{promptType}.top.k - Top-Kサンプリングの値

  • rag.llm.ollama.{promptType}.num.ctx - コンテキストウィンドウサイズ

各パラメーターは次の順序で解決されます: rag.llm.ollama.{promptType}.<param> (プロンプトタイプ別の設定)→ rag.llm.ollama.default.<param> (全プロンプトタイプ共通のフォールバック)→ プロンプトタイプごとのハードコードされた既定値。リクエストに明示的に指定された値は常に優先されます。

利用可能なプロンプトタイプ:

プロンプトタイプ 説明
intent ユーザーの意図を判定するプロンプト
evaluation 検索結果の評価プロンプト
unclear 不明確なクエリへの応答プロンプト
noresults 検索結果なしの場合のプロンプト
docnotfound ドキュメントが見つからない場合のプロンプト
answer 回答生成プロンプト
summary 要約生成プロンプト
faq FAQ生成プロンプト
direct 直接応答プロンプト
queryregeneration クエリ再生成プロンプト

各プロンプトタイプには、設定が省略された場合に適用されるハードコードされた既定値があります。

プロンプトタイプ temperature max.tokens thinking.budget context.max.chars
intent 0.1 256 0 6000
evaluation 0.1 512 0 6000
unclear 0.7 512 0 6000
noresults 0.7 512 0 6000
docnotfound 0.7 512 0 6000
answer 0.5 8192 (未設定) 10000
summary 0.3 8192 (未設定) 10000
faq 0.7 4096 (未設定) 6000
direct 0.7 4096 (未設定) 6000
queryregeneration 0.3 256 0 6000

設定例:

# 回答生成時の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 で設定できます。 rag.llm.ollama.default.<param> の形式で指定すると、すべてのプロンプトタイプ共通のフォールバック値として使用されます。 default によるフォールバックは top.p / top.k / num.ctx だけでなく、 temperature / max.tokens / thinking.budget / thinking.level にも適用されます。

プロパティ 説明 デフォルト
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.default.temperature 生成時のtemperatureのフォールバック値。プロンプトタイプごとに rag.llm.ollama.{promptType}.temperature で上書き可能 (未設定)
rag.llm.ollama.default.max.tokens 最大トークン数のフォールバック値。プロンプトタイプごとに rag.llm.ollama.{promptType}.max.tokens で上書き可能 (未設定)
rag.llm.ollama.default.thinking.budget 思考バジェットのフォールバック値。プロンプトタイプごとに rag.llm.ollama.{promptType}.thinking.budget で上書き可能 (未設定)
rag.llm.ollama.default.thinking.level 思考レベル( high / medium / low )のフォールバック値。プロンプトタイプごとに rag.llm.ollama.{promptType}.thinking.level で上書き可能 (未設定)
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の制約により利用できません。

思考レベル(thinking level)

gpt-ossなどの一部のモデルは、ブーリアン形式の think フラグを無視し、 high / medium / low の文字列形式による思考レベルの指定を必要とします。 このようなモデルでは rag.llm.ollama.{promptType}.thinking.level を使用します。

# 回答生成時の思考レベルの設定
rag.llm.ollama.answer.thinking.level=high

# 要約生成時の思考レベルの設定
rag.llm.ollama.summary.thinking.level=medium

thinking.level に設定できる値は high / medium / low のいずれかです(大文字・小文字は区別されません)。無効な値を指定した場合は無視され、警告ログが出力されます。

注釈

thinking.level (文字列形式)と thinking.budget (ブーリアン形式)の両方が設定されている場合、 thinking.level が優先されます。GPT-OSS系のモデルでは thinking.level を、それ以外の思考モデルでは thinking.budget を使用してください。

ネットワーク構成

Dockerでの構成

Fess 公式の docker-fess には Ollama 用のオーバーレイ compose-ollama.yaml が同梱されています。最小手順は次の通りです。

docker compose -f compose.yaml -f compose-opensearch3.yaml -f compose-ollama.yaml up -d
docker exec -it ollama01 ollama pull gemma4:e4b

compose-ollama.yaml は NVIDIA GPU を利用する構成になっています(NVIDIA Container Toolkit が必要です)。内容は次の通りです。

services:
  fess01:
    environment:
      - "FESS_PLUGINS=fess-llm-ollama:15.7.0"
      - "FESS_JAVA_OPTS=-Dfess.config.rag.chat.enabled=true -Dfess.config.rag.llm.ollama.api.url=http://ollama01:11434"
    depends_on:
      - ollama01

  ollama01:
    image: ollama/ollama:latest
    container_name: ollama01
    ports:
      - "11434:11434"
    volumes:
      - ollama-data:/root/.ollama
    networks:
      - search_net
    restart: unless-stopped
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

volumes:
  ollama-data:
    driver: local

ポイント:

  • FESS_PLUGINS=fess-llm-ollama:15.7.0 で起動スクリプトがプラグイン JAR を自動取得して app/WEB-INF/plugin/ に配置します(バージョンはお使いの Fess に合わせてください)

  • -Dfess.config.rag.chat.enabled=true で AI検索モードを有効化

  • -Dfess.config.rag.llm.ollama.api.url=... で Ollama サーバーの URL を指定(Docker Composeネットワーク内では ollama01 などのサービス名で解決)

  • LLMプロバイダー( rag.llm.name )のデフォルトは ollama のため、Ollamaのみを使用する場合は明示的な指定は不要です。別のプロバイダーから切り替える場合などは、 FESS_JAVA_OPTS-Dfess.system.rag.llm.name=ollama を追加するか、起動後に管理画面「システム > 全般」の RAG セクションで設定してください

  • deploy.resources.reservations.devices のブロックは GPU を利用するための設定です。GPU を使用しない(CPU のみで実行する)場合は、このブロックを削除してください

注釈

RAG_CHAT_ENABLEDRAG_LLM_NAME などの大文字スネークケース環境変数は Fess に直接認識されません。設定値は必ず FESS_JAVA_OPTS 内で -Dfess.config.<key>fess_config.properties 系)または -Dfess.system.<key>system.properties 系)として渡してください。

リモートOllamaサーバー

OllamaをFessとは別のサーバーで実行する場合:

rag.llm.ollama.api.url=http://ollama-server.example.com:11434

警告

Ollamaはデフォルトで認証機能を持たないため、外部からアクセス可能にする場合は ネットワークレベルでのセキュリティ対策(ファイアウォール、VPN等)を検討してください。

HTTPプロキシ経由の利用

Ollamaクライアントは Fess 全体のHTTPプロキシ設定を共有します。Ollamaサーバーへの接続にプロキシを経由する必要がある場合(リモートOllamaサーバー利用時など)、 fess_config.properties で以下のプロパティを指定してください。

プロパティ 説明 デフォルト
http.proxy.host プロキシホスト名(空文字列の場合はプロキシを使用しない) ""
http.proxy.port プロキシポート番号 8080
http.proxy.username プロキシ認証のユーザー名(任意。指定するとBasic認証が有効化される) ""
http.proxy.password プロキシ認証のパスワード ""

注釈

Ollamaは通常ローカルまたは内部ネットワークで動作するため、プロキシ設定が必要となるのは限定的なケース(社内プロキシ経由でのみ到達できるリモートOllamaサーバーを利用する場合等)に限られます。 この設定はクローラーなど Fess 全体のHTTPアクセスにも影響します。

モデルの選択ガイド

使用目的に応じたモデル選択の指針です。

モデル サイズ 必要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が利用不可と表示される

確認事項:

  1. Ollamaが動作しているか確認:

    curl http://localhost:11434/api/tags
    
  2. モデルがダウンロードされているか確認:

    ollama list
    
  3. ファイアウォールの設定を確認

  4. fess-llm-ollama プラグインが app/WEB-INF/plugin/ に配置されているか確認

モデルが見つからない

症状: 「Configured model not found」というログが出力される

解決方法:

  1. モデル名が正確か確認(:latest タグを含める場合がある):

    # モデル一覧を確認
    ollama list
    
  2. 必要なモデルをダウンロード:

    ollama pull gemma4:e4b
    

タイムアウト

症状: リクエストがタイムアウトする

解決方法:

  1. タイムアウト時間を延長:

    rag.llm.ollama.timeout=120000
    
  2. より小さなモデルを使用するか、GPU環境を検討

デバッグ設定

問題を調査する際は、Fess のログレベルを調整してOllama関連の詳細なログを出力できます。

app/WEB-INF/classes/log4j2.xml:

<Logger name="org.codelibs.fess.llm.ollama" level="DEBUG"/>

参考情報