API de RAG
Configure la API de Generación Aumentada por Recuperación (RAG) para la indexación y recuperación de documentos utilizando Langchain y FastAPI. Esta API se integra con LibreChat para proporcionar respuestas basadas en el contexto a partir de los archivos cargados por el usuario.
La API de RAG indexa los archivos subidos por el usuario y recupera pasajes relevantes para aumentar sus prompts, brindando a LibreChat respuestas con conciencia del contexto basadas en sus documentos. Se ejecuta como un servicio de FastAPI independiente respaldado por una base de datos PostgreSQL + pgvector.
¿Nuevo en RAG?
La Presentación de la API de RAG explica el concepto con más detalle y enlaza a un video útil. Esta página cubre la configuración y los ajustes.
Disponibilidad
RAG funciona con Agents, así como con Custom Endpoints, OpenAI, Azure OpenAI, Anthropic y Google.
Los Assistants de OpenAI tienen su propia implementación de RAG a través de la capacidad "Retrieval" (detalles aquí). El uso de la API de RAG con la Assistants API sigue valiendo la pena, ya que OpenAI cobra tanto por el almacenamiento de archivos como por Retrieval. Esta integración está planificada para una futura actualización.
Inicio rápido con Docker
Para Docker, la API de RAG ya está configurada tanto en los archivos docker-compose.yml como en deploy-compose.yml predeterminados, incluyendo el valor de RAG_API_URL. Solo necesitas asegurarte de estar ejecutando la imagen y los archivos compose más recientes. Consulta la guía de actualización de LibreChat para Docker si no estás seguro de cómo actualizar.
Archivo .env compartido
Con la configuración predeterminada de Docker, el archivo .env se comparte entre LibreChat y la RAG API. Define las variables de RAG en ese mismo archivo. La lista completa se encuentra en el RAG API README.
Elija el proveedor de embeddings que desea utilizar.
Usa RAG con embeddings de OpenAI. Esta es la configuración predeterminada.
Establezca la URL de la API de RAG. Añada lo siguiente a su archivo .env:
Proporcione una clave de API de OpenAI (si es necesario). Si su clave de API de OpenAI está configurada como user_provided, añada una clave para las incrustaciones (embeddings). Omita este paso si ya suministró la clave de OpenAI en su archivo .env.
Inicia los contenedores.
Lite vs. full image
Docker utiliza la imagen "lite" de la RAG API de forma predeterminada (registry.librechat.ai/danny-avila/librechat-rag-api-dev-lite:latest), la cual solo admite embeddings remotos de OpenAI o de un servicio remoto de HuggingFace/Ollama que hayas configurado.
Para embeddings locales, cambie la imagen en el archivo compose a la compilación completa, registry.librechat.ai/danny-avila/librechat-rag-api-dev:latest. Realice este cambio en su Docker Compose Override File. Consulte docker-compose.override.yml.example en la raíz del proyecto para ver un ejemplo.
Si deseas un archivo compose que incluya solo la base de datos PostgreSQL + pgvector y la API de Python, consulta rag.yml en la raíz del proyecto.
Almacenamiento de base de datos
Los archivos compose predeterminados almacenan los datos de pgvector/PostgreSQL en el volumen pgdata2 gestionado por Docker. Esto es intencional: los archivos de la base de datos no necesitan ser editados directamente desde el host, y un volumen gestionado evita problemas comunes de propiedad y permisos. Los archivos editables orientados al usuario (cargas, registros, imágenes, datos de MongoDB y configuración de NGINX) están montados mediante bind-mount en las carpetas del proyecto donde el acceso directo desde el host es útil.
Configuración local
Una configuración sin contenedores requiere más intervención manual. Sigue las instrucciones en el RAG API repo.
Establezca RAG_API_URL en su archivo .env de LibreChat en la ubicación donde la API sea accesible desde su configuración. Esto difiere de Docker, donde el valor ya está establecido en el archivo docker-compose.yml predeterminado.
Configuración
Configure las opciones de la API de RAG a través de variables de entorno en un archivo .env accesible para la API. La mayoría son opcionales, aparte de las credenciales y rutas requeridas por el proveedor que elija. En la configuración predeterminada, solo se requiere RAG_OPENAI_API_KEY.
Variables de entorno
| Key | Type | Description | Example |
|---|---|---|---|
| RAG_API_URL | string | URL del servicio de API de RAG. | RAG_API_URL=http://host.docker.internal:8000 |
| RAG_OPENAI_API_KEY | string | Clave de API de OpenAI para embeddings. Sustituye a OPENAI_API_KEY para RAG. | # RAG_OPENAI_API_KEY=sk-your-key |
| RAG_OPENAI_BASEURL | string | URL base de OpenAI personalizada para incrustaciones RAG. | # RAG_OPENAI_BASEURL= |
| RAG_USE_FULL_CONTEXT | boolean | Obtener el contexto completo del archivo en lugar de los 4 mejores resultados. Predeterminado: false. | # RAG_USE_FULL_CONTEXT=true |
| EMBEDDINGS_PROVIDER | string | Proveedor de embeddings: openai, azure, huggingface, huggingfacetei, o ollama. Predeterminado: openai. | # EMBEDDINGS_PROVIDER=openai |
| EMBEDDINGS_MODEL | string | Modelo de embeddings a utilizar. El valor predeterminado depende del proveedor. | # EMBEDDINGS_MODEL=text-embedding-3-small |
| RAG_PORT | number | Puerto donde se ejecuta la RAG API. Predeterminado: 8000. | # RAG_PORT=8000 |
| RAG_HOST | string | Nombre de host para la API de RAG. Predeterminado: 0.0.0.0. | # RAG_HOST=0.0.0.0 |
| COLLECTION_NAME | string | Nombre de la colección del almacén de vectores. Predeterminado: testcollection. | # COLLECTION_NAME=testcollection |
| CHUNK_SIZE | number | Tamaño de los fragmentos de texto. Predeterminado: 1500. | # CHUNK_SIZE=1500 |
| CHUNK_OVERLAP | number | Superposición entre fragmentos. Predeterminado: 100. | # CHUNK_OVERLAP=100 |
| OLLAMA_BASE_URL | string | URL base de Ollama al usar embeddings de Ollama. | # OLLAMA_BASE_URL=http://host.docker.internal:11434 |
Precedencia de credenciales
OPENAI_API_KEY funciona para las incrustaciones (embeddings) de RAG, pero RAG_OPENAI_API_KEY lo anula para evitar conflictos de credenciales.
Para obtener la lista completa de variables y sus descripciones, consulte el repositorio de la RAG API.
Uso
Una vez que la RAG API esté en ejecución, se integra con LibreChat automáticamente. Cuando un usuario sube archivos a una conversación, la API los indexa y los utiliza para obtener respuestas conscientes del contexto.
Sube archivos a la conversación. Si RAG_API_URL no está configurado o no es accesible, la carga fallará.
Chatea como de costumbre. A medida que el usuario interactúa con el modelo, la API de RAG recupera pasajes relevantes de los archivos indexados según la entrada y los utiliza para aumentar el prompt.
Controla cuándo se consultan los archivos. De forma predeterminada, el almacén de vectores se consulta en cada mensaje nuevo de una conversación que tenga un archivo adjunto. Elabora tus prompts en consecuencia.
Desactiva Resend Files en la configuración de la conversación para consultar archivos solo cuando se adjunten explícitamente a un mensaje.
Reutiliza archivos indexados. Sube un archivo una vez y luego adjúntalo a cualquier mensaje o conversación nueva desde el Panel Lateral.
Los archivos deben estar en el almacenamiento "Host". Los archivos de "OpenAI" se tratan de manera diferente y son exclusivos para los Assistants, por lo que no deben haber sido cargados mientras el endpoint de Assistants estaba seleccionado y activo. Vea y gestione sus archivos desde el Panel Lateral.
Solución de problemas
Si tienes problemas al configurar o utilizar la RAG API:
- Confirme que todas las variables de entorno requeridas estén configuradas correctamente en su archivo
.env. - Asegúrate de que la base de datos vectorial esté configurada y accesible.
- Verifique que la clave de API de OpenAI u otras credenciales de proveedor sean válidas.
- Revisa los registros de LibreChat y de la API de RAG en busca de errores o advertencias.
Si el problema persiste, consulta la documentación de la RAG API o pregunta a la comunidad de LibreChat en GitHub Discussions o Discord.
¿Qué te parece esta guía?