? Awesome Retrieval Generación Aumentada (RAG)
Este repositorio contiene una Awesome List seleccionada e información general sobre aplicaciones de recuperación-generación aumentada (RAG) en IA generativa.
Recuperación-Generación Aumentada (RAG) es una técnica de IA generativa en la que se recupera contexto adicional de fuentes externas para enriquecer el proceso generativo de modelos de lenguaje grande (LLM). Este enfoque permite a los LLM incorporar información actualizada, específica o confidencial de la que pueden carecer únicamente de sus datos previos a la capacitación.
Contenido
- Información general sobre RAG
- Aproches
- ? Marcos que facilitan RAG
- Técnicas
- Métrica
- ? Bases de datos
Información general sobre RAG
En los enfoques RAG tradicionales, se emplea un marco básico para recuperar documentos que enriquecen el contexto de un mensaje de LLM. Por ejemplo, al consultar sobre materiales para renovar una casa, el LLM puede poseer conocimientos generales sobre renovación pero carece de detalles específicos sobre la casa en particular. La implementación de una arquitectura RAG permite la búsqueda y recuperación rápida de documentos relevantes, como planos, para ofrecer respuestas más personalizadas. Esto asegura que el LLM incorpore información específica a las necesidades de renovación, mejorando así la precisión de sus respuestas.
Una implementación RAG típica sigue estos pasos clave:
- Divida la base de conocimientos: divida el corpus del documento en partes más pequeñas y manejables.
- Cree incrustaciones: aplique un modelo de incrustación para transformar estos fragmentos de texto en incrustaciones vectoriales, capturando su significado semántico.
- Almacenar en una base de datos vectorial: guarde las incrustaciones en una base de datos vectorial, lo que permite una recuperación rápida basada en la similitud semántica.
- Manejar consultas de usuarios: convierta la consulta del usuario en una incrustación utilizando el mismo modelo que se aplicó a los fragmentos de texto.
- Recuperar datos relevantes: busque en la base de datos de vectores incrustaciones que coincidan estrechamente con la incrustación de la consulta en función de la similitud semántica.
- Mejore el mensaje: incorpore los fragmentos de texto más relevantes en el mensaje del LLM para proporcionar un contexto valioso para generar una respuesta.
- Genere una respuesta: el LLM aprovecha el mensaje aumentado para brindar una respuesta precisa y adaptada a la consulta del usuario.
Aproches
Las implementaciones de RAG varían en complejidad, desde la simple recuperación de documentos hasta técnicas avanzadas que integran bucles de retroalimentación iterativos y mejoras específicas del dominio. Los enfoques pueden incluir:
- RAG correctivo (CRAG): métodos para corregir o refinar la información recuperada antes de integrarla en las respuestas de LLM.
- Ajuste fino de recuperación aumentada (RAFT): técnicas para ajustar los LLM específicamente para tareas mejoradas de recuperación y generación.
- RAG autorreflectante: modelos que ajustan dinámicamente las estrategias de recuperación en función de la retroalimentación del desempeño del modelo.
- RAG Fusion: Técnicas que combinan múltiples métodos de recuperación para mejorar la integración del contexto.
- Recuperación aumentada temporal (TAR): considerar datos urgentes en los procesos de recuperación.
- Planificar y luego RAG (PlanRAG): Estrategias que involucran etapas de planificación antes de ejecutar RAG para tareas complejas.
- GraphRAG: un enfoque estructurado que utiliza gráficos de conocimiento para mejorar la integración del contexto y el razonamiento.
- FLARE: un enfoque que incorpora generación aumentada de recuperación activa para mejorar la calidad de la respuesta.
- Recuperación contextual: mejora la recuperación agregando contexto relevante a los fragmentos de documentos antes de la recuperación, mejorando la relevancia de la información recuperada de grandes bases de conocimiento.
? Marcos que facilitan RAG
- Haystack: marco de orquestación LLM para crear aplicaciones LLM personalizables y listas para producción.
- LangChain: un marco multiuso para trabajar con LLM.
- Kernel semántico: un SDK de Microsoft para desarrollar aplicaciones de IA generativa.
- LlamaIndex: marco para conectar fuentes de datos personalizadas a LLM.
- Cognita: marco RAG de código abierto para crear aplicaciones modulares y listas para producción.
- Verba: aplicación de código abierto para RAG lista para usar.
- Mastra: marco mecanografiado para crear aplicaciones de IA.
Técnicas
Limpieza de datos
- Técnicas de limpieza de datos: pasos de preprocesamiento para refinar los datos de entrada y mejorar el rendimiento del modelo.
Incitación
- Estrategias
- Etiquetado y etiquetado: agregar etiquetas o etiquetas semánticas a los datos recuperados para mejorar la relevancia.
- Razón y acción (ReAct) (ReAct): integración de capacidades de razonamiento para guiar las respuestas de LLM basadas en el contexto recuperado.
- Cadena de pensamiento (CoT): animar al modelo a pensar en los problemas paso a paso antes de dar una respuesta.
- Cadena de verificación (CoVe): solicitar al modelo que verifique cada paso de su razonamiento para determinar la precisión.
- Autoconsistencia: Generar múltiples caminos de razonamiento y seleccionar la respuesta más consistente.
- Indicaciones de disparo cero: diseño de indicaciones que guían el modelo sin ningún ejemplo.
- Indicaciones breves: proporcione algunos ejemplos en la indicación para demostrar el formato de respuesta deseado.
- Almacenamiento en caché
- Almacenamiento en caché rápido: optimiza los LLM almacenando y reutilizando estados de atención precalculados.
fragmentación
- fragmentación de tamaño fijo
- Dividir el texto en segmentos de tamaño consistente para un procesamiento eficiente.
- Divide los textos en fragmentos según el tamaño y la superposición.
- Ejemplo: Dividir por carácter (LangChain).
- Ejemplo: SentenceSplitter (LlamaIndex).
- fragmentación recursiva
- Segmentación jerárquica mediante algoritmos recursivos para estructuras de documentos complejas.
- Ejemplo: división recursiva por carácter (LangChain).
- Fragmentación basada en documentos
- Segmentar documentos en función de metadatos o señales de formato para un análisis específico.
- Ejemplo: MarkdownHeaderTextSplitter (LangChain).
- Ejemplo: maneje incrustaciones de imágenes y texto con modelos como OpenCLIP.
- fragmentación semántica
- Extraer secciones significativas basadas en la relevancia semántica en lugar de límites arbitrarios.
- fragmentación agente
- Métodos de fragmentación interactivos donde los LLM guían la segmentación.
Incrustaciones
- Seleccionar modelo de incrustación
- Tabla de clasificación MTEB : explore el punto de referencia de Hugging Face para evaluar incrustaciones de modelos.
- Incorporaciones personalizadas : desarrolle incorporaciones personalizadas para dominios o tareas específicas para mejorar el rendimiento del modelo. Las incrustaciones personalizadas pueden capturar terminología y matices específicos del dominio. Las técnicas incluyen el ajuste de modelos previamente entrenados en su propio conjunto de datos o el entrenamiento de incorporaciones desde cero utilizando marcos como TensorFlow o PyTorch.
Recuperación
- Métodos de búsqueda
- Índice plano de tienda de vectores
- Forma de recuperación simple y eficiente.
- El contenido se vectoriza y almacena como vectores de contenido plano.
- Recuperación de índice jerárquico
- Limite los datos jerárquicamente a diferentes niveles.
- Ejecuta recuperaciones por orden jerárquico.
- Preguntas hipotéticas
- Se utiliza para aumentar la similitud entre fragmentos de bases de datos y consultas (lo mismo ocurre con HyDE).
- LLM se utiliza para generar preguntas específicas para cada fragmento de texto.
- Convierte estas preguntas en incrustaciones de vectores.
- Durante la búsqueda, compara las consultas con este índice de vectores de preguntas.
- Incrustaciones de documentos hipotéticos (HyDE)
- Se utiliza para aumentar la similitud entre fragmentos de bases de datos y consultas (lo mismo ocurre con las preguntas hipotéticas).
- LLM se utiliza para generar una respuesta hipotética basada en la consulta.
- Convierte esta respuesta en una incrustación vectorial.
- Compara el vector de consulta con el vector de respuesta hipotético.
- Recuperación de pequeña a grande
- Mejora la recuperación mediante el uso de fragmentos más pequeños para la búsqueda y fragmentos más grandes para el contexto.
- Los fragmentos secundarios más pequeños se refieren a fragmentos principales más grandes.
- Reclasificación : mejora los resultados de búsqueda en los canales de RAG al reordenar los documentos recuperados inicialmente, priorizando aquellos semánticamente más relevantes para la consulta.
Métrica
Métricas de búsqueda
Estas métricas se utilizan para medir la similitud entre incrustaciones, lo cual es crucial para evaluar la eficacia con la que los sistemas RAG recuperan e integran documentos externos o fuentes de datos. Al seleccionar métricas de similitud apropiadas, puede optimizar el rendimiento y la precisión de su sistema RAG. Alternativamente, puede desarrollar métricas personalizadas adaptadas a su dominio o nicho específico para capturar matices específicos del dominio y mejorar la relevancia.
Similitud del coseno
- Mide el coseno del ángulo entre dos vectores en un espacio multidimensional.
- Altamente eficaz para comparar incrustaciones de texto donde la dirección de los vectores representa información semántica.
- Comúnmente utilizado en sistemas RAG para medir la similitud semántica entre incrustaciones de consultas e incrustaciones de documentos.
Producto escalar
- Calcula la suma de los productos de las entradas correspondientes de dos secuencias de números.
- Equivalente a la similitud del coseno cuando los vectores están normalizados.
- Simple y eficiente, a menudo se usa con aceleración de hardware para cálculos a gran escala.
Distancia euclidiana
- Calcula la distancia en línea recta entre dos puntos en el espacio euclidiano.
- Se puede usar con incrustaciones, pero puede perder efectividad en espacios de alta dimensión debido a la "maldición de la dimensionalidad".
- A menudo se utiliza en algoritmos de agrupamiento como K-means después de la reducción de dimensionalidad.
Similitud de Jaccard
- Mide la similitud entre dos conjuntos finitos como el tamaño de la intersección dividido por el tamaño de la unión de los conjuntos.
- Útil al comparar conjuntos de tokens, como en modelos de bolsa de palabras o comparaciones de n-gramas.
- Menos aplicable a incrustaciones continuas producidas por LLM.
Nota: La similitud del coseno y el producto escalar generalmente se consideran las métricas más efectivas para medir la similitud entre incrustaciones de alta dimensión.
Métricas de evaluación de respuesta
Estas métricas evalúan la calidad y relevancia de las respuestas generadas desde su sistema RAG, evaluando qué tan precisas, contextualmente apropiadas y confiables son. Al aplicar estas métricas de evaluación, puede obtener información sobre el rendimiento de su sistema e identificar áreas de mejora.
- Evaluación comparativa automatizada
- Los humanos como jueces
- Modelos como jueces
Herramientas
Estas herramientas pueden ayudar a evaluar el rendimiento de su sistema RAG, desde el seguimiento de los comentarios de los usuarios hasta el registro de interacciones de consultas y la comparación de múltiples métricas de evaluación a lo largo del tiempo.
- LangFuse : herramienta de código abierto para rastrear métricas de LLM, observabilidad y gestión rápida.
- Ragas : Marco que ayuda a evaluar los ductos RAG.
- LangSmith : una plataforma para crear aplicaciones LLM de nivel de producción que le permite monitorear y evaluar de cerca su aplicación.
- Hugging Face Evaluate : herramienta para calcular métricas como BLEU y ROUGE para evaluar la calidad del texto.
- Ponderaciones y sesgos : realiza un seguimiento de experimentos, registra métricas y visualiza el rendimiento.
? Bases de datos
La siguiente lista presenta varios sistemas de bases de datos adecuados para aplicaciones de recuperación de generación aumentada (RAG). Cubren una variedad de casos de uso de RAG, lo que ayuda al almacenamiento y recuperación eficiente de vectores para generar respuestas o recomendaciones.
Puntos de referencia
- Elegir una base de datos vectorial
Motores de servicio y procesamiento de datos distribuidos:
- Apache Cassandra: sistema de gestión de bases de datos distribuidas NoSQL.
- MongoDB Atlas: servicio de base de datos multimodelo distribuido globalmente con búsqueda vectorial integrada.
- Vespa: motor de servicio y procesamiento de big data de código abierto diseñado para aplicaciones en tiempo real.
Motores de búsqueda con capacidades vectoriales:
- Elasticsearch: proporciona capacidades de búsqueda vectorial junto con funcionalidades de búsqueda tradicionales.
- OpenSearch: motor de análisis y búsqueda distribuido, bifurcado de Elasticsearch.
Bases de datos vectoriales:
- Chroma DB: una base de datos integrada de código abierto nativa de IA.
- Milvus: una base de datos vectorial de código abierto para aplicaciones impulsadas por IA.
- Pinecone: una base de datos vectorial sin servidor, optimizada para flujos de trabajo de aprendizaje automático.
- Oracle AI Vector Search: integra capacidades de búsqueda de vectores dentro de Oracle Database para consultas semánticas basadas en incrustaciones de vectores.
Extensiones de bases de datos relacionales:
- Pgvector: una extensión de código abierto para la búsqueda de similitudes de vectores en PostgreSQL.
Otros sistemas de bases de datos:
- Azure Cosmos DB: servicio de base de datos multimodelo distribuido globalmente con búsqueda vectorial integrada.
- Couchbase: una base de datos distribuida en la nube NoSQL.
- Lantern: un motor de búsqueda personal consciente de la privacidad.
- LlamaIndex: Emplea un sencillo almacén de vectores en memoria para una experimentación rápida.
- Neo4j: Sistema de gestión de bases de datos de gráficos.
- Qdrant: una base de datos vectorial de código abierto diseñada para la búsqueda de similitudes.
- Redis Stack: un almacén de estructura de datos en memoria que se utiliza como base de datos, caché y intermediario de mensajes.
- SurrealDB: una base de datos multimodelo escalable optimizada para datos de series temporales.
- Weaviate: un motor de búsqueda vectorial nativo de la nube de código abierto.
Bibliotecas y herramientas de búsqueda de vectores:
- FAISS: una biblioteca para la búsqueda eficiente de similitudes y la agrupación de vectores densos, diseñada para manejar conjuntos de datos a gran escala y optimizada para una recuperación rápida de los vecinos más cercanos.