RAG y recuperación de conocimiento

RAG (Retrieval-Augmented Generation, Generación Aumentada por Recuperación) es una de las arquitecturas de implementación de LLM más populares en la actualidad.

La idea central de RAG es:Hacer que el LLM, al responder una pregunta, primero recupere contenido relevante de una base de conocimiento externa y luego genere la respuesta basándose en los resultados de la recuperación,en lugar de depender únicamente del conocimiento memorizado durante el entrenamiento del modelo.

Esto resuelve dos puntos críticos de los LLM: la fecha de corte del conocimiento (el modelo no sabe lo que ocurrió después del entrenamiento) y el problema de las alucinaciones (el modelo inventa respuestas cuando no está seguro).


Principios básicos de RAG

Un sistema RAG completo consta de dos pipelines:Pipeline de indexación fuera de línea(preprocesa documentos y los almacena en una base de vectores) yPipeline de consulta en línea(recibe la pregunta del usuario, recupera y genera).

En la fase fuera de línea, los documentos originales se dividen en fragmentos pequeños, se convierten en vectores mediante un modelo de Embedding y se almacenan en la base de datos vectorial.

En la fase en línea, la pregunta del usuario también se convierte en vector, se encuentran los fragmentos de documento más similares en la base de datos, se concatenan como contexto y se entregan al LLM para generar la respuesta.

La siguiente figura muestra el flujo de solicitud completo de RAG:

Diagrama de flujo básico de RAG Flujo de solicitud completo de RAG: la pregunta del usuario se convierte en un vector de consulta mediante el modelo de Embedding, se recuperan fragmentos de documento similares en la base de datos vectorial, la pregunta y los resultados de recuperación se concatenan como Prompt, y se introducen en el LLM para generar la respuesta final. Pregunta del usuario Embedding Convertir a vector de consulta Base de datos vectorial Recuperación por similitud Top-K Concatenación del Prompt Pregunta + fragmentos de documento Generación del LLM Responder basándose en los resultados de recuperación Indexación fuera de línea (preprocesamiento único) Documentos originales Segmentación / limpieza Embedding Convertir a vectores de documento Escritura Base de datos vectorial Flujo de consulta en línea (cada solicitud lo atraviesa)

Preprocesamiento de datos y segmentación de documentos (Chunking)

Desafío previo: análisis de documentos complejos

Antes de realizar la segmentación, RAG a menudo se enfrenta al desafío delanálisis de formatoEspecialmente en tablas, imágenes y diseños de varias columnas en PDF, Word o escaneos, la extracción de texto ordinaria puede causar fácilmente confusión semántica.

Actualmente, la solución principal en la industria es introducirmotores de análisis de documentos(como LlamaParse, Unstructured) o modelos multimodales grandes, para convertir imágenes y texto complejos en Markdown estructurado, sentando las bases para una segmentación de alta calidad posterior.

Estrategias de segmentación de documentos

La segmentación de documentos es la base del rendimiento de RAG; la granularidad de la segmentación afecta directamente la calidad de la recuperación. Fragmentos demasiado grandes introducen ruido, y fragmentos demasiado pequeños pierden contexto. Las estrategias comunes son las siguientes:

Estrategia de segmentación Escenario aplicable Ventajas Desventajas
Segmentación de tamaño fijo Texto general Implementación simple y rápida Puede cortar oraciones semánticamente completas
Segmentación recursiva por caracteres Texto estructurado (Markdown, código) Prioriza la segmentación por límites semánticos como párrafos y oraciones Implementación ligeramente compleja; se debe definir una lista razonable de separadores
Segmentación semántica (Semantic) Documentos largos, libros Utiliza Embedding para calcular la similitud entre oraciones adyacentes y encuentra automáticamente puntos de transición semántica para segmentar Alto costo computacional y preprocesamiento lento
Recuperación de documentos padre-hijo
(Small-to-Big)
Escenario de cobertura integral Utiliza "fragmentos pequeños" para una recuperación vectorial de alta precisión; tras la coincidencia, devuelve el "fragmento grande" correspondiente (documento padre) al LLM, equilibrando la precisión de la recuperación y la integridad del contexto. El costo de diseño y mantenimiento de la base de datos se duplica

En la práctica, a menudo se agregasuperposición (overlap), es decir, los fragmentos adyacentes comparten algunos caracteres para evitar que información importante se trunque en los límites. Configuración típica: tamaño de fragmento de 512 tokens, superposición de 50 a 100 tokens.

Ejemplo: Segmentación recursiva con LangChain

