FORMACIÓN · AI APPLICATION DEVELOPMENT

Week 15

RAG: cómo conseguir que nuestra aplicación pueda responder utilizando su propio conocimiento.

Semana 15 de 24 · Nivel intermedio

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:

2. El problema que queremos solucionar

Imagina que nuestra Super Aplicación tiene información interna:

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
PDF 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:

Un chunk demasiado grande:

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:

  1. Procedimiento de formación
  2. Política de formación
  3. FAQ de formación

Tecnologías habituales

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:

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
  1. mal chunking;
  2. retrieval incorrecto;
  3. embeddings inadecuados;
  4. documentación incorrecta;
  5. prompt incorrecto;
  6. contexto insuficiente;
  7. modelo interpreta mal el contexto.

18. Ejercicio avanzado — diseña tu propio RAG

Diseña sobre papel el RAG de nuestra Super Aplicación.

Debes definir:

  1. qué documentos tendrá;
  2. quién puede acceder a ellos;
  3. cómo se dividirán;
  4. qué metadata tendrán;
  5. dónde se almacenarán;
  6. cómo se buscarán;
  7. cuántos chunks recuperarás;
  8. cómo se construirá el prompt;
  9. cómo se mostrarán las fuentes;
  10. 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.

1. ¿Qué significa RAG?

2. ¿Qué hace Retrieval?

3. ¿Qué es un chunk?

4. ¿Qué representa un embedding?

5. ¿Dónde se pueden almacenar embeddings?

6. ¿Qué significa Top-K?

7. ¿RAG entrena el LLM?

8. ¿Por qué dividir documentos?

9. ¿Qué problema puede causar un chunk demasiado pequeño?

10. ¿Qué debería ocurrir si no existe información suficiente?

11. ¿Por qué son importantes las metadata?

12. ¿Qué debe tener prioridad: similitud o permisos?

13. ¿Qué ventaja tiene mostrar fuentes?

14. ¿Qué componente busca información relevante?

15. ¿Qué ocurre después del retrieval?

16. ¿Qué puede hacer fallar un RAG?

17. ¿Qué significa metadata filtering?

18. ¿Qué debería proteger los documentos privados?

19. ¿Cuál es la idea fundamental de RAG?

20. ¿Cuál es el objetivo de nuestra Week 15?

Ver respuestas
  1. A
  2. A
  3. A
  4. A
  5. A
  6. A
  7. B
  8. A
  9. A
  10. B
  11. A
  12. B
  13. A
  14. A
  15. A
  16. C
  17. A
  18. B
  19. A
  20. 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

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 — Retrieval
Documentació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.