# Transcripción de video y chat con GenAI


## Descripción general

Esta guía presenta un proyecto de transcripción y análisis de video que utiliza un conjunto de tecnologías relacionadas con el [GenAI Stack](https://www.docker.com/blog/introducing-a-new-genai-stack/).

El proyecto muestra las siguientes tecnologías:

- [Docker y Docker Compose](#docker-y-docker-compose)
- [OpenAI](#openai-api)
- [Whisper](#whisper)
- [Incrustaciones vectoriales (embeddings)](#incrustaciones-vectoriales-embeddings)
- [Finalizaciones de chat (chat completions)](#finalizaciones-de-chat-chat-completions)
- [Pinecone](#pinecone)
- [Generación Aumentada por Recuperación (RAG)](#generacion-aumentada-por-recuperacion-rag)

> **Agradecimiento**
>
> Esta guía es una contribución de la comunidad. Docker desea agradecer a [David Cardozo](https://www.davidcardozo.com/) por su aportación a esta guía.

## Requisitos previos

- Tienes una [clave de API de OpenAI](https://platform.openai.com/api-keys).

  > [!NOTE]
  >
  > OpenAI es un servicio alojado por terceros y pueden aplicarse [cargos](https://openai.com/pricing).

- Tienes una [clave de API de Pinecone](https://app.pinecone.io/).
- Tienes instalada la versión más reciente de [Docker Desktop](/get-started/get-docker/). Docker agrega nuevas características regularmente y algunas partes de esta guía pueden funcionar solo con la versión más reciente de Docker Desktop.
- Tienes un [cliente de Git](https://git-scm.com/downloads). Los ejemplos de esta sección utilizan un cliente de Git basado en la línea de comandos, pero puedes usar cualquier cliente.

## Acerca de la aplicación

La aplicación es un chatbot que puede responder preguntas a partir de un video. Además, proporciona marcas de tiempo del video que te ayudan a encontrar las fuentes utilizadas para responder tu pregunta.

## Obtener y ejecutar la aplicación

1. Clona el repositorio de la aplicación de muestra. En una terminal, ejecuta el siguiente comando:

   ```console
   $ git clone https://github.com/Davidnet/docker-genai.git
   ```

   El proyecto contiene los siguientes directorios y archivos:

   ```text
   ├── docker-genai/
   │ ├── docker-bot/
   │ ├── yt-whisper/
   │ ├── .env.example
   │ ├── .gitignore
   │ ├── LICENSE
   │ ├── README.md
   │ └── docker-compose.yaml
   ```

2. Especifica tus claves de API. En el directorio `docker-genai`, crea un archivo de texto llamado `.env` y especifica tus claves de API en su interior. A continuación se muestra el contenido del archivo `.env.example` que puedes consultar como ejemplo:

   ```text
   #----------------------------------------------------------------------------
   # OpenAI
   #----------------------------------------------------------------------------
   OPENAI_TOKEN=your-api-key # Reemplaza tu-clave-de-api con tu clave de API personal

   #----------------------------------------------------------------------------
   # Pinecone
   #----------------------------------------------------------------------------
   PINECONE_TOKEN=your-api-key # Reemplaza tu-clave-de-api con tu clave de API personal
   ```

3. Compila y ejecuta la aplicación. En una terminal, cambia al directorio `docker-genai` y ejecuta el siguiente comando:

   ```console
   $ docker compose up --build
   ```

   Docker Compose compila y ejecuta la aplicación basándose en los servicios definidos en el archivo `docker-compose.yaml`. Cuando la aplicación se esté ejecutando, verás los logs de 2 servicios en la terminal.

   En los logs, verás que los servicios están expuestos en los puertos `8503` y `8504`. Los dos servicios son complementarios entre sí.

   El servicio `yt-whisper` se ejecuta en el puerto `8503`. Este servicio alimenta la base de datos de Pinecone con los videos que quieras archivar en tu base de conocimientos. La siguiente sección detalla este servicio.

## Uso del servicio yt-whisper

El servicio `yt-whisper` es un servicio de procesamiento de videos de YouTube que utiliza el modelo Whisper de OpenAI para generar transcripciones de videos y almacenarlas en una base de datos de Pinecone. Los siguientes pasos muestran cómo usar el servicio:

1. Abre un navegador y accede al servicio yt-whisper en [http://localhost:8503](http://localhost:8503).
2. Una vez que aparezca la aplicación, en el campo **Youtube URL** especifica la URL de un video de YouTube y selecciona **Submit**. El siguiente ejemplo utiliza [https://www.youtube.com/watch?v=yaQZFhrW0fU](https://www.youtube.com/watch?v=yaQZFhrW0fU).

   ![Enviar un video en el servicio yt-whisper](/guides/genai-video-bot/images/yt-whisper.webp)

   El servicio `yt-whisper` descarga el audio del video, utiliza Whisper para transcribirlo a un formato WebVTT (`*.vtt`) (que puedes descargar), luego utiliza el modelo `text-embedding-3-small` para crear las incrustaciones (embeddings) y, finalmente, sube esas incrustaciones a la base de datos de Pinecone.

   Después de procesar el video, aparecerá una lista de videos en la aplicación web que te informa qué videos se han indexado en Pinecone. También proporciona un botón para descargar la transcripción.

   ![Un video procesado en el servicio yt-whisper](/guides/genai-video-bot/images/yt-whisper-2.webp)

   Ahora puedes acceder al servicio `dockerbot` en el puerto `8504` y hacer preguntas sobre los videos.

## Uso del servicio dockerbot

El servicio `dockerbot` es un servicio de respuesta a preguntas que aprovecha tanto la base de datos de Pinecone como un modelo de IA para ofrecer respuestas. Los siguientes pasos muestran cómo usar el servicio:

> [!NOTE]
>
> Debes procesar al menos un video a través del [servicio yt-whisper](#uso-del-servicio-yt-whisper) antes de usar el servicio dockerbot.

1. Abre un navegador y accede al servicio en [http://localhost:8504](http://localhost:8504).

2. En el cuadro de texto **What do you want to know about your videos?**, hazle al Dockerbot una pregunta sobre un video que haya sido procesado por el servicio `yt-whisper`. El siguiente ejemplo hace la pregunta, "What is a sugar cookie?". La respuesta a esa pregunta se encuentra en el video procesado en el ejemplo anterior, [https://www.youtube.com/watch?v=yaQZFhrW0fU](https://www.youtube.com/watch?v=yaQZFhrW0fU).

   ![Hacer una pregunta al Dockerbot](/guides/genai-video-bot/images/bot.webp)

   En este ejemplo, el Dockerbot responde a la pregunta y proporciona enlaces al video con marcas de tiempo, que pueden contener más información sobre la respuesta.

   El servicio `dockerbot` toma la pregunta, la convierte en una incrustación usando el modelo `text-embedding-3-small`, consulta la base de datos de Pinecone para encontrar incrustaciones similares y luego pasa ese contexto a `gpt-4-turbo-preview` para generar una respuesta.

3. Selecciona el primer enlace para ver qué información proporciona. Con base en el ejemplo anterior, selecciona [https://www.youtube.com/watch?v=yaQZFhrW0fU&t=553s](https://www.youtube.com/watch?v=yaQZFhrW0fU&t=553s).

   En el enlace de ejemplo, puedes ver que esa sección del video responde perfectamente a la pregunta, "What is a sugar cookie?".

## Explorar la arquitectura de la aplicación

La siguiente imagen muestra la arquitectura de servicio de alto nivel de la aplicación, que incluye:

- yt-whisper: Un servicio local, ejecutado por Docker Compose, que interactúa con los servicios remotos de OpenAI y Pinecone.
- dockerbot: Un servicio local, ejecutado por Docker Compose, que interactúa con los servicios remotos de OpenAI y Pinecone.
- OpenAI: Un servicio remoto de terceros.
- Pinecone: Un servicio remoto de terceros.

![Diagrama de arquitectura de la aplicación](/guides/genai-video-bot/images/architecture.webp)

## Explorar las tecnologías utilizadas y su función

### Docker y Docker Compose

La aplicación utiliza Docker para ejecutarse en contenedores, proporcionando un entorno consistente y aislado. Esto significa que la aplicación funcionará según lo previsto dentro de sus contenedores de Docker, independientemente de las diferencias del sistema subyente. Para obtener más información sobre Docker, consulta la [Descripción general de introducción](/get-started/introduction/).

Docker Compose es una herramienta para definir y ejecutar aplicaciones multi-contenedor. Compose facilita la ejecución de esta aplicación con un solo comando: `docker compose up`. Para obtener más detalles, consulta la [Descripción general de Compose](/compose/).

### OpenAI API

La API de OpenAI proporciona un servicio de LLM conocido por sus tecnologías de IA y aprendizaje automático de vanguardia. En esta aplicación, la tecnología de OpenAI se utiliza para generar transcripciones a partir de audio (utilizando el modelo Whisper), crear incrustaciones para datos de texto y generar respuestas a las consultas de los usuarios (utilizando GPT y finalizaciones de chat). Para obtener más detalles, consulta [openai.com](https://openai.com/product).

### Whisper

Whisper es un sistema de reconocimiento automático de voz desarrollado por OpenAI, diseñado para transcribir el lenguaje hablado en texto. En esta aplicación, Whisper se utiliza para transcribir el audio de los videos de YouTube a texto, lo que permite un procesamiento y análisis posterior del contenido del video. Para obtener más detalles, consulta [Presentando Whisper](https://openai.com/research/whisper).

### Incrustaciones vectoriales (embeddings)

Las incrustaciones son representaciones numéricas de texto u otros tipos de datos que capturan su significado de manera que puedan ser procesados por algoritmos de aprendizaje automático. En esta aplicación, las incrustaciones se utilizan para convertir las transcripciones de video en un formato vectorial que se pueda consultar y analizar según su relevancia para la entrada del usuario, facilitando una búsqueda eficiente y la generación de respuestas. Para obtener más detalles, consulta la documentación de [Embeddings](https://platform.openai.com/docs/guides/embeddings) de OpenAI.

![Diagrama de incrustaciones vectoriales (embeddings)](/guides/genai-video-bot/images/embeddings.webp)

### Finalizaciones de chat (chat completions)

La finalización de chat, como se utiliza en esta aplicación a través de la API de OpenAI, se refiere a la generación de respuestas conversacionales basadas en un contexto o prompt dado. En la aplicación, se utiliza para proporcionar respuestas inteligentes y conscientes del contexto a las consultas de los usuarios, procesando e integrando la información de las transcripciones de video y otras entradas, lo que mejora las capacidades interactivas del chatbot. Para obtener más detalles, consulta la documentación de la [Chat Completions API](https://platform.openai.com/docs/guides/text-generation) de OpenAI.

### Pinecone

Pinecone es un servicio de base de datos vectorial optimizado para la búsqueda de similitud, utilizado para construir y desplegar aplicaciones de búsqueda vectorial a gran escala. En esta aplicación, Pinecone se emplea para almacenar y recuperar las incrustaciones de las transcripciones de video, lo que permite una funcionalidad de búsqueda eficiente y relevante basada en las consultas de los usuarios. Para obtener más detalles, consulta [pinecone.io](https://www.pinecone.io/).

### Generación Aumentada por Recuperación (RAG)

La Generación Aumentada por Recuperación (RAG) es una técnica que combina la recuperación de información con un modelo de lenguaje para generar respuestas basadas en los documentos o datos recuperados. En RAG, el sistema recupera información relevante (en este caso, mediante incrustaciones de transcripciones de video) y luego utiliza un modelo de lenguaje para generar respuestas basadas en estos datos recuperados. Para obtener más detalles, consulta el cookbook de OpenAI para [Preguntas y respuestas generativas aumentadas por recuperación con Pinecone](https://cookbook.openai.com/examples/vector_databases/pinecone/gen_qa).

## Siguientes pasos

Explora cómo [crear una aplicación de bot de PDF](/guides/genai-pdf-bot/) utilizando IA generativa, o consulta más muestras de GenAI en el repositorio de [GenAI Stack](https://github.com/docker/genai-stack).

