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

API RAG

Skonfiguruj API Retrieval-Augmented Generation (RAG) do indeksowania i pobierania dokumentów przy użyciu Langchain i FastAPI. To API integruje się z LibreChat, aby zapewniać odpowiedzi uwzględniające kontekst na podstawie plików przesłanych przez użytkownika.

API RAG indeksuje przesłane przez użytkownika pliki i pobiera odpowiednie fragmenty w celu wzbogacenia Twoich promptów, zapewniając LibreChat odpowiedzi uwzględniające kontekst i oparte na Twoich dokumentach. Działa jako oddzielna usługa FastAPI wspierana przez bazę danych PostgreSQL + pgvector.

Dopiero zaczynasz z RAG?

Prezentacja RAG API wyjaśnia tę koncepcję bardziej szczegółowo i zawiera link do pomocnego filmu. Ta strona obejmuje konfigurację i ustawienia.

Dostępność

RAG działa z Agents, a także z Custom Endpoints, OpenAI, Azure OpenAI, Anthropic oraz Google.

Asystenci OpenAI posiadają własną implementację RAG poprzez funkcję "Retrieval" (szczegóły tutaj). Korzystanie z API RAG wraz z Assistants API jest nadal opłacalne, ponieważ OpenAI pobiera opłaty zarówno za przechowywanie plików, jak i za funkcję Retrieval. Ta integracja jest planowana w przyszłej aktualizacji.

Szybki start z Docker

W przypadku Docker, API RAG jest już skonfigurowane zarówno w domyślnym pliku docker-compose.yml, jak i deploy-compose.yml, włącznie z wartością RAG_API_URL. Musisz jedynie upewnić się, że używasz najnowszego obrazu oraz plików compose. Jeśli nie masz pewności, jak przeprowadzić aktualizację, zapoznaj się z przewodnikiem aktualizacji LibreChat dla Docker.

Współdzielony plik .env

W domyślnej konfiguracji Docker, plik .env jest współdzielony między LibreChat a RAG API. Zdefiniuj zmienne RAG w tym samym pliku. Pełna lista znajduje się w RAG API README.

Wybierz dostawcę embeddings, którego chcesz użyć.

Użyj RAG z embeddingami OpenAI. Jest to konfiguracja domyślna.

Ustaw adres URL API RAG. Dodaj poniższy wpis do swojego pliku .env:

RAG_API_URL=http://host.docker.internal:8000

Podaj klucz API OpenAI (jeśli jest wymagany). Jeśli Twój klucz API OpenAI jest ustawiony na user_provided, dodaj klucz dla embeddingów. Pomiń ten krok, jeśli klucz OpenAI został już podany w pliku .env.

RAG_OPENAI_API_KEY=sk-your-openai-api-key-example

Uruchom kontenery.

docker compose up -d

Używaj RAG z embeddingami Hugging Face.

Skonfiguruj dostawcę. Dodaj poniższe informacje do swojego pliku .env:

RAG_API_URL=http://host.docker.internal:8000
EMBEDDINGS_PROVIDER=huggingface
HF_TOKEN=hf_xxxxxxxxxxxxxxxxxxxxxxx

Przełącz się na pełny obraz RAG API. Zaktualizuj swój plik docker-compose.override.yml:

version: '3.4'

services:
  rag_api:
    image: registry.librechat.ai/danny-avila/librechat-rag-api-dev:latest

Uruchom kontenery.

docker compose up -d

Użyj RAG z lokalnymi embeddingami Ollama.

Wymagania wstępne

Potrzebujesz Ollama oraz modelu osadzeń nomic-embed-text. Pobierz go za pomocą ollama pull nomic-embed-text.

Skonfiguruj dostawcę. Dodaj poniższe informacje do swojego pliku .env:

RAG_API_URL=http://host.docker.internal:8000
EMBEDDINGS_PROVIDER=ollama
OLLAMA_BASE_URL=http://host.docker.internal:11434
EMBEDDINGS_MODEL=nomic-embed-text

