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
Qué es
RAG (Retrieval-Augmented Generation) es una técnica de AI que:
- Busca información relevante en tus documentos
- Recupera los fragmentos más útiles
- Aumenta el prompt del LLM con ese contexto
- 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.