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

API RAG

Cấu hình API Retrieval-Augmented Generation (RAG) để lập chỉ mục và truy xuất tài liệu bằng Langchain và FastAPI. API này tích hợp với LibreChat để cung cấp các phản hồi dựa trên ngữ cảnh từ các tệp do người dùng tải lên.

RAG API lập chỉ mục các tệp do người dùng tải lên và truy xuất các đoạn văn bản liên quan để tăng cường cho các prompt của bạn, giúp LibreChat đưa ra các phản hồi có nhận thức về ngữ cảnh dựa trên tài liệu của bạn. Nó chạy như một dịch vụ FastAPI riêng biệt được hỗ trợ bởi cơ sở dữ liệu PostgreSQL + pgvector.

Bạn mới làm quen với RAG?

RAG API Presentation giải thích chi tiết hơn về khái niệm này và cung cấp liên kết đến một video hữu ích. Trang này bao gồm phần thiết lập và cấu hình.

Tính khả dụng

RAG hoạt động với Agents, cũng như các Custom Endpoints, OpenAI, Azure OpenAI, Anthropic và Google.

OpenAI Assistants có cơ chế RAG riêng thông qua khả năng "Retrieval" (chi tiết tại đây). Việc sử dụng RAG API với Assistants API vẫn rất đáng giá vì OpenAI tính phí cho cả lưu trữ tệp và Retrieval. Tích hợp này đã được lên kế hoạch cho một bản cập nhật trong tương lai.

Docker Quick Start

Đối với Docker, RAG API đã được thiết lập sẵn trong cả hai tệp docker-compose.ymldeploy-compose.yml mặc định, bao gồm cả giá trị RAG_API_URL. Bạn chỉ cần đảm bảo rằng mình đang chạy image và các tệp compose mới nhất. Hãy xem Hướng dẫn cập nhật LibreChat cho Docker nếu bạn không chắc chắn về cách cập nhật.

Tệp .env dùng chung

Với thiết lập Docker mặc định, tệp .env được chia sẻ giữa LibreChat và RAG API. Hãy định nghĩa các biến RAG trong cùng tệp đó. Danh sách đầy đủ nằm trong RAG API README.

Chọn nhà cung cấp embeddings mà bạn muốn sử dụng.

Sử dụng RAG với OpenAI embeddings. Đây là cấu hình mặc định.

Thiết lập RAG API URL. Thêm nội dung sau vào tệp .env của bạn:

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

Cung cấp khóa API OpenAI (nếu cần). Nếu khóa API OpenAI của bạn được đặt thành user_provided, hãy thêm một khóa cho embeddings. Bỏ qua bước này nếu bạn đã cung cấp khóa OpenAI trong tệp .env của mình.

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

Khởi chạy các container.

docker compose up -d

Sử dụng RAG với các embedding của Hugging Face.

Cấu hình nhà cung cấp. Thêm nội dung sau vào tệp .env của bạn:

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

Chuyển sang image RAG API đầy đủ. Cập nhật tệp docker-compose.override.yml của bạn:

version: '3.4'

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

Khởi chạy các container.

docker compose up -d

Sử dụng RAG với các embedding cục bộ của Ollama.

Điều kiện tiên quyết

Bạn cần có Ollama và mô hình nhúng nomic-embed-text. Hãy tải nó về bằng lệnh ollama pull nomic-embed-text.

Cấu hình nhà cung cấp. Thêm nội dung sau vào tệp .env của bạn:

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

Chuyển sang image RAG API đầy đủ. Cập nhật tệp docker-compose.override.yml của bạn:

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"

Khởi chạy các container.

docker compose up -d

Lite so với full image

Docker mặc định sử dụng image "lite" của RAG API (registry.librechat.ai/danny-avila/librechat-rag-api-dev-lite:latest), chỉ hỗ trợ các embedding từ xa từ OpenAI hoặc dịch vụ HuggingFace/Ollama từ xa mà bạn đã cấu hình.

Đối với local embeddings, hãy chuyển đổi image trong file compose sang bản build đầy đủ, registry.librechat.ai/danny-avila/librechat-rag-api-dev:latest. Hãy thực hiện thay đổi này trong Docker Compose Override File của bạn. Xem docker-compose.override.yml.example tại thư mục gốc của dự án để biết ví dụ.

Nếu bạn muốn một tệp compose chỉ bao gồm cơ sở dữ liệu PostgreSQL + pgvector và Python API, hãy xem rag.yml tại thư mục gốc của dự án.

Lưu trữ cơ sở dữ liệu

Các tệp compose mặc định lưu trữ dữ liệu pgvector/PostgreSQL trong volume pgdata2 do Docker quản lý. Điều này là có chủ đích: các tệp cơ sở dữ liệu không cần phải chỉnh sửa trực tiếp từ máy chủ (host) và volume được quản lý giúp tránh các vấn đề phổ biến về quyền sở hữu và quyền truy cập. Các tệp mà người dùng có thể chỉnh sửa (tệp tải lên, nhật ký, hình ảnh, dữ liệu MongoDB và cấu hình NGINX) được bind-mount vào các thư mục dự án nơi việc truy cập trực tiếp từ máy chủ là hữu ích.

Thiết lập cục bộ

Thiết lập không sử dụng container đòi hỏi thao tác thủ công nhiều hơn. Hãy làm theo các hướng dẫn trong RAG API repo.

Thiết lập RAG_API_URL trong tệp .env của LibreChat của bạn tới bất kỳ nơi nào mà API có thể truy cập được từ thiết lập của bạn. Điều này khác với Docker, nơi giá trị đã được thiết lập sẵn trong tệp docker-compose.yml mặc định.