Przełącz się na pełny obraz RAG API. Zaktualizuj swój plik docker-compose.override.yml:

version: '3.4'

services:
  rag_api:
    image: registry.librechat.ai/danny-avila/librechat-rag-api-dev:latest
    # If running on Linux
    # extra_hosts:
    #   - "host.docker.internal:host-gateway"

Uruchom kontenery.

docker compose up -d

Wersja Lite a pełny obraz

Docker domyślnie używa obrazu "lite" dla RAG API (registry.librechat.ai/danny-avila/librechat-rag-api-dev-lite:latest), który obsługuje wyłącznie zdalne embeddingi z OpenAI lub zdalnej usługi HuggingFace/Ollama, którą skonfigurowałeś.

W przypadku lokalnych embeddingów, zmień obraz w pliku compose na pełną kompilację, registry.librechat.ai/danny-avila/librechat-rag-api-dev:latest. Wprowadź tę zmianę w swoim pliku Docker Compose Override. Zobacz docker-compose.override.yml.example w katalogu głównym projektu, aby uzyskać przykład.

Jeśli chcesz plik compose, który zawiera tylko bazę danych PostgreSQL + pgvector oraz API w języku Python, zobacz rag.yml w katalogu głównym projektu.

Przechowywanie w bazie danych

Domyślne pliki compose przechowują dane pgvector/PostgreSQL w zarządzanym przez Docker wolumenie pgdata2. Jest to zamierzone: plików bazy danych nie trzeba edytować bezpośrednio z poziomu hosta, a zarządzany wolumen pozwala uniknąć typowych problemów z własnością i uprawnieniami. Pliki dostępne dla użytkownika, które można edytować (przesłane pliki, logi, obrazy, dane MongoDB oraz konfiguracja NGINX), są montowane jako bind-mount do folderów projektu, gdzie bezpośredni dostęp z hosta jest przydatny.

Konfiguracja lokalna

Konfiguracja bez użycia kontenerów wymaga więcej pracy ręcznej. Postępuj zgodnie z instrukcjami w repozytorium RAG API.

Ustaw RAG_API_URL w pliku .env aplikacji LibreChat na adres, pod którym API jest dostępne z poziomu Twojej konfiguracji. Różni się to od Docker, gdzie wartość ta jest już ustawiona w domyślnym pliku docker-compose.yml.

Konfiguracja

Ustaw opcje RAG API za pomocą zmiennych środowiskowych w pliku .env dostępnym dla API. Większość z nich jest opcjonalna, poza danymi uwierzytelniającymi i ścieżkami wymaganymi przez wybranego dostawcę. W domyślnej konfiguracji wymagany jest tylko RAG_OPENAI_API_KEY.

Zmienne środowiskowe

KeyTypeDescriptionExample
RAG_API_URLstringURL usługi RAG API.RAG_API_URL=http://host.docker.internal:8000
RAG_OPENAI_API_KEYstringKlucz API OpenAI dla osadzeń (embeddings). Nadpisuje OPENAI_API_KEY dla RAG.# RAG_OPENAI_API_KEY=sk-your-key
RAG_OPENAI_BASEURLstringNiestandardowy bazowy adres URL OpenAI dla osadzeń RAG.# RAG_OPENAI_BASEURL=
RAG_USE_FULL_CONTEXTbooleanPobierz cały kontekst pliku zamiast 4 najlepszych wyników. Domyślnie: false.# RAG_USE_FULL_CONTEXT=true
EMBEDDINGS_PROVIDERstringDostawca Embeddings: openai, azure, huggingface, huggingfacetei lub ollama. Domyślnie: openai.# EMBEDDINGS_PROVIDER=openai
EMBEDDINGS_MODELstringModel embeddingów do użycia. Wartość domyślna zależy od dostawcy.# EMBEDDINGS_MODEL=text-embedding-3-small
RAG_PORTnumberPort, na którym działa RAG API. Domyślnie: 8000.# RAG_PORT=8000
RAG_HOSTstringNazwa hosta dla RAG API. Domyślnie: 0.0.0.0.# RAG_HOST=0.0.0.0
COLLECTION_NAMEstringNazwa kolekcji w magazynie wektorowym. Domyślnie: testcollection.# COLLECTION_NAME=testcollection
CHUNK_SIZEnumberRozmiar fragmentów tekstu. Domyślnie: 1500.# CHUNK_SIZE=1500
CHUNK_OVERLAPnumberNakładanie się fragmentów. Domyślnie: 100.# CHUNK_OVERLAP=100
OLLAMA_BASE_URLstringBazowy adres URL Ollama podczas korzystania z osadzeń (embeddings) Ollama.# OLLAMA_BASE_URL=http://host.docker.internal:11434