from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=512,        # Número máximo de tokens por fragmento
    chunk_overlap=50,      # Número de tokens de superposición entre fragmentos adyacentes, para evitar pérdida de información en los límites
    separators=["\n\n", "\n", "。", ".", " ", ""]  # Priorizar la segmentación por párrafos y oraciones
)

chunks = splitter.split_text(document_text)
print(f"Segmentado en {len(chunks)} fragmentos de documento")

Recuperación vectorial

Modelo de Embedding

El modelo de Embedding se encarga de convertir texto en vectores densos (generalmente arreglos de números flotantes de 768 o 1536 dimensiones). Los textos semánticamente similares están más cerca en el espacio vectorial, y esto es la base matemática de la recuperación por similitud.

Comparación de modelos de Embedding comunes:

Modelo Dimensión Idiomas aplicables Características
text-embedding-3-small(OpenAI) 1536 Multilingüe Alta relación calidad-precio, adecuado para indexación a gran escala
text-embedding-3-large(OpenAI) 3072 Multilingüe Mayor precisión, costo más alto
BAAI/bge-m3 1024 Chino e inglés Código abierto, excelente rendimiento en chino, soporta múltiples idiomas
sentence-transformers/all-MiniLM-L6-v2 384 Inglés Tamaño pequeño, rápido, adecuado para implementaciones locales muy ligeras

Cálculo de similitud y algoritmos ANN

El núcleo de la recuperación es medir la distancia. La más utilizada es lasimilitud coseno (Cosine Similarity), que calcula el coseno del ángulo entre dos vectores, con un rango de [-1, 1]; cuanto más cercano a 1, más similares. También están el producto punto (Dot Product) y la distancia euclidiana (L2 Distance).

Para lograr una recuperación en milisegundos entre millones de vectores, las bases de datos suelen utilizaralgoritmos de vecino más cercano aproximado (ANN),(comoHNSW, IVF). HNSW es actualmente el algoritmo más popular; construye una red de grafos de salto multicapa y sacrifica muy poca precisión a cambio de una mejora de velocidad de búsqueda de órdenes de magnitud.


RAG Avanzado (Arquitectura avanzada)

La arquitectura básica (Naive RAG) a menudo enfrenta problemas como recuperación imprecisa y "inundación de contexto" debido al exceso de información redundante. Advanced RAG resuelve esto mediante unaoptimización previa a la recuperación → fusión de recuperación → optimización posterior a la recuperaciónarquitectura de tres etapas.

1. Pre-recuperación: Optimización de consultas

Las preguntas originales de los usuarios suelen ser poco precisas:

  • Reescritura de consultas (Query Rewriting): usar el LLM para reescribir preguntas coloquiales en términos de búsqueda normalizados.
  • HyDE(Hypothetical Document Embedding): hacer que el LLM primero "adivine" a ciegas una respuesta hipotética; dado que la respuesta generada suele contener más terminología de la industria que la pregunta original, usar el vector de esa respuesta hipotética para recuperar a menudo puede recuperar documentos de mayor calidad.

2. Búsqueda híbrida (Hybrid Search)

va aRecuperación vectorial(comprende la semántica, alta tolerancia a errores) yrecuperación por palabras clave(BM25, alta coincidencia) se fusionan por pesos. Esto es especialmente importante cuando se encuentran nombres propios, modelos de productos o fragmentos de código, porque la recuperación vectorial tradicional tiende a fallar con nombres propios específicos.

3. Optimización post-recuperación: Reordenamiento (Reranking)

Este es un diseño de dos etapas declasificación gruesa → clasificación fina. Aunque la recuperación vectorial es rápida, su puntuación no es lo suficientemente precisa. El reordenamiento (Reranking) introduce unmodelo Cross-Encoder.(Como `bge-reranker`), se ingresan la "pregunta" y el "documento" como un par al modelo para realizar una puntuación conjunta mediante razonamiento. Su carga computacional es alta y solo se encarga de refinar la selección del Top-20 al Top-5.

Ejemplo: Pseudocódigo del proceso de reordenamiento

from sentence_transformers import CrossEncoder

reranker = CrossEncoder("BAAI/bge-reranker-v2-m3")

# 1. Clasificación inicial: recuperación ultrarrápida del Top-50 mediante búsqueda vectorial
candidates = vector_store.similarity_search(query, k=50)

# 2. Clasificación fina: construir pares [pregunta, documento] para una puntuación precisa
pairs = [[query, doc.page_content] for doc in candidates]
scores = reranker.predict(pairs)

