Aprende RAG y Bases de Datos Vectoriales a Fondo

0 de 31 lecciones completas (0%)

10. La Fase de Ingesta: Construyendo el flujo de embeddings de Datos

En esta lección práctica, construiremos la fase de ingesta de nuestro sistema RAG. Tomaremos un documento grande y complejo y lo procesaremos para almacenarlo de manera óptima en nuestra base de datos vectorial. Para este ejemplo, usaremos Supabase por su flexibilidad y facilidad de uso.

Paso 1: Preparación del Entorno

Antes de comenzar con n8n, necesitamos tener todo nuestro entorno listo.

  1. El Documento Fuente: Para este ejemplo, usaremos un documento del mundo real: el informe anual de Netflix de 2024. Es un PDF de 84 páginas, complejo y denso, perfecto para un caso de uso realista (esta en inglés pero las respuestas nos la dara en español). Descárgalo de su página de inversores.
  2. Almacenamiento en la Nube: Sube el PDF a una carpeta en tu Google Drive. Una vez subido, haz clic en «Compartir» y asegúrate de que «Cualquier persona con el enlace» pueda verlo. Copia este enlace.
  3. Configuración de Supabase:
    • Ve a Supabase y crea una cuenta gratuita si aún no la tienes.
    • Crea un nuevo proyecto. Asígnale un nombre (ej: «demo-rag») y una contraseña segura para la base de datos (¡guárdala bien!).
    • Mientras se crea el proyecto (puede tardar unos minutos), ve a la documentación de Supabase y busca el script SQL para configurar la tabla de vectores. Lo encontrarás en la sección de «Vector Embeddings». Cópialo.
    • Una vez que tu proyecto esté listo, ve al «SQL Editor» en el menú de la izquierda, pega el script que copiaste y ejecútalo. Esto creará automáticamente la tabla documents con las columnas necesarias: id, content, metadata y embedding.
  4. Obtención de Credenciales:
    • Supabase: Ve a Project Settings > API. Necesitarás dos cosas: la URL del proyecto y la clave secreta del rol de servicio (service_role secret).
    • OpenAI: Ve a platform.openai.com/api-keys, crea una nueva clave secreta y cópiala.

¡Perfecto! Nuestro entorno está listo. Ahora, a n8n.

Paso 2: Construyendo el Flujo en n8n

Nuestro flujo de ingesta constará de dos nodos principales.

  1. Nodo Google Drive (Download File):
    • Añade un nodo de Google Drive y selecciona la acción «Download File».
    • Conecta tus credenciales de Google si es la primera vez.
    • Pega la URL del archivo de Netflix que copiaste anteriormente.
    • Al probar este nodo, verás que la salida es un archivo binario, que es exactamente lo que necesitamos.
  2. Nodo Supabase Vector Store (Add Documents):
    • Este es el corazón de nuestro flujo. Añade el nodo y selecciona la acción «Add Documents to Vector Store».
    • Conecta tus credenciales: Crea una nueva credencial para Supabase usando la URL y la clave secreta que obtuviste.
    • Ve a la documentación del nodo y busca el enlace: quickstart for setting up your vector store. Cópialo.
    • Ve al «SQL Editor» en el menú de la izquierda de supabase, pega el script que copiaste y ejecútalo. Esto creará automáticamente la tabla documents con las columnas necesarias: id, content, metadata y embedding. Puedes cambiar el nombre de la tabla.
      Muy importante indicar el número de vectores del modelo de embedding que vamos a usar.
    • Configura el nodo:
      • Table Name: Selecciona la tabla documents que creamos con el script.
      • Input Data: Asegúrate de que el nodo de Google Drive esté conectado a la entrada «Document».

Dentro de este nodo, debemos configurar tres elementos clave: el Document Loader, el Embeddings Model y el Text Splitter.

Paso 3: La Decisión Estratégica – Chunking y Embeddings

  1. Document Loader: Como nuestra entrada es un archivo binario desde Google Drive, aquí seleccionamos la opción Load from Binary Data. Podemos dejar que detecte automáticamente el tipo de archivo (application/pdf).
  2. Embeddings Model: Aquí elegimos el «traductor» que convertirá el texto en vectores, Vamos a usar OpenAI.
    • La Elección: text-embedding-3-small vs. text-embedding-3-large. El modelo «small» es más barato y rápido, mientras que el «large» es más preciso pero más caro.
    • ¿Cómo decidir? Para un documento financiero tan complejo, podríamos pensar que «large» es mejor. Sin embargo, podemos usar herramientas externas como vectorize.io para evitar conjeturas. Al subir una muestra del documento, esta herramienta puede analizarlo y recomendarnos la configuración óptima. En este caso, la herramienta sugiere que text-embedding-3-small ofrece el mejor equilibrio entre relevancia y precisión para este documento específico. ¡Usaremos esa recomendación!
  3. Text Splitter: Aquí decidimos cómo dividir el documento en «chunks».
    • La Elección: Para un documento jerárquico y complejo como un informe anual, el Recursive Character Text Splitter es la mejor opción. Intentará dividir el texto de forma inteligente, respetando párrafos y frases.
    • Configuración del Chunk: Basándonos en las recomendaciones de vectorise.io, estableceremos un Chunk Size de 500 caracteres y un Chunk Overlap de 50 caracteres. Esto nos dará fragmentos pequeños y manejables, con un ligero solapamiento para no perder el contexto entre ellos.

Paso 4: Ejecución y Verificación

¡Es hora de ejecutar el flujo completo! Al hacerlo, n8n descargará el PDF, lo cargará, lo dividirá en chunks de 500 caracteres usando la estrategia recursiva y creará un embedding para cada chunk usando el modelo «small». Finalmente, insertará todo en Supabase.

  • Resultado en n8n: El flujo finaliza y muestra que ha creado 667 ítems (chunks).
  • Verificación en Supabase: Si vamos a nuestro proyecto de Supabase y abrimos el «Table Editor» para la tabla documents, veremos los 667 registros.
    • Columna content: Contiene el texto de cada chunk. Podemos ver cómo ha dividido secciones como el índice.
    • Columna metadata: Supabase ha añadido automáticamente metadatos útiles, como el número de página y las líneas del documento original de donde proviene cada chunk.
    • Columna embedding: Esta columna contiene la representación vectorial de cada chunk, ¡el ADN numérico que hace posible la búsqueda semántica!

¡Felicidades! Has construido con éxito un flujo de ingesta completa y optimizada. Tu base de conocimiento está lista para ser consultada.

Resumen de privacidad
Logo JeroCuevas.com

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Analítica

Esta web utiliza Google Analytics para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.