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

Meilisearch

设置 Meilisearch 以在 LibreChat 中启用对话搜索

Meilisearch 是一个开源搜索引擎,为 LibreChat 的对话搜索提供支持,增加了全文搜索、容错纠错以及跨历史对话的即时结果显示功能。有关功能概述,请参阅 LibreChat 中的搜索

连接方式

LibreChat 通过几个环境变量使用 HTTP 与 Meilisearch 进行通信。Docker 设置会为您提供一个作为服务运行的 Meilisearch。源码安装则将 LibreChat 指向您自己运行的 Meilisearch 进程。

配置 Meilisearch

默认的 docker-compose.yml 已经包含了 meilisearch 服务,因此你只需要在 .env 文件中启用搜索并设置一个主密钥(master key)即可。

生成一个主密钥 (master key)。 使用任何足够长且随机的字符串(16 字节或以上)。例如:

openssl rand -base64 32

将搜索变量添加到 .env 中。 Compose 文件将 MEILI_HOST 设置为 api 容器的内部服务地址,因此您无需在此处设置主机。请确保主密钥与 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

生成一个主密钥 (master key)。 Meilisearch 可以为你生成一个:

./meilisearch --generate-master-key

复制生成的密钥;你将在后续步骤中重复使用它。

启动 Meilisearch。 使用你的主密钥(master key)运行它。它默认监听 7700 端口。

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

将搜索变量添加到 .envMEILI_HOST 指向 Meilisearch 进程,并使用您在上面设置的相同主密钥。

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_KEY用于 Meilisearch 身份验证的共享密钥。必须与 Meilisearch 启动时使用的密钥一致。
MEILI_NO_ANALYTICS禁用 Meilisearch 的匿名遥测。设置为 true
MEILI_NO_SYNC参见 多节点设置

在多节点设置中禁用同步

如果您以节点集群或多节点部署方式运行 LibreChat,请将 MEILI_NO_SYNC 设置为 true,以便仅由一个实例处理索引。这可以防止跨实例同步数据库文档的冗余操作,并避免由此带来的不必要资源消耗。

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 缺少数据时
  • 在恢复 MongoDB 备份且没有匹配的 Meilisearch 数据之后

高级同步选项。 重置后,可以通过以下环境变量控制同步行为:

变量默认值描述
MEILI_SYNC_BATCH_SIZE100每批次同步的文档数量。
MEILI_SYNC_DELAY_MS100同步批次之间的延迟,以毫秒为单位。
MEILI_SYNC_THRESHOLD1000触发同步前未同步文档的最小数量。

这篇指南怎么样?