Cấu hình

Thiết lập các tùy chọn RAG API thông qua các biến môi trường trong tệp .env mà API có thể truy cập. Hầu hết các tùy chọn này là không bắt buộc, ngoại trừ thông tin xác thực và đường dẫn được yêu cầu bởi nhà cung cấp mà bạn đã chọn. Trong thiết lập mặc định, chỉ cần RAG_OPENAI_API_KEY là bắt buộc.

Các biến môi trường

KeyTypeDescriptionExample
RAG_API_URLstringURL của dịch vụ RAG API.RAG_API_URL=http://host.docker.internal:8000
RAG_OPENAI_API_KEYstringKhóa API OpenAI cho embeddings. Ghi đè lên OPENAI_API_KEY cho RAG.# RAG_OPENAI_API_KEY=sk-your-key
RAG_OPENAI_BASEURLstringURL cơ sở OpenAI tùy chỉnh cho các embedding RAG.# RAG_OPENAI_BASEURL=
RAG_USE_FULL_CONTEXTbooleanLấy toàn bộ ngữ cảnh tệp thay vì 4 kết quả hàng đầu. Mặc định: false.# RAG_USE_FULL_CONTEXT=true
EMBEDDINGS_PROVIDERstringNhà cung cấp Embeddings: openai, azure, huggingface, huggingfacetei, hoặc ollama. Mặc định: openai.# EMBEDDINGS_PROVIDER=openai
EMBEDDINGS_MODELstringMô hình Embeddings cần sử dụng. Mặc định phụ thuộc vào nhà cung cấp.# EMBEDDINGS_MODEL=text-embedding-3-small
RAG_PORTnumberCổng nơi RAG API chạy. Mặc định: 8000.# RAG_PORT=8000
RAG_HOSTstringHostname cho RAG API. Mặc định: 0.0.0.0.# RAG_HOST=0.0.0.0
COLLECTION_NAMEstringTên bộ sưu tập vector store. Mặc định: testcollection.# COLLECTION_NAME=testcollection
CHUNK_SIZEnumberKích thước của các đoạn văn bản. Mặc định: 1500.# CHUNK_SIZE=1500
CHUNK_OVERLAPnumberĐộ chồng lấp giữa các đoạn. Mặc định: 100.# CHUNK_OVERLAP=100
OLLAMA_BASE_URLstringURL cơ sở của Ollama khi sử dụng các embedding của Ollama.# OLLAMA_BASE_URL=http://host.docker.internal:11434

Thứ tự ưu tiên thông tin xác thực

OPENAI_API_KEY hoạt động cho các embedding RAG, nhưng RAG_OPENAI_API_KEY sẽ ghi đè lên nó để tránh xung đột thông tin xác thực.

Để xem danh sách đầy đủ các biến và mô tả của chúng, hãy xem RAG API repo.

Cách sử dụng

Khi RAG API đang chạy, nó sẽ tự động tích hợp với LibreChat. Khi người dùng tải tệp lên một cuộc trò chuyện, API sẽ lập chỉ mục các tệp đó và sử dụng chúng để đưa ra các phản hồi dựa trên ngữ cảnh.

Tải tệp lên cuộc trò chuyện. Nếu RAG_API_URL chưa được cấu hình hoặc không thể truy cập được, quá trình tải lên sẽ thất bại.

Trò chuyện như bình thường. Khi người dùng tương tác với mô hình, RAG API sẽ truy xuất các đoạn văn bản liên quan từ các tệp đã được lập chỉ mục dựa trên đầu vào và sử dụng chúng để tăng cường cho prompt.

Kiểm soát thời điểm truy vấn tệp. Theo mặc định, vector store sẽ được truy vấn trên mỗi tin nhắn mới trong một cuộc trò chuyện có đính kèm tệp. Hãy soạn thảo các prompt của bạn cho phù hợp.

Tắt Resend Files trong cài đặt cuộc trò chuyện để chỉ truy vấn tệp khi chúng được đính kèm rõ ràng vào tin nhắn.

Nút gạt Resend Files trong cài đặt cuộc trò chuyện

Tái sử dụng các tệp đã lập chỉ mục. Tải tệp lên một lần, sau đó đính kèm tệp đó vào bất kỳ tin nhắn hoặc cuộc trò chuyện mới nào từ Side Panel.

Đính kèm các tệp đã lập chỉ mục từ Bảng điều khiển bên

Các tệp phải nằm trong bộ nhớ "Host". Các tệp "OpenAI" được xử lý khác biệt và chỉ dành riêng cho Assistants, vì vậy chúng không được phép tải lên trong khi endpoint Assistants đang được chọn và kích hoạt. Xem và quản lý các tệp của bạn từ Side Panel.

Xem và quản lý các tệp từ Bảng điều khiển bên

Khắc phục sự cố

Nếu bạn gặp sự cố khi thiết lập hoặc sử dụng RAG API:

  • Xác nhận tất cả các biến môi trường bắt buộc đã được thiết lập chính xác trong tệp .env của bạn.
  • Hãy đảm bảo rằng cơ sở dữ liệu vector đã được cấu hình và có thể truy cập được.
  • Xác minh rằng khóa API OpenAI hoặc thông tin xác thực của nhà cung cấp khác là hợp lệ.
  • Kiểm tra cả nhật ký của LibreChat và RAG API để tìm lỗi hoặc cảnh báo.

Nếu sự cố vẫn tiếp diễn, hãy tham khảo tài liệu RAG API hoặc hỏi cộng đồng LibreChat trên GitHub Discussions hoặc Discord.

Hướng dẫn này thế nào?