Ya hemos construido nuestro flujo de ingesta y nuestra base de conocimiento está cargada y lista en Supabase. Ahora, vamos a la parte más emocionante: construir la fase de recuperación, que permitirá a un agente de IA dialogar con esos datos y responder preguntas.
El Proceso de Recuperación: Un Vistazo Gráfico
Recordemos el flujo de trabajo:
- Pregunta del Usuario: El usuario inicia la conversación.
- Vectorización de la Pregunta: La pregunta se convierte en un vector.
- Búsqueda por Similitud: El sistema busca en la base de datos vectorial los «chunks» más relevantes.
- Generación de la Respuesta: El LLM utiliza esos chunks como contexto para formular una respuesta precisa.
Paso 1: Configurando el Agente de IA en n8n
En nuestro lienzo de n8n, vamos a construir el agente.
- Nodo
Chat Trigger
:- Este nodo nos permite interactuar con nuestro flujo de trabajo a través de una simple ventana de chat, lo cual es perfecto para hacer pruebas rápidas. Añádelo para iniciar el flujo.
- Nodo
AI Agent
:- Este es el cerebro de nuestra operación. Conéctalo a la salida del
Chat Trigger
. - System Message (El «Rol» del Agente): Aquí definimos la personalidad y las instrucciones de nuestro agente. Es crucial ser muy específico. Usaremos un prompt como este:
- Modelo de Lenguaje: Conecta tus credenciales de OpenAI y selecciona un modelo. Para empezar, GPT-5 mini es una excelente opción por su equilibrio entre coste y rendimiento.
- Memoria (Memory): Activa la opción «Simple Memory» para que el agente pueda recordar las últimas 15 preguntas y respuestas. Esto le da contexto a la conversación y sabra si repetimos preguntas.
- Este es el cerebro de nuestra operación. Conéctalo a la salida del
Paso 2: Conectando la Base de Datos como una «Herramienta»
Aquí es donde conectamos nuestro agente a su «memoria» externa.
- Añadir una Herramienta (Tool): En el nodo
AI Agent
, ve a la sección «Tools» y añade la herramientaSupabase Vector Store (Retrieve)
. - Configuración de la Herramienta:
- Credenciales: Conecta las mismas credenciales de Supabase que usaste en la fase de ingesta.
- Nombre y Descripción: Dale a la herramienta un nombre descriptivo, como «base_de_conocimiento_documentos».
- Table: Selecciona la tabla
documents
donde almacenamos nuestros datos. - Límite de Resultados: Establece cuántos «chunks» relevantes quieres que recupere como máximo. Un buen punto de partida es 5.
- Recuperar Metadatos: Activa esta opción. Es útil para depuración.
- Conectar el Modelo de Embedding:
- ¡Paso Crucial! Debes conectar aquí exactamente el mismo modelo de embedding que usaste en la fase de ingesta. En nuestro caso,
text-embedding-3-small
. - ¿Por qué? Porque la pregunta del usuario debe ser «traducida» al mismo «idioma» numérico que nuestros documentos para que la búsqueda por similitud funcione. Usar un modelo diferente sería como buscar una palabra en español en un diccionario de inglés. Simplemente, no funcionará.
- ¡Paso Crucial! Debes conectar aquí exactamente el mismo modelo de embedding que usaste en la fase de ingesta. En nuestro caso,
Paso 3: ¡A Probar Nuestro Agente!
Nuestro agente RAG está completo y listo para ser probado.
- Prueba Inicial: Inicia un chat y envía un «Hola». El agente debería responder con su saludo programado, confirmando que está funcionando.
- Respuesta Esperada: «¡Hola! ¿Cómo puedo ayudarte hoy? Si tienes alguna pregunta sobre los documentos financieros de Netflix de 2024, no dudes en preguntar.»
- Primera Consulta Real: Vamos a preguntarle algo que sabemos que está en los documentos.
- Pregunta: «¿Cuál es el índice del documento?»
Análisis Interno del Resultado: Si observamos la salida del nodo de Supabase, podemos ver exactamente lo que ocurrió «bajo el capó»:
- El sistema recuperó con éxito los 5 chunks más relevantes.
- Podemos ver que el contenido de estos chunks contiene las palabras «Table of Contents», «Business», «Risk Factors», etc.
- Esto demuestra que la búsqueda por similitud ha funcionado a la perfección.
El agente ahora tiene esta información precisa para construir su respuesta final.
Hemos construido con éxito la fase de recuperación, pero como veremos en la próxima lección, incluso este sistema tiene sus limitaciones. A continuación, exploraremos cómo identificar y solucionar algunos de los problemas más comunes de la recuperación en RAG.