¡Hola y bienvenido/a al proyecto práctico de RAG! En la lección anterior vimos la teoría, y ahora vamos a aplicar todo ese conocimiento para construir un chatbot experto desde cero.
El Plan de Construcción
Esto es lo que vamos a montar:
- Una Base de Conocimiento (Document Store): La crearemos en Flowise y la alimentaremos con documentos PDF. Esta base incluirá:
- Embeddings: Usaremos OpenAI.
- Almacén de Vectores (Vector Store): Usaremos Upstash.
- Gestor de Registros (Record Manager): Usaremos Supabase para evitar duplicados y gestionar borrados.
- Un Agente Experto: Un agente simple que, en lugar de usar su conocimiento general, consultará exclusivamente nuestra Base de Conocimiento para responder.
Para este ejemplo, he descargado dos artículos de Wikipedia en formato PDF: uno sobre Esquí y otro sobre Snowboard. Estos serán el «cerebro» de nuestro agente.
¡Manos a la obra!
Parte 1: Creación de Nuestra Base de Conocimiento («Document Store»)
Paso 1.1: Crear el «Document Store» y Cargar los Archivos
- En el menú de Flowise, ve a Document Stores.
- Haz clic en Add New y crea una nueva base de conocimiento. La llamaremos «Deportes de Invierno».
- Entra en ella y haz clic en Add Document Loader.
- Selecciona PDF File y sube el primer archivo (por ejemplo,
snowboarding.pdf
).
Paso 1.2: Dividir el Texto (Text Splitter)
No podemos procesar el PDF de golpe. Necesitamos dividirlo.
- Justo debajo de la carga del PDF, activa Use Text Splitter.
- Hay varias opciones, pero la más común y versátil es Recursive Character Text Splitter. Selecciónala.
- Configura los parámetros:
- Chunk Size (Tamaño del Chunk): Define el tamaño máximo de cada trozo de texto. Pondremos
2000
para tener trozos un poco más grandes. - Chunk Overlap (Solapamiento): Indica cuántos caracteres del final de un chunk se repiten al principio del siguiente. Esto es crucial para no perder el contexto entre un trozo y otro. Dejaremos el valor por defecto de
200
.
- Chunk Size (Tamaño del Chunk): Define el tamaño máximo de cada trozo de texto. Pondremos
- Puedes hacer clic en Preview Chunks para ver cómo Flowise ha dividido tu documento. Verás que ha generado unos 40 chunks.
- Haz clic en Process.
¡Perfecto! Ahora, repite exactamente el mismo proceso para el segundo documento, skiing.pdf
. Al final, tendrás los dos documentos procesados y divididos en chunks (el de esquí generará unos 10 chunks).
Paso 1.3: «Upsert» – Conectando los Componentes RAG
Ahora que tenemos los chunks, necesitamos convertirlos en vectores y guardarlos. Este proceso se llama «Upsert» (una combinación de Update e Insert).
- Haz clic en el botón Upsert All Chunks. Se abrirá una ventana de configuración.
- Embeddings: Selecciona OpenAI Embeddings y tus credenciales.
- Importante: En el
Model Name
, eligetext-embedding-3-small
. Este modelo es eficiente y compatible con la configuración gratuita de Upstash.
- Importante: En el
- Vector Store: Selecciona Upstash y tus credenciales.
- Ve a tu panel de Upstash. Deberías tener un índice vectorial ya creado (si no, créalo ahora). El mío se llama
wintersports-index
. Actualmente, tiene 0 registros.
- Ve a tu panel de Upstash. Deberías tener un índice vectorial ya creado (si no, créalo ahora). El mío se llama
Nota: Si no tienes las credenciales o el índice de Upstash, por favor, revisa la sección anterior donde se explica cómo configurarlo todo.
Parte 2: La Importancia del Gestor de Registros (Record Manager)
El Problema: Datos Duplicados
Para entender por qué necesitamos un Gestor de Registros, vamos a hacer el «Upsert» sin él.
- En la ventana de Upsert, haz clic en el botón Upsert. El proceso comenzará y añadirá nuestros ~50 chunks a Upstash.
- Si ahora vas a Upstash y refrescas, verás que tu índice tiene 50 vectores. ¡Genial!
Pero, ¿qué pasa si hacemos Upsert otra vez? Inténtalo. Flowise volverá a añadir los 50 registros. Si revisas Upstash, ¡ahora tendrás 100 registros! Son todo duplicados, lo cual es ineficiente y problemático.
La Solución: Configurar Supabase como Gestor de Registros
- Primero, para empezar de cero, ve a Upstash y borra todos los registros de tu índice.
- Vuelve a Flowise, a la configuración de «Deportes de Invierno». Haz clic en Add Record Manager.
- Selecciona Postgres y luego Supabase como credenciales.
- Configuración de Supabase:
- Ve a tu panel de Supabase y crea un nuevo proyecto (ej: «wintersports-flowise»).
- Una vez creado, ve a la configuración del proyecto -> Database -> Connection pooling. Copia los datos (Host, Database, Port, User) y pégalos en tus credenciales de Supabase en Flowise. No olvides añadir tu contraseña de la base de datos.
- Guarda las credenciales.
- Vuelve a la ventana de Upsert All Chunks. Ahora verás que el Record Manager de Supabase ya está seleccionado.
- Haz clic en Upsert. Verás que se añaden los 50 registros.
- Ahora, haz clic en Upsert de nuevo. ¡Mira la magia! El resultado será: «Skipped 50» (Omitidos 50). El Gestor de Registros detectó que esos chunks ya existían y evitó la duplicación.
Extra: Gestión de Borrados
El Record Manager también sirve para eliminar datos.
- En la configuración de «Deportes de Invierno», busca la sección del Record Manager y cambia la opción Cleanup de
None
aFull
. Esto le dice que también gestione los borrados. - Ahora, elimina uno de los documentos, por ejemplo
skiing.pdf
. - Vuelve a hacer Upsert All Chunks. El resultado será: «Skipped 40, Deleted 10». El gestor mantuvo los 40 chunks de snowboard que ya existían y borró los 10 que pertenecían al archivo de esquí que eliminamos. ¡Es un sistema robusto!
(Vuelve a añadir el archivo de esquí y haz Upsert para tener la base de conocimiento completa de nuevo).
Parte 3: Usar Nuestra Base de Conocimiento con un Agente
- Ve a Agent Flows y crea un nuevo flujo.
- Añade un Agent Node y llámalo «Agente Deportes de Invierno».
- Configúralo:
- Modelo: Elige un modelo de OpenAI.
- System Prompt: Dale un rol claro. Ej: «Eres un agente experto en deportes de invierno. Tus respuestas se basan únicamente en la información sobre esquí y snowboard que se te ha proporcionado.»
- Conectar la Base de Conocimiento:
- En la sección Knowledge Base, selecciona nuestra base «Deportes de Invierno».
- Añade una descripción. Esto es útil para que el agente sepa qué hay dentro. Ej: «Base de conocimiento sobre deportes de invierno, en particular esquí y snowboard.»
- Guarda el flujo.
Parte 4: ¡A Chatear con Nuestro Experto!
¡Llegó el momento de la verdad!
- Abre el chat de tu nuevo flujo.
- Haz una pregunta muy específica cuya respuesta solo pueda estar en tus documentos. Por ejemplo, en el artículo de esquí se menciona una técnica llamada «Telemark». Pregunta: «¿Qué es el Telemark?»
- El agente responderá correctamente: «El esquí Telemark es una técnica de giro…».
- Si haces clic en el icono
</>
del nodo del agente, verás en la ejecución que usó la herramienta «Knowledge Base – Deportes de Invierno» para encontrar la respuesta.
¡Felicidades! Has construido un chatbot con una base de conocimiento externa, funcional y bien gestionada. Ahora puedes integrar este agente en una web o usarlo como necesites.
Nos vemos en la siguiente lección.