FessのRAGチャットで利用権限・回答言語・再検索回数を設定する

FessのRAGチャットに、利用できるユーザーと参照文書の制限、回答言語の指定、検索クエリーの作り直し回数の設定が追加されました。部署限定のチャットや、日本語で回答する社内検索を構成しやすくなります。

利用者と参照文書を制限する

管理画面の「システム」>「全般」のRAG設定で、利用パーミッションとラベルを指定します。これらはsystem.propertiesの設定項目です。例えば次のように指定します。

rag.chat.permissions={group}sales,{user}taro
rag.chat.labels=manual,faq

両方とも初期値は空です。パーミッションが空なら従来どおり利用可能な全員が対象、ラベルが空ならユーザーが閲覧できる全ての文書が対象です。パーミッションは列挙したいずれかに一致すれば利用できます。{role}guestを指定すれば匿名ユーザーも対象になります。

ラベルには表示名ではなくラベル値を指定します。指定したラベルのいずれかに属する文書と、もともとの閲覧権限の両方を満たす文書だけを参照します。ユーザーがチャットで選んだラベルともANDで組み合わせます。通常検索だけでなく、URL要約や文書を指定するチャットにも制限を適用します。

利用権限のない匿名ユーザーは401、ログイン済みユーザーは403となります。制限対象のユーザーには標準テーマのチャットリンクも表示しません。空でない不正なパーミッション設定から利用対象を解決できない場合は、全員を拒否します。

回答言語と検索回数を指定する

次の2項目はfess_config.propertiesに設定します。前述の全般設定とは保存先が異なります。

rag.chat.response.language=browser
rag.chat.query.regeneration.max.count=2

回答言語の初期値browserはブラウザーやUIの言語に従い、英語の場合は言語指示を加えません。jaなら日本語、enなら英語で回答するよう指示します。noneは言語指示を加えない設定で、通常は質問の言語に沿った回答になります。不正な言語コードは警告を出し、browserへ戻ります。LLMへの指示なので、必ず指定言語で回答する保証ではありません。

検索クエリーの再生成は初期値で最大2回です。ヒットがないとき、ストリーミングでは関連性評価で文書が残らないときにも、LLMにクエリーを作り直させて検索します。0で再生成を無効にできます。空のクエリーや同じリクエスト内で検索済みのクエリーが返った場合も打ち切ります。

利用時の制限

RAG自体はrag.chat.enabled=falseが初期値です。有効化と対応LLMの設定が前提になります。再生成回数を増やすとLLM呼び出し回数と待ち時間も増えます。非ストリーミングでは関連性評価を行わず、ヒットがない場合だけ再検索します。文書指定のチャットでは検索の再生成を行いません。

ラベル値の存在は保存時に検証しないため、設定後に対象ユーザーで文書取得を確認してください。独自の検索プラグインが標準の検索クエリー構築を利用しない場合は、追加フィルターへの対応確認も必要です。

利用できるバージョン

Fess 15.9.0に含まれる予定の機能になります。現時点では、まだ、リリースしていないので、今後のテストで変更される可能性もあります。

関連PR

Fessで最近の検索を条件ごと再実行する

Fessにログインしているユーザーが、自分の最近の検索をもう一度実行できるようにしました。同じキーワードで何度も資料を探すときに、ラベルや並び順などの条件も復元できます。

検索欄から履歴を選ぶ

標準のbootstrapテーマでは、空の検索欄をクリックするか、下矢印キーを押すと最近の検索を表示します。履歴を選ぶと、キーワードと保存された条件で検索をやり直します。

ページを開いて自動的に検索欄へフォーカスしただけでは履歴を表示しません。文字を入力し始めると通常のサジェストへ切り替わります。

同じ条件の検索はまとめて、新しいものから表示します。キーワードのない検索や2ページ目以降のリクエストは履歴の一覧対象にしません。現在の仮想ホストに対応した履歴を取得します。

設定とAPI

fess_config.propertiesに次の設定を追加しました。

search.history.enabled=true
search.history.size=10

デフォルトは有効で、最大10件を返します。ただし、検索ログを無効にしている場合は、この機能も利用できません。

