1. ¿Qué vamos a aprender?
Hasta ahora nuestra aplicación puede utilizar un LLM para analizar información.
Pero tenemos un problema:
¿De dónde obtiene el modelo
la información que necesita?
El modelo conoce muchísimas cosas, pero no conoce necesariamente los datos privados de nuestra aplicación.
Objetivo de Week 15
Vamos a conseguir que nuestra aplicación pueda consultar su propio conocimiento antes de pedir una respuesta al modelo.
Este patrón se denomina:
Retrieval-Augmented Generation
RAG
Al terminar la semana sabrás:
- qué es RAG;
- por qué necesitamos RAG;
- qué son embeddings;
- qué es una base de datos vectorial;
- qué es un chunk;
- cómo dividir documentos;
- cómo buscar información relevante;
- cómo enviar esa información al LLM;
- cómo diseñar un pipeline RAG;
- cómo evaluar respuestas RAG;
- cómo integrarlo en nuestra Super Aplicación.
2. El problema que queremos solucionar
Imagina que nuestra Super Aplicación tiene información interna:
- políticas de empresa;
- manuales;
- procedimientos;
- documentación técnica;
- descripciones de puestos;
- documentación de proyectos;
- FAQs;
- documentación de clientes.
Pregunta
Un usuario pregunta:
¿Cuál es el procedimiento interno
para solicitar una formación?
Nuestro LLM podría no conocer esa información.
Error que NO queremos
Usuario
↓
LLM
↓
"Creo que el procedimiento es..."
El modelo puede generar una respuesta plausible pero incorrecta.
Solución
Usuario
↓
Buscar documentación
↓
Encontrar información relevante
↓
Enviar información al LLM
↓
Generar respuesta
Eso es la idea fundamental de RAG.
3. ¿Qué es RAG?
RAG significa:
Retrieval-Augmented Generation
Podemos traducirlo conceptualmente como:
Generación aumentada mediante recuperación
de información.
La idea es dividir el problema en dos partes:
1. Retrieval
Buscar información relevante en nuestros datos.
2. Generation
Utilizar esa información para generar una respuesta.
Flujo básico
Pregunta
↓
Buscar información
↓
Documentos relevantes
↓
Contexto
↓
LLM
↓
Respuesta
RAG no "enseña" el modelo.
Esto es muy importante.
No estamos modificando el conocimiento interno del modelo.
Estamos proporcionando información relevante en el momento de la consulta.
Analogía
Imagina un examen.
Sin RAG:
Alumno
↓
Responde de memoria
Con RAG:
Alumno
↓
Consulta apuntes relevantes
↓
Utiliza los apuntes
↓
Responde
El LLM sigue siendo el mismo.
Lo que cambia es la información disponible en el momento de responder.
4. ¿Qué documentos podemos utilizar?
RAG puede trabajar con múltiples tipos de información.
| Fuente | Ejemplo |
|---|---|
| Manual corporativo | |
| Word | Procedimiento interno |
| HTML | Documentación web |
| Markdown | Documentación técnica |
| Base de datos | Información estructurada |
| Emails | Comunicaciones internas |
| FAQs | Preguntas frecuentes |
Pero aparece un problema
Los documentos pueden ser enormes.
Un PDF puede tener:
300 páginas
↓
150.000 palabras
↓
muchísimos tokens
No queremos enviar todo el documento al modelo.
Tenemos que encontrar solamente la parte relevante.
Para conseguirlo necesitamos dividir los documentos.
5. Chunks: dividir los documentos
Un chunk es simplemente una parte de un documento.
Documento original
MANUAL DE FORMACIÓN
Capítulo 1
Introducción
Capítulo 2
Solicitud de formación
Capítulo 3
Aprobación
Capítulo 4
Presupuesto
Capítulo 5
Seguimiento
Podemos dividirlo:
DOCUMENTO
↓
┌───────────────┐
│ Chunk 1 │
│ Introducción │
└───────────────┘
┌───────────────┐
│ Chunk 2 │
│ Solicitud │
└───────────────┘
┌───────────────┐
│ Chunk 3 │
│ Aprobación │
└───────────────┘
┌───────────────┐
│ Chunk 4 │
│ Presupuesto │
└───────────────┘
¿Todos los chunks deben tener el mismo tamaño?
No necesariamente.
Un chunk demasiado pequeño:
- puede perder contexto;
- puede resultar ambiguo;
- puede dificultar la respuesta.
Un chunk demasiado grande:
- aumenta tokens;
- aumenta coste;
- puede introducir información irrelevante.
Overlap
A veces hacemos que dos chunks compartan parte del contenido.
Chunk 1
──────────────
A B C D E F
Chunk 2
──────────────
E F G H I J
Los elementos E y F aparecen en ambos.
Esto ayuda a conservar contexto entre fragmentos.
6. Embeddings
Ahora llega uno de los conceptos más importantes de RAG.
¿Qué es un embedding?
Un embedding es una representación numérica de un contenido que captura relaciones semánticas.
Ejemplo conceptual
Tenemos estas frases:
"Solicitar vacaciones"
"Quiero pedir días libres"
"Necesito ausentarme unos días"
Aunque las frases utilizan palabras diferentes, tienen un significado parecido.
Los embeddings permiten representar ese contenido de manera que las relaciones semánticas puedan compararse matemáticamente.
Texto
↓
Embedding
↓
[0.13, -0.42, 0.87, ...]
No necesitamos memorizar los números.
Lo importante es entender el concepto:
Texto → representación matemática → comparación semántica
¿Por qué lo necesitamos?
Porque queremos buscar:
¿Qué información se parece
semánticamente a mi pregunta?
No solamente:
¿Qué documento contiene
exactamente estas palabras?
7. Bases de datos vectoriales
Los embeddings deben almacenarse en algún lugar.
Para ello podemos utilizar una base de datos vectorial.
Modelo conceptual
Documento
↓
Chunk
↓
Embedding
↓
Vector Database
Nuestra base de datos puede contener algo parecido a:
| ID | Contenido | Embedding |
|---|---|---|
| 001 | Procedimiento de formación... | [0.12, 0.42, ...] |
| 002 | Política de vacaciones... | [0.83, 0.17, ...] |
| 003 | Proceso de onboarding... | [0.31, 0.71, ...] |
Pregunta del usuario
¿Cómo solicito una formación?
Convertimos también la pregunta en embedding:
Pregunta
↓
Embedding
↓
[0.15, 0.39, ...]
Y buscamos vectores similares.
Resultado
Los chunks más relacionados pueden ser:
- Procedimiento de formación
- Política de formación
- FAQ de formación
Tecnologías habituales
- PostgreSQL + pgvector;
- Qdrant;
- Weaviate;
- Pinecone;
- Milvus;
- Chroma.
Para nuestra Super Aplicación vamos a priorizar una solución que podamos integrar fácilmente con nuestra infraestructura.
Una opción especialmente interesante es PostgreSQL + pgvector, porque permite mantener datos relacionales y vectores en la misma plataforma.
8. Retrieval: recuperar información
Ahora tenemos:
Documentos
↓
Chunks
↓
Embeddings
↓
Vector DB
El usuario realiza una pregunta.
¿Cómo solicito una formación?
La pregunta se convierte también en embedding.
Después buscamos los chunks más similares.
Top-K
Normalmente no recuperamos un único resultado.
Podemos pedir:
top_k = 5
Esto significa:
Devuélveme
los 5 fragmentos
más relevantes.
Ejemplo
| Chunk | Similitud |
|---|---|
| Procedimiento formación | 0.92 |
| FAQ formación | 0.87 |
| Política cursos | 0.81 |
| Onboarding | 0.55 |
| Vacaciones | 0.21 |
Podemos seleccionar los tres primeros.
9. El pipeline RAG completo
Ahora podemos unir todos los conceptos.
Fase 1 — Ingesta
Documento
↓
Extracción de texto
↓
Limpieza
↓
Chunks
↓
Embeddings
↓
Vector DB
Fase 2 — Consulta
Pregunta
↓
Embedding
↓
Búsqueda vectorial
↓
Top-K chunks
Fase 3 — Generación
Pregunta
+
Contexto recuperado
↓
LLM
↓
Respuesta
Pipeline completo
INGESTA
Documento
↓
Parser
↓
Chunking
↓
Embeddings
↓
Vector DB
CONSULTA
Usuario
↓
Pregunta
↓
Embedding
↓
Similarity Search
↓
Top-K
↓
Contexto
↓
LLM
↓
Respuesta
10. Arquitectura RAG de nuestra Super Aplicación
┌──────────────┐
│ USER │
└──────┬───────┘
│
↓
┌──────────────┐
│ FRONTEND │
└──────┬───────┘
│
↓
┌──────────────┐
│ BACKEND │
└──────┬───────┘
│
↓
┌──────────────┐
│ RETRIEVAL │
└──────┬───────┘
│
↓
┌───────────────────┐
│ VECTOR STORE │
└─────────┬─────────┘
│
Relevant Chunks
│
↓
┌──────────────┐
│ LLM │
└──────┬───────┘
│
↓
┌──────────────┐
│ RESPONSE │
└──────────────┘
Pero nuestra arquitectura tendrá además seguridad
USER
↓
AUTHENTICATION
↓
AUTHORIZATION
↓
RETRIEVAL
↓
ACCESS FILTER
↓
LLM
Problema crítico
Supongamos que tenemos documentación de distintos clientes.
El usuario del Cliente A no debería recuperar documentación del Cliente B.
Por tanto, RAG no consiste solamente en buscar por similitud.
Tenemos que combinar:
- similaridad;
- permisos;
- tenant;
- metadatos;
- reglas de negocio.
Metadata Filtering
Cada chunk puede tener metadata:
{
"document_id": 123,
"department": "HR",
"client": "CLIENT_A",
"visibility": "internal",
"language": "es"
}
La búsqueda puede utilizar también esos filtros.
11. Ejemplo completo
Pregunta
¿Qué formación puedo hacer
para mejorar mis competencias
en Cloud?
Paso 1
La aplicación identifica al usuario.
user_id = 845
Paso 2
Obtiene sus permisos.
department = IT
country = ES
role = Developer
Paso 3
Se genera embedding de la pregunta.
Paso 4
Se buscan documentos relevantes filtrando por permisos.
Paso 5
Se recuperan:
Chunk 1
Cloud Architecture Training
Chunk 2
AWS Certification Path
Chunk 3
Internal Cloud Academy
Paso 6
Se construye el contexto:
CONTEXTO:
[Documento 1]
...
[Documento 2]
...
[Documento 3]
...
Paso 7
Se envía al LLM:
SYSTEM
Responde utilizando
exclusivamente el contexto.
Si el contexto no contiene
la respuesta, dilo explícitamente.
USER
Pregunta:
¿Qué formación puedo hacer
para mejorar mis competencias
en Cloud?
CONTEXTO
...
Paso 8
El LLM genera:
Según la documentación disponible,
puedes realizar:
1. Cloud Architecture Training
2. AWS Certification Path
La documentación indica que
ambas formaciones están relacionadas
con competencias Cloud.
12. RAG no significa "copiar documentos al prompt"
Una primera aproximación podría ser:
Documento completo
↓
Prompt
↓
LLM
Pero esto no escala.
RAG intenta hacer:
Millones de documentos
↓
Indexación
↓
Búsqueda
↓
5-10 fragmentos relevantes
↓
LLM
RAG es principalmente un problema de recuperación de información.
El LLM es solamente una parte del sistema.
13. ¿Por qué un RAG puede fallar?
Es importante entender que un RAG puede producir respuestas incorrectas aunque utilicemos un buen LLM.
Problema 1 — Chunking incorrecto
El fragmento puede no contener suficiente contexto.
Problema 2 — Retrieval incorrecto
La búsqueda puede recuperar documentos irrelevantes.
Problema 3 — Datos desactualizados
La documentación puede haber cambiado.
Problema 4 — Contexto insuficiente
Quizá necesitamos 10 chunks y solamente recuperamos 3.
Problema 5 — LLM
El modelo puede interpretar incorrectamente el contexto.
Problema 6 — Seguridad
Se puede recuperar información que el usuario no debería ver.
Conclusión
Cuando una aplicación RAG da una respuesta incorrecta, no debemos asumir inmediatamente que "el modelo es malo".
Tenemos que analizar:
¿El documento era correcto?
¿El chunk era correcto?
¿El retrieval funcionó?
¿Los permisos funcionaron?
¿El contexto era suficiente?
¿El prompt estaba bien diseñado?
¿El LLM interpretó correctamente?
14. Citaciones y trazabilidad
Una aplicación empresarial debería poder explicar de dónde procede la respuesta.
En lugar de:
"Puedes hacer la certificación AWS."
Queremos:
"Puedes hacer la certificación AWS."
Fuente:
AWS Certification Path
Página 14
Esto aumenta:
- confianza;
- auditabilidad;
- capacidad de depuración;
- transparencia.
Arquitectura
Chunk
+
metadata
+
document_id
+
page
↓
LLM
↓
Answer
+
Sources
15. Laboratorio práctico
Construir nuestro primer RAG
Vamos a crear una pequeña base de conocimiento para nuestra Super Aplicación.
Paso 1 — Crear documentación
Crea tres documentos:
training.md
vacations.md
onboarding.md
Paso 2 — Introducir contenido
# Formación
Los empleados pueden solicitar
formación a través del portal.
La solicitud debe ser aprobada
por el responsable.
Las formaciones deben estar
relacionadas con las competencias
del puesto.
Paso 3 — Chunking
Divide el documento en fragmentos razonables.
Paso 4 — Embeddings
Genera un embedding para cada chunk.
Paso 5 — Persistencia
Guarda:
id
content
embedding
document_id
title
page
department
visibility
Paso 6 — Query
Prueba:
¿Cómo solicito formación?
Paso 7 — Retrieval
Recupera los chunks relevantes.
Paso 8 — Prompt
Eres un asistente de la aplicación.
Responde exclusivamente utilizando
la información del CONTEXTO.
No inventes información.
Si el contexto no contiene
la respuesta, responde:
"No encuentro información suficiente
en la documentación disponible."
Incluye las fuentes utilizadas.
CONTEXTO:
{{context}}
PREGUNTA:
{{question}}
Paso 9 — Mostrar fuentes
La interfaz debería mostrar:
Respuesta
...
Fuentes utilizadas:
• Training Manual — pág. 4
• FAQ Formación — pág. 2
16. Prompts para construir el sistema con IA
Prompt 1 — Diseñar arquitectura
Estoy construyendo una aplicación web
empresarial con PostgreSQL,
frontend y backend.
Quiero incorporar un sistema RAG.
Los documentos pertenecen a diferentes
departamentos y usuarios.
Diseña una arquitectura RAG
que tenga en cuenta:
- ingestión;
- chunking;
- embeddings;
- almacenamiento;
- retrieval;
- metadata filtering;
- permisos;
- generación;
- citaciones;
- logging;
- evaluación.
No escribas código todavía.
Explica primero las decisiones
arquitectónicas.
Prompt 2 — Diseñar modelo de datos
Diseña el modelo de datos para almacenar
documentos y chunks de un sistema RAG.
Necesito poder:
- identificar documentos;
- identificar chunks;
- almacenar embeddings;
- almacenar metadata;
- filtrar por departamento;
- filtrar por usuario;
- filtrar por cliente;
- recuperar la fuente original.
Propón las tablas,
relaciones e índices.
No generes código todavía.
Prompt 3 — Revisar seguridad
Revisa esta arquitectura RAG
desde el punto de vista de seguridad.
Especialmente:
- acceso entre usuarios;
- acceso entre clientes;
- documentos privados;
- prompt injection;
- fuga de información;
- metadata filtering;
- autorización;
- logs.
Identifica escenarios de ataque
y propone mitigaciones.
Prompt 4 — Generar código por fases
Implementa solamente la fase
de ingestión de documentos.
La solución debe:
1. recibir un documento;
2. extraer texto;
3. dividirlo en chunks;
4. generar embeddings;
5. guardar chunks;
6. guardar metadata.
Antes del código explica:
- archivos que modificarás;
- dependencias;
- flujo;
- errores posibles;
- estrategia de testing.
No modifiques otras partes
de la aplicación.
Prompt 5 — Evaluación
Diseña un conjunto de 30 preguntas
para evaluar mi sistema RAG.
Cada caso debe contener:
- pregunta;
- documentos relevantes;
- respuesta esperada;
- fuente esperada.
Incluye casos:
- fáciles;
- ambiguos;
- sin respuesta;
- información contradictoria;
- documentos desactualizados;
- intentos de acceder a información privada.
17. Ejercicios prácticos
Ejercicio 1 — Explica RAG
Explica RAG en menos de cinco líneas como si se lo explicaras a alguien que no sabe nada de IA.
Ver solución
RAG permite que una aplicación busque información relevante en sus propios documentos y se la proporcione al modelo antes de generar una respuesta.
Ejercicio 2 — Ordena el pipeline
Ordena:
LLM
Chunking
Pregunta
Vector DB
Embedding
Retrieval
Documento
Ver solución
Documento
↓
Chunking
↓
Embedding
↓
Vector DB
Pregunta
↓
Embedding
↓
Retrieval
↓
Contexto
↓
LLM
Ejercicio 3 — ¿Por qué no enviar todo?
Tenemos 20.000 documentos. ¿Por qué no enviamos todos al LLM?
Ver solución
- coste;
- tokens;
- latencia;
- contexto excesivo;
- información irrelevante;
- riesgo de introducir información que el usuario no debería recibir.
Ejercicio 4 — Diseña metadata
Diseña metadata para un documento corporativo.
Ver solución orientativa
document_id
chunk_id
title
department
client
country
language
visibility
created_at
updated_at
page
author
Ejercicio 5 — Seguridad
Un usuario pertenece al Cliente A. El retrieval devuelve un documento del Cliente B porque es muy similar a la pregunta. ¿Qué está mal?
Ver solución
La búsqueda semántica se ha ejecutado sin aplicar correctamente los filtros de autorización. La similitud no debe estar por encima de los permisos.
Ejercicio 6 — Sin respuesta
El usuario pregunta algo que no aparece en los documentos. ¿Qué debería responder el sistema?
Ver solución
Debe reconocer que no dispone de información suficiente, en lugar de inventar una respuesta.
Ejercicio 7 — Chunking
¿Por qué podría ser mala idea dividir un documento simplemente cada 500 caracteres?
Ver solución
Porque podríamos separar información que conceptualmente debería permanecer junta. Es preferible considerar estructura semántica cuando sea posible: títulos, párrafos, secciones, listas, etc.
Ejercicio 8 — Diagnóstico
El RAG devuelve respuestas incorrectas.
Enumera cinco posibles causas.
Ver solución
18. Ejercicio avanzado — diseña tu propio RAG
Diseña sobre papel el RAG de nuestra Super Aplicación.
Debes definir:
- qué documentos tendrá;
- quién puede acceder a ellos;
- cómo se dividirán;
- qué metadata tendrán;
- dónde se almacenarán;
- cómo se buscarán;
- cuántos chunks recuperarás;
- cómo se construirá el prompt;
- cómo se mostrarán las fuentes;
- cómo se evaluará.
Ver una propuesta de solución
DOCUMENT
↓
Parser
↓
Semantic Chunking
↓
Embedding
↓
PostgreSQL + pgvector
↓
Metadata
├── client
├── department
├── visibility
└── owner
QUERY
↓
Authentication
↓
Authorization
↓
Embedding
↓
Vector Search
↓
Metadata Filter
↓
Top 5
↓
Context Builder
↓
LLM
↓
Answer + Sources
↓
Frontend
19. Test de evaluación
Objetivo recomendado: 80% o más.
Ver respuestas
- A
- A
- A
- A
- A
- A
- B
- A
- A
- B
- A
- B
- A
- A
- A
- C
- A
- B
- A
- A
20. Proyecto de Week 15
Knowledge Center
Nuestra Super Aplicación incorporará su primer sistema de conocimiento.
Funcionalidad
El usuario podrá preguntar sobre documentación disponible en la aplicación.
Ejemplo
Usuario:
"¿Cuál es el procedimiento
para solicitar formación?"
La aplicación:
1. Identifica usuario
2. Comprueba permisos
3. Genera embedding
4. Busca documentos
5. Aplica filtros
6. Recupera Top-K
7. Construye contexto
8. Llama al LLM
9. Valida respuesta
10. Devuelve respuesta
11. Muestra fuentes
Requisitos mínimos
| Funcionalidad | Obligatoria |
|---|---|
| Carga de documentos | Sí |
| Chunking | Sí |
| Embeddings | Sí |
| Vector storage | Sí |
| Retrieval | Sí |
| Metadata | Sí |
| Control de acceso | Sí |
| LLM | Sí |
| Fuentes | Sí |
| Tests | Sí |
Objetivo de calidad
Crear al menos:
20 documentos
50+ chunks
20 preguntas de evaluación
5 preguntas sin respuesta
5 preguntas ambiguas
5 pruebas de permisos
Entregables
- arquitectura;
- modelo de datos;
- pipeline de ingestión;
- pipeline de retrieval;
- prompt;
- código;
- tests;
- dataset de evaluación;
- capturas de funcionamiento;
- documentación.
21. Nivel avanzado — RAG vs Fine-Tuning
A partir de ahora encontrarás constantemente estos dos conceptos.
| RAG | Fine-Tuning |
|---|---|
| Proporciona información en tiempo de consulta. | Modifica el comportamiento del modelo mediante entrenamiento. |
| Bueno para conocimiento actualizable. | Bueno para adaptar comportamiento o estilo. |
| Permite citar fuentes. | No está pensado principalmente para citar fuentes. |
| Actualizar documentos puede ser sencillo. | Actualizar conocimiento puede requerir nuevo entrenamiento. |
Para muchas aplicaciones empresariales que necesitan consultar documentación cambiante, RAG es una primera opción muy natural.
22. Recursos externos
OpenAI — RetrievalDocumentación oficial sobre retrieval y búsqueda de información. pgvector
Extensión de PostgreSQL para almacenar y buscar vectores. Qdrant Documentation
Documentación de una base de datos vectorial especializada. Pinecone Documentation
Documentación sobre bases de datos vectoriales. LangChain
Framework para construir aplicaciones basadas en LLM. LlamaIndex
Framework centrado especialmente en aplicaciones que trabajan con datos y RAG. Hugging Face AI Cookbook
Ejemplos prácticos de sistemas basados en IA. Pinecone — RAG Guide
Introducción práctica al concepto de Retrieval-Augmented Generation.
23. Checklist de Week 15
24. Criterios de finalización
| Área | Resultado |
|---|---|
| Conceptos | Puede explicar RAG, embeddings, chunks y vector databases. |
| Arquitectura | Puede dibujar un pipeline RAG. |
| Seguridad | Entiende autorización y metadata filtering. |
| Implementación | Tiene un RAG funcionando. |
| Evaluación | Tiene dataset de pruebas. |
| Trazabilidad | La aplicación muestra fuentes. |
| Test | ≥80%. |
25. Próxima etapa
Week 16 — AI Agents
Hasta ahora tenemos:
LLM
+
Tools
+
RAG
Ahora vamos a combinarlos.
La pregunta será:
¿Podemos hacer que la IA
decida qué herramientas utilizar
para resolver una tarea?
Entraremos en:
- Agents;
- Tool Calling avanzado;
- Agent loops;
- planning;
- memory;
- state;
- guardrails;
- human-in-the-loop.
Nuestra Super Aplicación evolucionará
Week 14
LLM
↓
Aplicación
Week 15
LLM
+
RAG
↓
Knowledge Center
Week 16
LLM
+
RAG
+
TOOLS
+
AGENT
↓
AI ASSISTANT
Aquí empieza realmente la transformación de nuestra aplicación en una plataforma inteligente.