IA & Machine LearningAvanzado

RAG

Retrieval-Augmented Generation - Técnica que combina búsqueda de documentos con LLMs para generar respuestas basadas en información actualizada y específica.

Pronunciación

/ræɡ/
"rag"
Escuchar en:Forvo

Qué es

RAG (Retrieval-Augmented Generation) es una técnica de AI que:

  1. Busca información relevante en tus documentos
  2. Recupera los fragmentos más útiles
  3. Aumenta el prompt del LLM con ese contexto
  4. Genera respuestas basadas en datos reales

RAG resuelve el problema de que los LLMs no conocen tu información privada ni datos recientes.

El término proviene del artículo Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (Patrick Lewis et al., NeurIPS 2020).

Errores comunes de pronunciación

  • “R-A-G” (deletreado) - incorrecto
  • “rague” - incorrecto

Por qué RAG es importante

Sin RAG

Usuario: "¿Cuál es la política de vacaciones de mi empresa?"

LLM: "Las políticas de vacaciones varían según la empresa.
      Generalmente incluyen 15-20 días al año..."

[Respuesta genérica, no conoce TU empresa]

Con RAG

Usuario: "¿Cuál es la política de vacaciones de mi empresa?"

Sistema RAG:
  1. Busca en documentos de RRHH
  2. Encuentra: politica_vacaciones_2026.pdf
  3. Extrae: "20 días hábiles + 5 por antigüedad"

LLM + Contexto: "Según la política vigente, tienes 20 días
                 hábiles de vacaciones, más 5 adicionales
                 por tus 3 años de antigüedad. El proceso
                 de solicitud es..."

[Respuesta específica con datos reales]

Cómo funciona

┌─────────────────────────────────────────────────────────────┐
│                    ARQUITECTURA RAG                          │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│   1. INDEXACIÓN (preparación, y al cambiar los documentos)  │
│   ┌──────────────────────────────────────────────────────┐  │
│   │  Documentos → Chunks → Embeddings → Vector DB        │  │
│   │                                                       │  │
│   │  PDF, Word, Wiki    Fragmentos    Vectores numéricos │  │
│   │  Confluence, Notion  de ~500 tokens  representando   │  │
│   │  Código, FAQs                      significado        │  │
│   └──────────────────────────────────────────────────────┘  │
│                                                              │
│   2. CONSULTA (cada pregunta)                               │
│   ┌──────────────────────────────────────────────────────┐  │
│   │                                                       │  │
│   │  Pregunta ──→ Embedding ──→ Búsqueda Vectorial      │  │
│   │     │              │              │                   │  │
│   │     ▼              ▼              ▼                   │  │
│   │  "¿Cómo        [0.2, 0.8,    Top 5 chunks           │  │
│   │   configuro     0.1, ...]    más similares           │  │
│   │   el SSO?"                                            │  │
│   │                                                       │  │
│   └──────────────────────────────────────────────────────┘  │
│                                                              │
│   3. GENERACIÓN                                             │
│   ┌──────────────────────────────────────────────────────┐  │
│   │                                                       │  │
│   │  Prompt = Pregunta + Contexto recuperado             │  │
│   │                                                       │  │
│   │  "Basándote en esta documentación:                   │  │
│   │   [chunk1] [chunk2] [chunk3]                         │  │
│   │   Responde: ¿Cómo configuro el SSO?"                 │  │
│   │                                                       │  │
│   │           │                                           │  │
│   │           ▼                                           │  │
│   │        LLM genera respuesta fundamentada             │  │
│   │                                                       │  │
│   └──────────────────────────────────────────────────────┘  │
│                                                              │
└─────────────────────────────────────────────────────────────┘

Componentes clave

Componente Función Ejemplos
Embeddings Convertir texto a vectores OpenAI text-embedding-3, Cohere Embed, Sentence-BERT
Vector DB Almacenar y buscar vectores Pinecone, Weaviate, Chroma, pgvector, Qdrant
Chunking Dividir documentos Por párrafos, semántico, híbrido
Reranking Mejorar relevancia Cohere Rerank, Cross-encoders
LLM Generar respuesta GPT, Claude, Llama

Caso práctico: Chatbot de soporte

// Ejemplo simplificado con LangChain.js
// npm install @langchain/openai @langchain/pinecone @pinecone-database/pinecone
import { OpenAIEmbeddings, ChatOpenAI } from "@langchain/openai";
import { PineconeStore } from "@langchain/pinecone";
import { Pinecone } from "@pinecone-database/pinecone";

const pineconeIndex = new Pinecone().Index(process.env.PINECONE_INDEX!);

// 1. Buscar documentos relevantes
const vectorStore = await PineconeStore.fromExistingIndex(
  new OpenAIEmbeddings({ model: "text-embedding-3-small" }),
  { pineconeIndex }
);

const pregunta = "¿Cómo reseteo mi password?";
const relevantDocs = await vectorStore.similaritySearch(pregunta, 5); // top 5

// 2. Generar respuesta con contexto
const llm = new ChatOpenAI({ model: process.env.OPENAI_MODEL });

const response = await llm.invoke([
  {
    role: "system",
    content: `Eres un agente de soporte. Usa SOLO esta información
              y di "no lo sé" si no alcanza:
              ${relevantDocs.map((d) => d.pageContent).join("\n\n")}`,
  },
  { role: "user", content: pregunta },
]);

Ventajas vs Fine-tuning

Aspecto RAG Fine-tuning
Actualización Reindexar documentos, sin reentrenar Requiere reentrenar
Costo Menor (indexación + inferencia) Mayor (entrenamiento)
Trazabilidad Permite citar las fuentes usadas “Caja negra”
Datos privados Quedan en tu índice, fuera de los pesos del modelo (aunque los fragmentos se envían al LLM en cada consulta) Se incorporan a los pesos del modelo
Mejor para FAQ, documentación, conocimiento cambiante Tono, formato específico

Mejores prácticas

Qué hacer

  • Empezar con chunks de unos 200-500 tokens y ajustar según tus documentos
  • Implementar reranking para mejor precisión
  • Incluir metadatos (fecha, fuente, autor)
  • Versionar tus índices
  • Filtrar por relevancia mínima
  • Aplicar los permisos del usuario al recuperar documentos

Qué evitar

  • Chunks muy grandes (pierden relevancia)
  • Chunks muy pequeños (pierden contexto)
  • Ignorar la calidad de los documentos fuente
  • Omitir el manejo de “no lo sé”

Métricas importantes

┌────────────────────────────────────────┐
│   KPIs PARA RAG                         │
├────────────────────────────────────────┤
│                                         │
│   Retrieval:                           │
│   - Precision@K: % relevantes en top K │
│   - Recall: % documentos encontrados   │
│   - MRR: Posición del primer relevante │
│                                         │
│   Generation:                          │
│   - Faithfulness: Fidelidad al contexto│
│   - Answer relevancy: Útil al usuario  │
│   - Hallucination rate: Invenciones    │
│                                         │
└────────────────────────────────────────┘

Términos relacionados

  • LLM - El modelo que genera las respuestas
  • Agentic AI - Agentes que usan RAG para tareas complejas
  • MCP - Protocolo para conectar RAG a múltiples fuentes

Recuerda: RAG es tan bueno como tus documentos. Garbage in, garbage out. Invierte en la calidad y organización de tu base de conocimiento.