メインコンテンツまでスキップ

ドキュメントチャット

ドキュメントチャットでは、Libre WebUI がアップロード済みのドキュメントを検索し、関連する抜粋をチャットのコンテキストへ渡せます。

対応ファイル

現在アップロードできるファイル:

  • PDF(ページ単位の出典情報付き)
  • プレーンテキストとログ
  • Markdown(.md.markdown.mdx。セクション単位の出典情報付き)
  • HTML
  • Word ドキュメント(.docx
  • プレゼンテーション(.pptx。スライド単位の出典情報付き)
  • スプレッドシート(.xlsx。シート単位の出典情報付き)と CSV/TSV
  • ソースコード(TypeScript、Python、Go、Rust、SQL、YAML、その他の一般的な言語)
  • 画像(.png.jpg.webp.gif)— 設定済みのビジョンモデル (設定 → デフォルト → ビジョンモデル)がテキストを読み取ります
  • 音声(.wav.webm)— 音声入力と同じ STT アクセス制御のもと、 音声テキスト変換プロバイダーで文字起こしされます
  • 最大ファイルサイズ:10 MB

Office 形式は、リポジトリ内にある処理量を制限したパーサーで展開されます。サーバープロセス内で サードパーティのドキュメントライブラリが実行されることはありません。同じスコープへ同一バイト列を 再アップロードした場合は、二重に取り込まず重複を排除します。

画像と音声の抽出には、すでに設定済みのプロバイダーが使われます。ローカルの OCR や音声エンジンは 同梱されておらず、選択したモデルの呼び出しを除いてインスタンス外へデータが送られることはありません。 テキストレイヤーのない PDF(スキャン)も同様に処理されます。埋め込まれた JPEG のページ画像を復元し、 ページ単位の出典情報を付けてビジョンモデルで読み取ります。ほかの画像エンコーディング (CCITT fax、JBIG2)で保存されたスキャンからは、引き続きテキストを取得できません。 ビジョンモデルまたは STT プロバイダーが設定されていない場合、アップロードは失敗として記録され、 理由が Settings → Documents に表示されます。

ファイルはバックエンドで処理され、ほかのアプリケーションデータとともに保存されます。

検索モード

Libre WebUI は 2 種類の検索モードに対応しています。

モード使用される条件詳細
キーワード検索常に利用可能BM25 ランキング。埋め込みモデルは不要
ハイブリッド検索Settings で埋め込みが有効な場合reciprocal-rank fusion でベクトル順位と BM25 を統合

埋め込みを有効にすると、すべてのクエリで両方のランキングを実行して統合します。 完全一致した用語は、意味的には近くても曖昧なチャンクより上位になり得ます。また、埋め込みの生成中である チャンクにも字句検索側から引き続きアクセスできます。埋め込みに失敗した場合や無効な場合、 ドキュメント検索は純粋なキーワード一致へフォールバックします。

字句スコアリングは、アクセス可能なチャンクを対象にプロセス内で実行されます。Libre は意図的に、 ドキュメントチャンクの全文インデックスをディスク上に保持しません。チャンクのテキストは暗号化されており、 トークンインデックスを作ると暗号文の隣に平文が永続化されるためです。チャンクが字句ランキングの対象になるには、 クエリ内の単語を少なくとも 1 つ完全に含む必要があります。そのため、ALPHA_BETA_GAMMA のような 複合識別子から、断片の 1 つが一致するだけのテキストが表示されることはありません。

あなたと共有されたナレッジコレクションは、両方のランキングに自動的に加わります。 アクセス制御はベクトルクエリ自体の内部で適用されます。付与情報がインデックスの ACL に公開されるため、 共有を取り消すと、再埋め込みを行わなくても次の検索から該当ドキュメントが表示されなくなります。

セマンティック検索を有効にする

埋め込みモデルをインストールします。

ollama pull nomic-embed-text

次に Settings を開き、埋め込みを有効にします。ローカルの Ollama 埋め込みモデル、または埋め込みに対応したプロバイダープラグインを使用できます。

埋め込みの既定設定:

  • モデル:nomic-embed-text
  • チャンクサイズ:1000 文字
  • チャンクのオーバーラップ:200 文字
  • 類似度しきい値:0.3

引用と全文ドキュメントモード

取得した抜粋には出典情報が付きます。ソースファイル名、チャンクインデックス、検索スコアに加え、 セグメントマップを持つ形式では、抜粋元のページ、スライド、シート、または Markdown セクションが含まれます。 チャットのコンテキストでは各抜粋にその位置が示され、会話の Sources レールには、ドキュメントごとに 引用された位置が一覧表示されます。

各チャットは、Sources レールから 全文ドキュメントモード に切り替えることもできます。 取得した抜粋の代わりに、スコープ内の全ドキュメントから抽出した内容全体がメッセージとともに送信されます。 トークンガード(FULL_DOCUMENT_CONTEXT_MAX_TOKENS、既定値 32000)がモデルのコンテキストウィンドウを 保護します。添付ドキュメントが上限を超えると、チャットは検索方式へフォールバックし、Sources レールに その理由が表示されます。

アップロードと検索

  1. ドキュメント操作から対応ファイルをアップロードします。
  2. 処理が完了するまで待ちます。
  3. チャットで質問します。
  4. Libre WebUI がそのセッションに関連するチャンクを取得し、コンテキストとして含めます。

プロンプトの例:

Summarize the uploaded document in five bullets.
What deadlines are mentioned in the PDF?
Find the section that talks about pricing.
Compare the uploaded policy with this proposed change.

API エンドポイント

エンドポイント用途
POST /api/documents/upload対応ドキュメントをアップロードする
GET /api/documentsアップロード済みドキュメントを一覧表示する
GET /api/documents/session/:sessionIdチャットセッションのドキュメントを一覧表示する
POST /api/documents/searchドキュメントを検索する
DELETE /api/documents/:documentIdドキュメントを削除する
GET /api/documents/embeddings/status埋め込みの状態を確認する
POST /api/documents/embeddings/regenerate埋め込みを再生成する

ベストプラクティス

  • 現在の作業に必要なファイルだけをアップロードします。
  • テキストベースの PDF を優先します。スキャン PDF もビジョンモデルで処理できますが、ページごとにモデル呼び出しのコストが発生します。
  • 埋め込みモデルを変更したら、埋め込みを再生成します。
  • セマンティック検索で有用なコンテキストを見逃す場合は、類似度しきい値を下げます。
  • 結果にノイズが多いと感じる場合は、しきい値を上げます。

関連ドキュメント