Meilisearch
LibreChat에서 대화 검색을 활성화하기 위해 Meilisearch 설정하기
Meilisearch는 LibreChat의 대화 검색 기능을 구동하는 오픈 소스 검색 엔진으로, 과거 대화 전반에 걸쳐 전문 검색(full-text search), 오타 허용, 즉각적인 결과 표시 기능을 추가합니다. 기능 개요는 Search in LibreChat을 참조하세요.
연결 방식
LibreChat은 몇 가지 환경 변수를 사용하여 HTTP를 통해 Meilisearch와 통신합니다. Docker 설정은 Meilisearch를 서비스로 제공합니다. 소스 설치의 경우, 직접 실행하는 Meilisearch 프로세스를 LibreChat이 가리키도록 설정해야 합니다.
Meilisearch 구성
기본 docker-compose.yml에는 이미 meilisearch 서비스가 포함되어 있으므로, .env 파일에서 검색 기능을 활성화하고 마스터 키를 설정하기만 하면 됩니다.
마스터 키를 생성합니다. 충분히 긴 임의의 문자열(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 릴리스 페이지에서 운영 체제에 맞는 최신 릴리스를 받으세요. 예를 들어 meilisearch-linux-amd64.tar.gz (Linux), meilisearch-macos-amd64 (macOS) 또는 meilisearch-windows-amd64.zip (Windows)가 있습니다. 원하는 디렉토리에 압축을 푸세요. 패키지 관리자를 통한 설치는 Meilisearch 설치 가이드를 참조하세요.
바이너리를 실행 가능하게 만듭니다 (Linux/macOS). 압축을 푼 디렉토리에서 다음을 실행하세요:
chmod +x meilisearch마스터 키를 생성합니다. Meilisearch에서 직접 생성할 수 있습니다:
./meilisearch --generate-master-key생성된 키를 복사하세요. 다음 단계에서 이 키를 다시 사용하게 됩니다.
Meilisearch를 시작합니다. 마스터 키를 사용하여 실행하세요. 기본적으로 7700 포트에서 수신 대기합니다.
./meilisearch --master-key=<your_master_key>.env에 검색 변수를 추가합니다. MEILI_HOST가 Meilisearch 프로세스를 가리키도록 설정하고, 위에서 설정한 것과 동일한 마스터 키를 사용하세요.
SEARCH=true
MEILI_NO_ANALYTICS=true
MEILI_HOST=http://localhost:7700
MEILI_MASTER_KEY=<your_master_key>LibreChat 시작하기. 앱을 시작하거나 재시작하여 새로운 구성을 적용합니다.
npm run backendMeilisearch 계속 실행하기
대화 검색은 Meilisearch가 실행 중일 때만 작동합니다. 재시작 후에도 계속 유지되도록 관리형 서비스나 컨테이너로 실행하세요.
설정이 완료되면, LibreChat은 대화와 메시지를 Meilisearch에 인덱싱하며, 검색창은 오타 허용 기능이 포함된 전체 텍스트 검색 결과를 반환합니다.
환경 변수
| 변수 | 설명 |
|---|---|
SEARCH | 대화 검색 기능을 활성화합니다. true로 설정하세요. |
MEILI_HOST | LibreChat이 Meilisearch에 연결할 URL입니다. Docker에서는 http://meilisearch:7700 (Compose에 의해 설정됨)이며, 소스에서 실행할 경우 일반적으로 http://localhost:7700입니다. |
MEILI_MASTER_KEY | Meilisearch 인증에 사용되는 공유 비밀 키입니다. Meilisearch가 시작될 때 사용하는 키와 일치해야 합니다. |
MEILI_NO_ANALYTICS | Meilisearch의 익명 원격 분석(telemetry)을 비활성화합니다. true로 설정하세요. |
MEILI_NO_SYNC | 다중 노드 설정을 참조하세요. |
다중 노드 설정에서 동기화 비활성화하기
LibreChat을 노드 클러스터나 다중 노드 배포 환경에서 실행하는 경우, MEILI_NO_SYNC를 true로 설정하여 하나의 인스턴스만 인덱싱을 처리하도록 하십시오. 이렇게 하면 인스턴스 간 데이터베이스 문서의 중복 동기화를 방지하고 불필요한 리소스 사용을 줄일 수 있습니다.
MEILI_NO_SYNC=true동기화 재설정
Meilisearch 데이터가 삭제되거나 손상된 경우, 또는 LibreChat이 실제로는 동기화되지 않았음에도 모든 항목이 동기화된 것으로 처리하는 경우(예: Meilisearch 업그레이드 후 또는 데이터 파일 삭제 후), 전체 재동기화를 강제하기 위해 리셋 스크립트를 사용하십시오. 이 스크립트는 MongoDB의 동기화 플래그를 초기화하여, 다음 시작 또는 동기화 확인 시 LibreChat이 모든 대화와 메시지를 다시 인덱싱하도록 트리거합니다.
reset 스크립트를 실행합니다. 설정에 맞는 명령어를 사용하세요.
# 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_SIZE | 100 | 배치당 동기화되는 문서 수입니다. |
MEILI_SYNC_DELAY_MS | 100 | 배치 동기화 간의 지연 시간(밀리초 단위)입니다. |
MEILI_SYNC_THRESHOLD | 1000 | 동기화가 트리거되기 전까지의 최소 동기화되지 않은 문서 수입니다. |
이 가이드는 어떤가요?