APIはGET /api/v2/search-historyです。ログインセッションのユーザーIDを使い、検索ログから本人の履歴を取り出します。クライアントが任意に指定できるCookieやパラメーターでユーザーを決める方式ではありません。ゲストやアクセストークンによる呼び出しは対象外です。

保存する条件はキーワード、fields.*のフィルター、ex_q、並び順、明示的に指定した言語です。他のテーマで使う場合は、このAPIを利用する表示機能が必要になります。

履歴がすぐに出ない場合

検索ログは定期的にまとめて保存するため、検索直後の履歴反映には最大でおおむね1分かかります。また、今回の変更前のログには検索条件を保存したsearchParamsがないため、古い検索は履歴に表示しません。保存期間は既存の検索ログの削除設定に従います。

あわせて、起動時に設定・ログ・ユーザー系インデックスへ不足する標準フィールドを追加する処理を入れました。これにより、アップグレード済み環境でもsearchParamsを想定した定義で追加できます。既存フィールドの型は変更せず、検索文書インデックスは対象外です。

よく使う検索を条件ごと再利用できるようになり、繰り返し資料を探す際の操作を減らせます。

関連PR

Fessの検索ログを分析ダッシュボードで確認してCSV出力する

Fessの管理画面にある検索ログを、検索の利用状況を把握できる分析ダッシュボードに変更しました。検索数だけでなく、ゼロヒット率、クリック率、応答時間などをまとめて確認できます。あわせて、ログや分析結果をCSVでダウンロードする機能も追加しました。

タブで分析項目を切り替える

検索ログ画面の入口は概要ダッシュボードになり、クエリ、クリック、パフォーマンス、ユーザーの各タブで詳しいデータを確認できます。個別のログ一覧は「ログ」タブへ移動しています。

概要では検索数、ユーザー数、ゼロヒット率、クリック率、平均応答時間をカードと推移グラフで表示します。前の期間との比較もできるため、コンテンツや検索設定を変更した後の傾向を追いやすくなります。

期間は今日、昨日、直近7日・28日・90日などのプリセットから選べます。任意の日付範囲は最大366日で、アクセス種別や表の表示件数も指定できます。日付の区切りはサーバーのタイムゾーンに従います。

検索改善につながる指標

クエリごとの平均ヒット数、クリック率、平均クリック順位に加え、ヒットしているのにクリックされないクエリも確認できます。ゼロヒットなら情報や同義語の不足、ゼロクリックなら結果のタイトルや順位などを調べるきっかけになります。

パフォーマンスでは平均値だけでなくp50、p95、p99や応答時間の分布を表示します。ユーザーのタブでは新規・再訪の状況、曜日と時間帯のヒートマップ、言語や参照元などを確認できます。

CSVで取り出す

ログタブの「CSVをダウンロード」から、現在の条件に一致する検索、クリック、お気に入り、ユーザー情報のログを出力できます。新しいものから順にストリーミングで出力し、このログ出力には行数上限を設けていません。

分析タブでは各表やグラフ、KPIのCSVをダウンロードできます。画面と同じ期間・比較条件・アクセス種別を使い、KPIはmetric, unit, value, previous, change形式、ヒートマップは曜日ごとにh00からh23を並べた形式になります。

CSVの数値は表示用の整形前の値です。割合は0〜1、時間はミリ秒なので、表計算ソフトで扱うときは表示形式を合わせてください。文字コードはcsv.file.encodingに従い、UTF-8ではBOMを付けます。数式と解釈される文字で始まるテキストには保護用の引用符を付けます。

データの読み方の注意

クエリ単位のクリック指標には、検索語を保存するようになった後のクリックログを利用します。古いクリックログまでさかのぼって同じ精度で分析できるわけではありません。また、ユーザー数などの集計には近似値が含まれます。

閲覧には従来と同じ検索ログの管理権限、または閲覧専用権限を使います。大量のログ出力で検索エンジンが途中で失敗した場合はCSVが途中で切れる可能性があるため、必要な期間に絞って利用してください。

関連PR