# 3. Filtrar el Top-5 final que se pasará al LLM
ranked_docs = sorted(zip(scores, candidates), reverse=True)
final_docs = [doc for _, doc in ranked_docs[:5]]

4. Self-RAG y CRAG (RAG correctivo)

Se incorpora un mecanismo de autorreflexión. Por ejemplo, CRAG (Corrective RAG), tras obtener los resultados de la recuperación, hace que el LLM actúe primero como "juez" para puntuar. Si la base de conocimiento local no contiene el documento o su calidad es extremadamente baja, el sistema activa automáticamente la búsqueda web (Web Search), como la API de Google, como complemento, lo que reduce significativamente las alucinaciones.


GraphRAG: Fusión de grafo de conocimiento + recuperación

El RAG tradicional trata la base de conocimiento como fragmentos de texto independientes y no puede responder a preguntas como "encontrar todas las empresas que fueron fundadas por el actual CEO y que tienen una capitalización de mercado superior a los cien mil millones", que requierenrazonamiento multi-salto entre documentos. Son problemas complejos.GraphRAGSe introduce el grafo de conocimiento (Knowledge Graph), modelando explícitamente entidades y relaciones.

Diagrama de arquitectura de GraphRAG GraphRAG fusiona la búsqueda vectorial con el grafo de conocimiento: la pregunta del usuario activa simultáneamente la búsqueda vectorial y la búsqueda en el grafo; los resultados de ambas vías se fusionan y se introducen en el LLM para generar la respuesta. Pregunta del usuario Búsqueda vectorial Bloques de documentos relevantes Búsqueda en el grafo Subgrafo de relaciones entre entidades Fusión de contexto Bloques de documentos + rutas del grafo Entidad A → Relación → Entidad B Entidad B → Relación → Entidad C

Pasos principales de GraphRAG

  1. Construcción de conocimiento: en la fase offline, se utiliza el LLM para extraer tripletas (sujeto, relación, objeto) de los documentos y escribirlas en bases de datos de grafos como Neo4j.
  2. Búsqueda de doble vía: para las entidades mencionadas en la pregunta, no solo se realiza la búsqueda vectorial tradicional, sino que también se activa la travesía del grafo (Graph Traversal) para extraer cadenas de relaciones multi-salto.
  3. Generación mediante fusión de grafo y texto: los "fragmentos" recuperados por la búsqueda vectorial y las "estructuras de ruta" recuperadas por la búsqueda en el grafo se ensamblan en el Prompt, lo que permite que el LLM tenga tanto una visión global como el dominio de los detalles concretos.

Referencia de contenido de GraphRAG:https://www.example.com/ai-agent/graphrag-usage.html


Recomendaciones de selección de tecnologías y bases de datos

Selección de bases de datos / herramientas Tipo Escenarios de implementación recomendados
Pinecone / Zilliz Cloud Servicio en la nube totalmente gestionado Listo para usar, sin necesidad de mantener infraestructura. Junto con Cohere Rerank + GPT-4o, es la solución más rápida de llevar a producción comercial.
Qdrant Código abierto + autohospedado Escrito en Rust, con excelente gestión de memoria y muy alto rendimiento. Adecuado para el despliegue privado a nivel empresarial.
Weaviate / Elasticsearch Código abierto + autohospedado Incluye una búsqueda híbrida (Hybrid Search) de BM25 + vectorial extremadamente madura; es la opción preferida en escenarios con gran cantidad de terminología especializada.
Milvus Código abierto distribuido Adecuado para plataformas de recuperación empresarial de ultra gran escala, del orden de mil millones a diez mil millones.
Chroma / FAISS Base de datos local / embebida Extremadamente ligera, no requiere desplegar un servicio independiente. Muy adecuada para el desarrollo local y la validación de proyectos de bases de conocimiento personales.

Métricas de evaluación de RAG (marco RAGAS)

La evaluación de los sistemas RAG no puede basarse únicamente en la intuición; la práctica habitual es utilizar el frameworkRAGASRAGAS, que realiza pruebas cuantitativas automatizadas desde las dos dimensiones de "recuperación" y "generación":

  • Context Recall (tasa de recuperación de contexto): qué proporción de la información de la respuesta estándar puede recuperarse.
  • Context Precision (precisión de recuperación de contexto): qué proporción de los documentos recuperados es realmente relevante.
  • Faithfulness (fidelidad / métrica de alucinaciones): si las respuestas generadas están respaldadas por los documentos recuperados.
  • Answer Relevance (relevancia de la respuesta): si la respuesta generada responde realmente a la pregunta del usuario, evitando respuestas que no vienen al caso.
Otras extensiones