FESSでOpenFOAMアドバイザーを作る

2025年9月15日

はじめに

全文検索サービスのFESSを利用してOpenFOAMアドバイザーを作れないかという試み。

環境

  • Ubuntu 22.04 LTS
  • FESS 15.1.0
  • OpenSearch 3.1.0

FESSとOpenSearchはセットアップ済みとする。

動機と方針

Open WebUIのRAGでOpenFOAMアドバイザーを作れないか試みたが、全文検索的な情報の取り方もしたいなあと思い、FESSの利用を試みたしだい。

方針

  • FESSで一旦OpenFOAM情報の全文検索の仕組みを作る。
  • その結果、OpenSearchにインデックスができるので、それを使って検索する。
  • 検索および回答生成にはローカルLLMを利用する。

全文検索

クローラの設定

文書を検索するには、まず文書の情報を集める(クロールする)必要がある。それを行うのがクローラである。注意点としては、FESSサービスはfessユーザー/fessグループになっているので、クローラがアクセスする場所へのアクセス権を適切に設定する必要がある。たとえば、ユーザーpenguin/グループpenguinのホームディレクトリにアクセスさせたければ、次のようにfessをpenguinグループに入れるなどである。

$ sudo usermod -aG penguin fess

クローラの設定

  • 右上のログイン名を選択して[管理]
  • [クローラー]-[ファイルシステム]
  • [新規作成]
  • 名前を適当につけて、パスに file:/ 形式でパスを書く。
    • たとえばfile:/home/penguin/doc/OpenFOAM/など
  • [作成]

右上に [クローラーの実行] ボタンがあるので、そこで [今すぐ開始]。

クロールの情報は [システム情報]-[クロール情報] で確認できる。インデックスのサイズが 0 でなければうまくいっている。

Webのクロールをするには、[クローラー]-[ウェブ]で行う。

Webのクロールの場合、robots.txtでクロールを拒否されることがある。robots.txtを無視してよい状況であれば、設定で無視させることができる。

$ sudo vi /etc/fess/fess_config.properties

以下を設定

crawler.ignore.robots.txt=true

ここでは、ローカルのファイル(Open WebUIでOpenFOAMアドバイザーを作ってみたときに用意したもの)を参照するようにした。

FESSのインデックスは、OpenSearchのfess.searchに入る。

注意 全般の設定で [以前のドキュメントを削除] を -1 にしておかないと、クロールしたものが自動的に消える。

チャットボット

Chainlitを使う。ベースのコードはOllamaのquen3-coder:30bとかに書いてもらう。

「ユーザーの自由な問い合わせに対して、OpenSearchに対して検索をかけ、返ってきたファイル名やスコア、ハイライトを使って、返ってきたものを出典としてリンクを示しながら、返答するチャットボットをOllamaとChainlitで作りたい。OpenSearchのインデックスにはFESSのもの(fess.search)を使うものとする。すべてPythonで簡潔に。」

fess_chat-20250803.tar.gz

パッケージのインストール

$ uv pip install chainlit opensearch-py requests ollama

初期化

chainlit init

.chainlit/config.tomlなどができる。

ファイルアップロードさせたくない場合は、以下のように設定する。

[features.spontaneous_file_upload]
    #enabled = true
    enabled = false

ロゴ

[UI]
...
logo_file_url = "/public/logo.png"

ファイルはpublicに入れる。