Mejora de las aplicaciones LLM con tecnologías contextuales Las aplicaciones de los modelos de lenguajes grandes han sido transformadoras en varios sectores y han dado forma a una nueva frontera en el procesamiento y la comprensión del lenguaje natural. Los LLM, reconocidos por generar texto similar a un humano, han revolucionado los chatbots, la creación de contenido e incluso las tareas complejas de resolución de problemas. Sin embargo, a pesar de sus impresionantes capacidades, los LLM enfrentan desafíos notables, particularmente en y el mantenimiento de la precisión durante interacciones prolongadas. Un problema común es su tendencia a las " ", donde el contenido generado, aunque fluido, puede derivar en inexactitud o irrelevancia. el conocimiento del contexto alucinaciones Aquí es donde tecnologías como y se vuelven fundamentales. Al integrar los LLM con RAG, que recupera dinámicamente información relevante de grandes conjuntos de datos, podemos mitigar significativamente estas limitaciones. La sinergia entre los LLM y las bases de datos vectoriales, capaces de manejar y recuperar de manera eficiente datos vectoriales estructurados, promete brindar un nuevo nivel de profundidad, contexto y confiabilidad a las aplicaciones LLM. la generación aumentada de recuperación (RAG) las bases de datos vectoriales En este blog, los lectores pueden esperar: : comprensión de las limitaciones de los LLM, como el conocimiento del contexto y los problemas de precisión. Información integral sobre los desafíos de los LLM : exploración de cómo estas técnicas abordan los inconvenientes de los LLM tradicionales. Introducción a RAG y bases de datos vectoriales : ejemplos prácticos que muestran la integración de RAG con bases de datos vectoriales para mejorar las aplicaciones LLM. Demostraciones prácticas y tutoriales : exploración de cómo estas integraciones se pueden aplicar de manera efectiva en entornos empresariales. Aplicaciones del mundo real : ya sea que sea un entusiasta de la tecnología, un practicante de inteligencia artificial o un profesional de negocios, el blog tiene como objetivo brindar información valiosa y conocimientos prácticos. Conocimiento práctico para diversos públicos Comprensión de la generación aumentada de recuperación (RAG) es un paradigma innovador en el campo de la IA y el procesamiento del lenguaje natural. Marca un cambio significativo con respecto a los modelos de lenguaje convencionales al integrar la recuperación de información en el proceso de generación del lenguaje. Este enfoque híbrido mejora la capacidad de los modelos de IA para generar respuestas que no solo sean contextualmente precisas sino que también estén dotadas de conocimientos actualizados procedentes de fuentes de datos externas. La recuperación-generación aumentada (RAG) El origen de RAG se remonta a la búsqueda de superar las limitaciones de los modelos de lenguaje estándar, como GPT (Generative Pre-trained Transformer). Los modelos tradicionales, a pesar de su capacidad para generar texto coherente, a menudo tienen dificultades para proporcionar respuestas precisas y basadas en hechos, en particular para consultas que requieren conocimientos específicos en tiempo real. Aquí hay una descripción de cómo funciona la generación aumentada de recuperación (RAG), integrándose con una base de datos vectorial: : el flujo de trabajo comienza con una integral, que es la base de la inteligencia del sistema. Esta base de conocimientos suele ser un gran corpus de documentos que contienen información que los usuarios pueden consultar. Estos documentos pueden ser cualquier cosa, desde hojas de preguntas frecuentes y artículos hasta bases de datos de información estructurada. Antes de que estos documentos puedan utilizarse, se someten a un proceso de ingestión en el que se preprocesan y se transforman en incrustaciones. Se emplea un , a menudo un sofisticado algoritmo de aprendizaje automático, para convertir la información textual en incrustaciones vectoriales. Estas incrustaciones representan numéricamente el contenido semántico de los documentos en un espacio multidimensional, que es óptimo para comparaciones de similitudes. Ingestión e indexación base de conocimientos modelo de incrustación : todo comienza cuando un cliente interactúa con una aplicación y plantea una consulta. Esta consulta es una solicitud de información o una pregunta que el cliente espera que la IA responda. Interacción con el cliente : la consulta sin procesar del cliente luego se procesa mediante un modelo de incrustación. Este modelo convierte la consulta de texto en un vector, que es una representación numérica que captura el significado semántico de la consulta en un espacio de alta dimensión. Incrustación de consultas : el vector de consulta se envía a una base de datos de vectores, una base de datos especializada diseñada para manejar datos vectoriales de alta dimensión. La base de datos realiza una búsqueda de similitud para recuperar las incrustaciones de documentos más relevantes. Estas incorporaciones representan conocimiento preprocesado de una base de conocimiento que se ha incorporado al sistema. Búsqueda de bases de datos de vectores : las incrustaciones de documentos recuperados se combinan con la consulta original para formar un mensaje que incluye tanto la consulta como el contexto relevante. Recuperación de contexto : este mensaje enriquecido luego se introduce en un modelo de aprendizaje de idiomas (LLM). El LLM utiliza el contexto de los documentos recuperados para generar una respuesta que sea precisa, informativa y contextualmente relevante para la consulta del cliente. Generación de respuesta del modelo de lenguaje : finalmente, el LLM produce una respuesta generativa, que se devuelve al cliente a través de la aplicación. Esta respuesta no solo se basa en el conocimiento previamente entrenado del modelo, sino que también se complementa con información específica recuperada de la base de conocimientos, lo que la hace muy relevante para la solicitud del usuario. Respuesta generativa Bases de datos vectoriales Las bases de datos vectoriales almacenan y administran datos que se han convertido en forma vectorial numérica, a menudo mediante procesos como la incorporación de modelos en el aprendizaje automático. Las incrustaciones son representaciones numéricas de datos, a menudo vectores de alta dimensión, que capturan las características semánticas o contextuales de la entrada original. En el caso de datos de texto, las incrustaciones convierten palabras, oraciones o documentos completos en un formato que una computadora puede procesar. Los modelos de aprendizaje automático, en particular las redes neuronales, se utilizan para generar estas incrustaciones de modo que significados similares estén cerca en el espacio vectorial. Estas bases de datos están diseñadas para realizar búsquedas de similitud de manera eficiente, que ubican los puntos de datos más cercanos a un vector de consulta determinado dentro del espacio vectorial. Aquí hay una mirada más profunda al proceso: : cuando se incorporan documentos, un modelo de incrustación (como una red neuronal) transforma el texto en un vector de alta dimensión. Cada vector representa el significado semántico del documento en forma numérica. Estos vectores luego se almacenan en la base de datos de vectores. Almacenamiento de datos : para facilitar una recuperación rápida, la base de datos crea un índice en estos vectores utilizando algoritmos adecuados para espacios de alta dimensión, como el índice de archivos invertidos (IVF) o el mundo pequeño navegable jerárquico (HNSW). La elección del tipo de índice equilibra la velocidad y la precisión de la búsqueda. Indexación : cuando se realiza una consulta, también se convierte en un vector utilizando el mismo modelo de incrustación. Luego, la base de datos de vectores utiliza el índice para encontrar rápidamente los vectores más similares al vector de consulta. La similitud está determinada por métricas de distancia como la distancia euclidiana o la similitud del coseno. Búsqueda de similitud : Ventajas de las incrustaciones : las incrustaciones están diseñadas para que los elementos semánticamente similares estén más cerca en el espacio vectorial, lo que permite a los sistemas comprender el contexto y el significado. Por ejemplo, en el campo de la genómica, los datos de expresión genética se pueden codificar como incrustaciones para revelar patrones que indican relaciones entre diferentes genes y fenotipos. Esto puede ayudar a identificar biomarcadores de enfermedades que pueden no ser evidentes mediante el análisis tradicional. Similitud semántica : pueden capturar relaciones complejas y matices en los datos que podrían pasarse por alto con las representaciones tradicionales. Una aplicación práctica se ve en los sistemas de recomendación, como los que utilizan servicios de streaming como Netflix o Spotify. Estas plataformas utilizan incrustaciones para comprender las preferencias del usuario y las características del contenido, recomendando así películas o canciones que comparten similitudes con las elecciones anteriores del usuario. A pesar de la diversidad de contenido, las incorporaciones permiten recomendaciones matizadas que van más allá del género o el artista, considerando patrones más profundos en el consumo de los usuarios. Relaciones complejas : las incrustaciones convierten diversos tipos de datos en un formato vectorial uniforme, simplificando operaciones como la comparación y la recuperación. Uniformidad Primeros pasos con VectorDB La creación de un entorno de desarrollo local para RAG y Vector DB ( ) implica varios pasos clave. Milvus Aquí hay una guía estructurada: : Requisitos previos Asegúrese de que Python 3.6+ esté instalado en su sistema. Se requiere Docker para ejecutar Milvus. : Ambiente virtual Cree un nuevo entorno virtual y utilícelo: python3 -m venv rag-milvus-env source rag-milvus-env/bin/activate # Install supporting dependencies pip install transformers datasets faiss-cpu torch sentence-transformers pymilvus : Milvus usando la ventana acoplable Extraiga y ejecute la imagen de Milvus Docker: (también puede utilizar otras bases de datos vectoriales) Puede seguir los pasos a continuación o seguir la guía de introducción que se proporciona . aquí docker pull milvusdb/milvus:latest docker run -d --name milvus_cpu -p 19530:19530 -p 19121:19121 milvusdb/milvus:latest : Datos de configuración Ahora intentemos descargar algunos datos de muestra, crear incrustaciones e insertarlas en una colección. import requests import csv url = "http://qim.fs.quoracdn.net/quora_duplicate_questions.tsv" # Download the file response = requests.get(url) response.raise_for_status() # This will raise an error if the download failed # Decode the content and split into lines lines = response.content.decode('utf-8').splitlines() questions = [] # Process the lines reader = csv.reader(lines, delimiter='\t') next(reader) # Skip the header row for row in reader: questions.extend([row[1], row[4]]) # Assuming the questions are in the 2nd and 3rd columns questions = questions[:10000] Crear incrustaciones from sentence_transformers import SentenceTransformer # transformer to create embeddings model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(questions) Insertar en la base de datos vectorial. # connect to db connections.connect() embedding_size = 384 # Prepare the collection schema fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=embedding_size) ] schema = CollectionSchema(fields, "questions") collection = Collection("questions", schema) # Insert the document embeddings mr = collection.insert([embeddings]) # to get document, in practice this would be some external DB. id_to_question = {str(mr.primary_keys[i]): questions[i] for i in range(len(questions))} # List all collections collections = list_collections() print(collections) Indexar la colección. from pymilvus import Collection index_params = { "metric_type": "L2", "index_type": "HNSW", # Index of type HNSW, refer to docs for other types. "params": { "M": 16, # Example value, adjust as needed "efConstruction": 200 } } collection = Collection("questions") collection.create_index( field_name="embedding", index_params=index_params ) Consultar documentos query = "What is artificial intelligence?" query_embedding = model.encode(query) collection.load() # Define search parameters search_params = {"metric_type": "L2", "params": {"nprobe": 10}} # Perform the search results = collection.search( data=[query_vector], anns_field="embedding", param=search_params, limit=10, expr=None, consistency_level="Strong" ) # Process results for result in results: milvus_id = str(result.id) # Convert ID to string for dictionary lookup original_question = id_to_question[milvus_id] print(f"Milvus ID: {milvus_id}, Similar Question: {original_question}") Una vez que obtengamos documentos semánticamente similares de vector db., podríamos pasar este contexto + consulta de entrada a los LLM, lo que tendrá resultados mucho mejores ya que los LLM ahora tienen contexto. Conclusión En conclusión, la integración de RAG con bases de datos vectoriales como Milvus ofrece una potente solución a algunos de los desafíos más apremiantes en las aplicaciones LLM, particularmente aquellas que requieren una comprensión contextual profunda y una recuperación dinámica de información. Al combinar la destreza generativa de los LLM con la precisión y eficiencia de las bases de datos vectoriales, las empresas pueden mejorar enormemente la relevancia y precisión de las respuestas impulsadas por la IA, brindando a los usuarios interacciones valiosas y contextualmente ricas. A medida que la IA continúa avanzando, la fusión de estas tecnologías representa no solo un paso, sino un salto adelante, que anuncia un futuro en el que la IA puede admitir aplicaciones más sofisticadas, variadas y matizadas en todos los sectores. Este blog ha sentado las bases para que innovadores y profesionales comiencen a experimentar con estas herramientas, ampliando los límites de lo que es posible en el ámbito de las aplicaciones empresariales de IA.