Pierwszeństwo poświadczeń

OPENAI_API_KEY działa w przypadku osadzeń RAG, ale RAG_OPENAI_API_KEY nadpisuje tę wartość, aby uniknąć konfliktów poświadczeń.

Pełną listę zmiennych oraz ich opisy można znaleźć w repozytorium RAG API.

Użycie

Gdy RAG API jest uruchomione, integruje się ono z LibreChat automatycznie. Kiedy użytkownik przesyła pliki do konwersacji, API indeksuje je i wykorzystuje do generowania odpowiedzi uwzględniających kontekst.

Przesyłaj pliki do konwersacji. Jeśli RAG_API_URL nie jest skonfigurowany lub jest nieosiągalny, przesyłanie zakończy się niepowodzeniem.

Czatuj jak zwykle. Gdy użytkownik wchodzi w interakcję z modelem, API RAG pobiera odpowiednie fragmenty z zaindeksowanych plików na podstawie danych wejściowych i wykorzystuje je do rozszerzenia promptu.

Kontroluj, kiedy pliki są przeszukiwane. Domyślnie baza wektorowa jest przeszukiwana przy każdej nowej wiadomości w konwersacji, do której dołączono plik. Formułuj swoje prompty odpowiednio do tego zachowania.

Wyłącz Resend Files w ustawieniach konwersacji, aby wysyłać zapytania dotyczące plików tylko wtedy, gdy są one wyraźnie dołączone do wiadomości.

Przełącznik przesyłania plików w ustawieniach konwersacji

Używaj ponownie zindeksowanych plików. Prześlij plik raz, a następnie dołącz go do dowolnej nowej wiadomości lub konwersacji z poziomu panelu bocznego (Side Panel).

Dołączanie zindeksowanych plików z panelu bocznego

Pliki muszą znajdować się w pamięci "Host". Pliki "OpenAI" są traktowane inaczej i są przeznaczone wyłącznie dla Asystentów, więc nie mogły zostać przesłane, gdy punkt końcowy (endpoint) Assistants był wybrany i aktywny. Przeglądaj i zarządzaj swoimi plikami z poziomu Panelu bocznego.

Przeglądanie i zarządzanie plikami z panelu bocznego

Rozwiązywanie problemów

Jeśli napotkasz problemy z konfiguracją lub używaniem RAG API:

  • Upewnij się, że wszystkie wymagane zmienne środowiskowe są poprawnie ustawione w pliku .env.
  • Upewnij się, że baza danych wektorowych jest skonfigurowana i dostępna.
  • Zweryfikuj, czy klucz API OpenAI lub inne dane uwierzytelniające dostawcy są poprawne.
  • Sprawdź zarówno logi LibreChat, jak i RAG API pod kątem błędów lub ostrzeżeń.

Jeśli problem nadal występuje, zapoznaj się z dokumentacją RAG API lub zapytaj społeczność LibreChat na GitHub Discussions lub Discordzie.

Jaka jest ta instrukcja?