Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

Meilisearch

LibreChatで会話検索を有効にするためにMeilisearchをセットアップする

Meilisearchは、LibreChatの会話検索を強化するオープンソースの検索エンジンであり、過去の会話全体に対する全文検索、あいまい検索(typo tolerance)、およびインスタント検索機能を追加します。機能の概要については、Search in LibreChat を参照してください。

接続方法

LibreChatは、いくつかの環境変数を使用してHTTP経由でMeilisearchと通信します。Dockerセットアップでは、Meilisearchがサービスとして同梱されています。ソースインストールでは、自身で実行するMeilisearchプロセスに対してLibreChatを設定します。

Meilisearch の設定

デフォルトの docker-compose.yml にはすでに meilisearch サービスが含まれているため、検索を有効にして .env ファイルにマスターキーを設定するだけで済みます。

マスターキーを生成します。 十分な長さのランダムな文字列(16バイト以上)を使用してください。例:

openssl rand -base64 32

.env に検索変数を追加します。 Compose ファイルによって MEILI_HOSTapi コンテナの内部サービスアドレスに設定されるため、ここでホストを設定する必要はありません。マスターキーは meilisearch サービスで使用しているものと同一にしてください。

SEARCH=true
MEILI_NO_ANALYTICS=true
MEILI_MASTER_KEY=<your_master_key>

Meilisearchサービスにマスターキーを渡します。 バンドルされているmeilisearchサービスは.envを読み込まないため、docker-compose.override.ymlを通じて追加してください。これにより、LibreChatとMeilisearchの両方で同じキーを使用できるようになります。

services:
  meilisearch:
    environment:
      - MEILI_MASTER_KEY=${MEILI_MASTER_KEY}

オーバーライドファイルがどのようにマージされるかについては、Docker Override を参照してください。

スタックを開始します。 Composeはオーバーライドを自動的にマージし、LibreChatと並行してMeilisearchを起動します。

docker compose up -d

ポートを内部に維持する

コンテナは内部の Docker ネットワーク経由で Meilisearch に到達するため、ポート 7700 をホストに公開する必要はありません。公開すると、検索データが脆弱になる可能性があります。

ソースからLibreChatを実行する場合は、Meilisearchバイナリを別のプロセスとして実行し、LibreChatからそのプロセスを指定してください。

Meilisearchをダウンロードします。 Meilisearch releases page から、お使いのオペレーティングシステム用の最新リリースを取得してください。例として、meilisearch-linux-amd64.tar.gz (Linux)、meilisearch-macos-amd64 (macOS)、または meilisearch-windows-amd64.zip (Windows) などがあります。任意のディレクトリに展開してください。パッケージマネージャーを使用したインストールについては、Meilisearch installation guide を参照してください。

バイナリを実行可能にします (Linux/macOS)。 抽出先のディレクトリから、以下を実行してください:

chmod +x meilisearch

マスターキーを生成します。 Meilisearchは自動的に生成することができます:

./meilisearch --generate-master-key

生成されたキーをコピーしてください。次のステップで再利用します。

Meilisearchを起動します。 マスターキーを指定して実行してください。デフォルトではポート 7700 でリッスンします。

./meilisearch --master-key=<your_master_key>

Add the search variables to .env. Point MEILI_HOST at the Meilisearch process and use the same master key you set above.

SEARCH=true
MEILI_NO_ANALYTICS=true
MEILI_HOST=http://localhost:7700
MEILI_MASTER_KEY=<your_master_key>

LibreChatを起動します。 アプリを起動または再起動して、新しい設定を反映させます。

npm run backend

Meilisearchを起動し続ける

会話検索はMeilisearchが実行されている間のみ機能します。再起動後も継続して動作するように、マネージドサービスまたはコンテナとして実行してください。

設定が完了すると、LibreChatは会話やメッセージをMeilisearchにインデックスし、検索バーからタイプミスを許容する全文検索結果が返されるようになります。

環境変数

変数説明
SEARCH会話検索機能を有効にします。true に設定してください。
MEILI_HOSTLibreChatがMeilisearchに接続するためのURLです。Dockerでは http://meilisearch:7700 (Composeで設定)となり、ソースから実行する場合は通常 http://localhost:7700 となります。
MEILI_MASTER_KEYMeilisearchとの認証に使用される共有シークレットです。Meilisearchの起動時に指定したキーと一致させる必要があります。
MEILI_NO_ANALYTICSMeilisearchの匿名テレメトリを無効にします。true に設定してください。
MEILI_NO_SYNCマルチノードセットアップでの同期無効化 を参照してください。

マルチノード構成で同期を無効にする

LibreChatをノードクラスターまたはマルチノード構成で実行する場合は、MEILI_NO_SYNCtrue に設定して、1つのインスタンスのみがインデックス作成を処理するようにしてください。これにより、インスタンス間でのデータベースドキュメントの冗長な同期と、それに伴う不要なリソース消費を防ぐことができます。

MEILI_NO_SYNC=true

同期の再設定

Meilisearchのデータが削除または破損した場合、あるいはLibreChatが実際には同期されていないにもかかわらずすべて同期済みとして扱う場合(Meilisearchのアップグレード後やデータファイルの削除後など)、リセットスクリプトを使用して強制的に完全再同期を行ってください。これによりMongoDB内の同期フラグがリセットされ、次回の起動時または同期チェック時にLibreChatがすべての会話とメッセージを再インデックスするようになります。

リセットスクリプトを実行します。 セットアップ環境に一致するコマンドを使用してください。

# Local development
npm run reset-meili-sync

# Docker (default setup)
docker compose exec api npm run reset-meili-sync

# Docker (deployment setup)
docker exec -it LibreChat-API /bin/sh -c "cd .. && npm run reset-meili-sync"

LibreChatを再起動します。 アプリが再起動すると、再同期が開始されます。

このスクリプトは、MongoDB内のすべてのメッセージと会話に対して _meiliIndex フラグを false にリセットし、リセットされたドキュメントの数と、同期が必要な残りのドキュメントの数を報告します。

使用するタイミング:

  • Meilisearchのデータファイルを削除した後
  • Meilisearchを再インデックスが必要なバージョンにアップグレードする場合
  • LibreChatで会話が完全に同期されていると表示されるにもかかわらず、Meilisearchのデータが欠落している場合
  • Meilisearchのデータと一致しないMongoDBのバックアップを復元した後

高度な同期オプション。 リセット後、以下の環境変数を使用して同期の動作を制御できます:

変数デフォルト説明
MEILI_SYNC_BATCH_SIZE1001バッチあたりに同期されるドキュメントの数。
MEILI_SYNC_DELAY_MS100同期バッチ間の遅延(ミリ秒単位)。
MEILI_SYNC_THRESHOLD1000同期がトリガーされるまでに必要な、同期されていないドキュメントの最小数。

このガイドはいかがでしたか?