¿El RAG recupera información desactualizada sin saberlo? Cómo gestionar la frescura del índice
Un vector store no tiene concepto de datos obsoletos — recupera chunks desactualizados con la misma confianza que chunks frescos. Estrategias para gestionar la frescura: reindexado manual, programado, CRAG y Self-RAG.
El problema que nadie menciona
Los tutoriales de RAG muestran cómo indexar documentos, generar embeddings y hacer búsqueda semántica. Casi ninguno menciona lo que ocurre cuando los documentos indexados cambian. La respuesta corta: nada. El vector store no lo sabe.
Un vector store almacena representaciones numéricas (embeddings) de fragmentos de texto. No tiene campos de fecha de expiración, no monitoriza cambios en los documentos fuente, no distingue entre un chunk indexado ayer y uno indexado hace tres años. Cuando llega una query, recupera los chunks semánticamente más similares — sin importar cuándo fueron indexados ni si el contenido sigue siendo válido.
El escenario concreto: indexas la documentación de tu API en enero. En marzo actualizas los endpoints. El vector store sigue devolviendo los chunks de enero con alta confianza — son semánticamente muy relevantes. El agente responde con la información antigua sin ninguna señal de que está desactualizada.
Por qué el vector store no expira ni se autoinvalida
Un vector store es, en esencia, una base de datos optimizada para búsqueda por similitud coseno o producto punto en espacios de alta dimensión. Las bases de datos no tienen opinión sobre la frescura de los datos que almacenan — eso es responsabilidad de quien las opera. Un vector store tampoco.
Algunos vector stores (como Pinecone, Weaviate o Qdrant) soportan metadatos por chunk, incluyendo campos de fecha. Puedes usarlos para añadir filtros en la búsqueda ("recupera solo chunks indexados en los últimos 30 días") o para detectar chunks potencialmente obsoletos. Pero esto requiere instrumentar el pipeline de indexación expresamente para ello — no ocurre de forma automática.
from datetime import datetime
docs_with_metadata = [
Document(
page_content=chunk,
metadata={
"source": "api-docs-v2.md",
"indexed_at": datetime.utcnow().isoformat(),
"version": "2.1"
}
)
for chunk in chunks
]
vectorstore.add_documents(docs_with_metadata)Estrategias de gestión de frescura
Reindexado manual
Se activa
Cuando alguien lo recuerda
Adecuado para
Documentación estable, proyectos pequeños
Riesgo
Alto si se olvida; sin garantía de frescura
Reindexado programado
Se activa
Cron job (diario, semanal…)
Adecuado para
Docs con cambios periódicos predecibles
Riesgo
Datos obsoletos entre ejecuciones del cron
CRAG (Corrective RAG)
Se activa
Automático según confianza del retrieval
Adecuado para
Knowledge bases dinámicas, high-stakes
Riesgo
Mayor latencia; requiere acceso a web/fuente externa
Self-RAG
Se activa
El modelo decide si re-recuperar
Adecuado para
Tareas complejas donde la calidad de la respuesta varía mucho
Riesgo
Complejo de implementar; mayor coste en tokens
CRAG y Self-RAG: cuándo tiene sentido
CRAG (Corrective RAG) añade un paso de evaluación al pipeline estándar: antes de generar la respuesta, el sistema evalúa la confianza de los chunks recuperados. Si la confianza es baja (los chunks no parecen suficientemente relevantes), cae hacia una búsqueda web o una fuente externa más actualizada. Si es alta, procede con el RAG estándar.
Self-RAG va un paso más allá: el modelo genera la respuesta y luego se autocritica. Decide si la respuesta generada es suficientemente buena o si necesita re-recuperar información adicional antes de responder al usuario. Es un bucle de refinamiento automático.
Ambos patrones añaden latencia y coste. Para documentación estable (políticas de empresa, manuales técnicos con versiones controladas), el RAG naive con reindexado programado es suficiente. CRAG y Self-RAG tienen sentido cuando los datos cambian con frecuencia impredecible o cuando las consecuencias de responder con información desactualizada son significativas.
Regla de decisión: ¿con qué frecuencia cambia la documentación fuente? ¿Cuáles son las consecuencias de una respuesta con información obsoleta? Si la documentación es estable y las consecuencias son bajas, RAG naive + cron es suficiente. Si los datos cambian diariamente y las consecuencias son altas, evalúa CRAG o Self-RAG.
El takeaway
¿Quieres aplicar esto en tu equipo?
En Kuuli Technologies llevamos estas metodologías a equipos reales. Escríbenos si quieres una sesión de trabajo o una consultoría sobre agentes IA y SDD.