Saltar al contenido principal

RAG en n8n

¿Qué es RAG?

La Generación Aumentada por Recuperación (RAG, por sus siglas en inglés) es una técnica que mejora la calidad de las respuestas de modelos de lenguaje al combinarlos con fuentes de datos externas. En lugar de depender únicamente de los datos con los que fue entrenado el modelo, un sistema RAG recupera documentos relevantes y ancla sus respuestas en conocimientos actualizados, específicos de un dominio o privados. Los flujos de trabajo RAG suelen utilizar bases de datos vectoriales para gestionar y recuperar eficientemente estos datos externos.

¿Qué es una base de datos vectorial?

Una base de datos vectorial es un tipo especializado de base de datos diseñada para almacenar y recuperar vectores de alta dimensión, que son representaciones numéricas de texto, imágenes u otros tipos de datos. Cuando subes un documento, la base de datos vectorial lo divide en fragmentos (chunks) y utiliza un modelo de embedding para convertir cada fragmento en un vector.

Puedes consultar estos vectores mediante búsquedas por similitud, que se basan en el significado semántico en lugar de coincidencias exactas de palabras clave. Esto convierte a las bases de datos vectoriales en una base sólida para sistemas RAG y otras aplicaciones de IA que requieren recuperar y razonar sobre grandes volúmenes de conocimiento.

¿Cómo usar RAG en n8n?

Comienza con una plantilla RAG

👉 Usa la plantilla de inicio RAG para probar rápidamente RAG en n8n. Esta plantilla incluye dos flujos de trabajo preconstruidos: uno para subir archivos y otro para consultarlos.

Insertar datos en una base de datos vectorial

Antes de que un agente pueda acceder a tu base de conocimiento personalizada, debes cargar los datos en una base de datos vectorial:

  1. Agrega los nodos necesarios para obtener tus datos de origen.
  2. Inserta un nodo de base de datos vectorial (por ejemplo, Simple Vector Store) y selecciona la operación Insertar documentos.
  3. Elige un modelo de embedding para convertir el texto en vectores. Para más información sobre cómo elegir el modelo adecuado, consulta la sección de preguntas frecuentes.
  4. Añade un nodo Default Data Loader (cargador de datos predeterminado) para dividir el contenido en fragmentos. Puedes usar la configuración predeterminada o personalizar la estrategia de fragmentación:
    • División por caracteres: divide según la longitud en caracteres.
    • División recursiva por caracteres: divide el texto recursivamente en fragmentos según Markdown, HTML, bloques de código o caracteres simples (recomendado para la mayoría de los casos).
    • División por tokens: divide según el número de tokens.
  5. (Opcional) Agrega metadatos a cada fragmento para enriquecer el contexto y facilitar filtros posteriores.

Consultar datos

Puedes consultar los datos de dos formas principales: usando un agente o directamente mediante nodos.

Usar un agente

  1. Añade un agente a tu flujo de trabajo.
  2. Agrega la base de datos vectorial como una herramienta y proporciona una descripción que ayude al agente a entender cuándo usarla:
    • Establece el número máximo de fragmentos para definir cuántos fragmentos devolver.
    • Activa Incluir metadatos para proporcionar contexto adicional a cada fragmento.
  3. Añade el mismo modelo de embedding que usaste al insertar los datos.

💡 Consejo profesional

Para ahorrar tokens en modelos costosos, primero puedes usar la herramienta Vector Store Question Answer Tool para recuperar datos relevantes y luego pasar esos resultados al agente. Consulta esta plantilla para ver un ejemplo práctico.

Usar nodos directamente

  1. Añade un nodo de base de datos vectorial al lienzo y selecciona la operación Obtener varios.
  2. Introduce tu consulta o pregunta:
    • Establece el número máximo de fragmentos para controlar cuántos fragmentos se devuelven.
    • Activa Incluir metadatos si lo necesitas.

Preguntas frecuentes

¿Cómo elegir el modelo de embedding adecuado?

El modelo ideal depende del caso de uso.

En general, los modelos más pequeños (por ejemplo, text-embedding-ada-002) son más rápidos y económicos, y son adecuados para documentos cortos, escenarios generales o flujos de trabajo RAG ligeros. Los modelos más grandes (por ejemplo, text-embedding-3-large) ofrecen una comprensión semántica superior y son ideales para documentos largos, temas complejos o situaciones donde se requiere alta precisión.

¿Qué método de fragmentación es mejor para mi caso de uso?

Esto depende en gran medida de las características de tus datos:

  • Fragmentos pequeños (por ejemplo, de 200 a 500 tokens) son ideales para recuperaciones de grano fino.
  • Fragmentos grandes pueden contener más contexto, pero también pueden volverse ambiguos o ruidosos.

Establecer un tamaño adecuado de solapamiento entre fragmentos es crucial para que la IA entienda el contexto de cada bloque. Por eso, dividir según estructuras como Markdown o bloques de código suele dar mejores resultados.

Otra buena práctica es añadir más contexto a los fragmentos (por ejemplo, indicar de qué documento provienen). Si deseas profundizar en este tema, te recomendamos leer este excelente artículo de Anthropic.