Compartir comentarios
Las respuestas se generan en base a la documentación.

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.

Note

Puedes 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.md

Contenedorizar 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:

  1. 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.

  2. 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
    - ollama

Si 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.