FessのAIチャットで1つの文書について質問する

FessのAIチャットに、検索結果から選んだ1つの文書を対象に質問する機能を追加しました。複数の検索結果を横断して回答する通常のチャットに加え、「この手順書の要点を教えて」「この資料の条件を説明して」といった使い方ができます。

検索結果から文書チャットを開く

AIチャットが有効な場合、標準のbootstrapテーマでは検索結果に文書について質問するリンクが表示されます。リンクを開くと、対象文書のタイトルを示すバナーが現れ、その文書を参照して会話します。

バナーを解除するか新しいチャットを始めると、通常のチャットへ戻ります。別の文書に切り替えた場合も新しいセッションになります。

文書だけを参照する仕組み

POST /api/v2/chatとPOST /api/v2/chat/streamに、任意のdoc_idを追加しました。文書を指定した場合は検索や検索クエリの再生成を省略し、指定文書を回答の参照元にします。ラベルなどのfieldsやextra_queriesもこの経路では利用しません。

文書の取得には閲覧ロールの確認を適用します。存在しない文書と閲覧権限のない文書はいずれも404となります。チャットの有効・無効、ログイン条件、CSRF対策、ユーザー単位のレート制限も従来と同じです。

サーバーは対象文書の状態を保持しないので、独自クライアントでは会話の各リクエストにdoc_idを送る必要があります。

長い文書は分割して要約する

LLMのコンテキストに収まる文書は1回の呼び出しで回答します。長い文書は分割し、質問に関連する情報を各部分から要約した後、それらをまとめて回答します。

分割数の上限はfess_config.propertiesで指定できます。

rag.chat.document.max.parts=10

上限を超える文書では先頭の部分だけを利用し、ストリーミングAPIはdocument_truncatedの警告を通知します。非ストリーミングAPIには同じ警告を通知する経路がありません。

利用時の注意点

長い文書は質問のたびに要約し直します。標準の上限では部分要約に最大10回、回答生成に1回のLLM呼び出しが必要になるため、待ち時間や利用量を考慮してください。

また、長文の「翻訳」は部分要約から生成するため、全文の逐語的な翻訳にはなりません。対象を1つに絞ることで質問しやすくなりますが、LLMの回答は原文と照らし合わせて確認してください。

関連PR

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です