Contenedorizar una aplicación RAG
Descripción general
Esta sección te guía a través de la contenedorización de una aplicación RAG usando Docker.
NotePuedes ver más ejemplos de aplicaciones GenAI contenedorizadas en las aplicaciones de demostración de GenAI Stack.
Obtener la aplicación de ejemplo
La aplicación de ejemplo utilizada en esta guía es un ejemplo de aplicación RAG, compuesta por tres componentes principales, que son los bloques de construcción para toda aplicación RAG. Un modelo de lenguaje grande (LLM) alojado en algún lugar, en este caso alojado en un contenedor y servido a través de Ollama. Una base de datos vectorial, Qdrant, para almacenar las incrustaciones (embeddings) de los datos locales, y una aplicación web, que utiliza Streamlit para ofrecer la mejor experiencia de usuario.
Clona la aplicación de ejemplo. Abre una terminal, cambia al directorio en el que quieras trabajar y ejecuta el siguiente comando para clonar el repositorio:
$ git clone https://github.com/mfranzon/winy.git
Ahora deberías tener los siguientes archivos en tu directorio winy.
├── winy/
│ ├── .gitignore
│ ├── app/
│ │ ├── main.py
│ │ ├── Dockerfile
│ │ └── requirements.txt
│ ├── tools/
│ │ ├── create_db.py
│ │ ├── create_embeddings.py
│ │ ├── requirements.txt
│ │ ├── test.py
│ │ └── download_model.sh
│ ├── docker-compose.yaml
│ ├── wine_database.db
│ ├── LICENSE
│ └── README.mdContenedorizar tu aplicación: Conceptos básicos
Contenedorizar una aplicación implica empaquetarla junto con sus dependencias en un contenedor, lo que garantiza la coherencia en diferentes entornos. Esto es lo que necesitas para contenedorizar una aplicación como Winy:
Dockerfile: Un Dockerfile que contiene instrucciones sobre cómo compilar una imagen de Docker para tu aplicación. Especifica la imagen base, las dependencias, los archivos de configuración y el comando para ejecutar tu aplicación.
Archivo Docker Compose: Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores. Un archivo Compose te permite configurar los servicios, redes y volúmenes de tu aplicación en un solo archivo.
Ejecutar la aplicación
Dentro del directorio winy, ejecuta el siguiente comando en una terminal.
$ docker compose up --build
Docker compila y ejecuta tu aplicación. Dependiendo de tu conexión de red, puede tomar varios minutos descargar todas las dependencias. Verás un mensaje como el siguiente en la terminal cuando la aplicación se esté ejecutando.
server-1 | You can now view your Streamlit app in your browser.
server-1 |
server-1 | URL: http://0.0.0.0:8501
server-1 |
Abre un navegador y visualiza la aplicación en http://localhost:8501. Deberías ver una aplicación Streamlit sencilla.
La aplicación requiere un servicio de base de datos Qdrant y un servicio de LLM para funcionar correctamente. Si tienes acceso a servicios que ejecutaste fuera de Docker, especifica la información de conexión en el docker-compose.yaml.
winy:
build:
context: ./app
dockerfile: Dockerfile
environment:
- QDRANT_CLIENT=http://qdrant:6333 # Especifica la url para la base de datos qdrant
- OLLAMA=http://ollama:11434 # Especifica la url para el servicio ollama
container_name: winy
ports:
- "8501:8501"
depends_on:
- qdrant
- ollamaSi no tienes los servicios en ejecución, continúa con esta guía para aprender cómo puedes ejecutar algunos o todos estos servicios con Docker.
Recuerda que el servicio ollama está vacío; no tiene ningún modelo. Por esta razón, necesitas descargar (pull) un modelo antes de comenzar a usar la aplicación RAG. Todas las instrucciones se encuentran en la página siguiente.
En la terminal, presiona ctrl+c para detener la aplicación.
Resumen
En esta sección, aprendiste cómo puedes contenedorizar y ejecutar tu aplicación RAG usando Docker.
Pasos siguientes
En la siguiente sección, aprenderás cómo configurar correctamente la aplicación con tu modelo LLM preferido, de forma completamente local, usando Docker.