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.yml và deploy-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:8000Cung 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-exampleKhởi chạy các container.
docker compose up -dSử 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_xxxxxxxxxxxxxxxxxxxxxxxChuyể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:latestKhởi chạy các container.
docker compose up -dSử 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-textChuyể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 -dLite 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
| Key | Type | Description | Example |
|---|---|---|---|
| RAG_API_URL | string | URL của dịch vụ RAG API. | RAG_API_URL=http://host.docker.internal:8000 |
| RAG_OPENAI_API_KEY | string | Khóa API OpenAI cho embeddings. Ghi đè lên OPENAI_API_KEY cho RAG. | # RAG_OPENAI_API_KEY=sk-your-key |
| RAG_OPENAI_BASEURL | string | URL cơ sở OpenAI tùy chỉnh cho các embedding RAG. | # RAG_OPENAI_BASEURL= |
| RAG_USE_FULL_CONTEXT | boolean | Lấ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_PROVIDER | string | Nhà cung cấp Embeddings: openai, azure, huggingface, huggingfacetei, hoặc ollama. Mặc định: openai. | # EMBEDDINGS_PROVIDER=openai |
| EMBEDDINGS_MODEL | string | Mô 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_PORT | number | Cổng nơi RAG API chạy. Mặc định: 8000. | # RAG_PORT=8000 |
| RAG_HOST | string | Hostname cho RAG API. Mặc định: 0.0.0.0. | # RAG_HOST=0.0.0.0 |
| COLLECTION_NAME | string | Tên bộ sưu tập vector store. Mặc định: testcollection. | # COLLECTION_NAME=testcollection |
| CHUNK_SIZE | number | Kích thước của các đoạn văn bản. Mặc định: 1500. | # CHUNK_SIZE=1500 |
| CHUNK_OVERLAP | number | Độ chồng lấp giữa các đoạn. Mặc định: 100. | # CHUNK_OVERLAP=100 |
| OLLAMA_BASE_URL | string | URL 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.
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.
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.
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
.envcủ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?
Sử dụng Token
Phần này hướng dẫn cách theo dõi và kiểm soát việc sử dụng token trong LibreChat. Bạn sẽ học cách xem ngữ cảnh và chi phí, cấu hình giao dịch, bật số dư người dùng và thêm tín dụng vào tài khoản.
Tổng quan
Khám phá các tính năng của LibreChat, bao gồm các agent, tích hợp MCP, thực thi mã, trò chuyện đa phương thức và nhiều tính năng khác.