Usa MongoDB Atlas Stream Processing y búsqueda vectorial para actualizar, almacenar y buscar continuamente incrustaciones a través de una interfaz unificada.
caso de uso: Gen AI
Industrias: Finanzas, Salud, venta minorista
Productos: MongoDB Atlas, MongoDB Atlas búsqueda vectorial, MongoDB Atlas Stream Processing
Socios: Confluent, AWS
Resumen de la solución
Proporcionar a los modelos datos actualizados es esencial para que puedan utilizar contexto relevante cuando ofrezcan recomendaciones más allá de un enfoque de IA único para todos. Los sistemas de generación de recuperación aumentada (RAG) permiten que las organizaciones fundamenten los grandes modelos de lenguaje (LLMs) y otros modelos fundamentales en la veracidad de sus datos propios. Sin embargo, mantener los datos subyacentes es complejo. Para garantizar que los modelos proporcionen respuestas precisas, es esencial actualizar continuamente las incrustaciones vectoriales que forman el núcleo de los sistemas RAG para representar la información más actualizada disponible.
Además, la elección del modelo de embedding impacta la calidad de las respuestas de IA porque distintos modelos están optimizados para distintos propósitos y tipos de datos. Por ejemplo, un modelo de embedding entrenado en un lenguaje en particular creará embeddings más apropiados contextualmente para ese lenguaje que un modelo de propósito general entrenado en muchos lenguajes.
Aprovechando las capacidades nativas de Procesamiento de flujos y búsqueda vectorial de MongoDB Atlas, esta solución permite a los desarrolladores actualizar, almacenar y buscar embeddings continuamente dentro de una única interfaz.
Esta solución es relevante para muchas industrias y casos de uso, incluidos:
Servicios financieros: Los documentos financieros, las políticas legales y los contratos suelen utilizar varios idiomas y varían según la normativa de cada país. Dar a los oficiales de préstamos una interfaz impulsada por IA usando datos pertinentes y actualizados para acelerar la creación de préstamos puede optimizar los flujos de trabajo bancarios.
Salud y seguros: Los sistemas RAG que ayudan a actualizar los registros de pacientes o a suscribir pólizas de seguro necesitan acceso a información actualizada.
Venta minorista: Contar con datos contextuales actualizados es crucial para que los sistemas RAG elijan el modelo de embeddings adecuado y así se puedan brindar experiencias personalizadas a los clientes, sin importar el lenguaje que utilicen.
Arquitecturas de Referencia
Esta solución utiliza los siguientes componentes:
Clúster MongoDB Atlas: Permite el almacenamiento flexible de varios tipos de datos, incluidos texto, metadatos asociados y los correspondientes embeddings vectorial en documentos. El índice vectorial en Atlas admite directamente consultas de búsqueda semántica eficientes dentro de la base de datos, que puedes utilizar con el Marco de agregación de MongoDB.
Clúster Confluent Kafka: Recibe actualizaciones de documentos y nuevos documentos de los productores y los pone a disposición para su procesamiento posterior por Atlas Stream Processing.
Procesamiento de flujos Atlas: Se suscribe a los flujos de eventos generados por MongoDB, filtra la información relevante, transforma los eventos y los emite al tema de Kafka correspondiente. También se suscribe al clúster de Kafka para procesar actualizaciones y propagar los cambios a la base de datos.
Servicio de Metadatos:
Generador de Embedding: script de Python que se suscribe a los temas de entrada de Kafka. Para cada mensaje recibido, genera un embedding usando un modelo especializado de aprendizaje automático.
Extractor de etiquetas: Script de Python que analiza los datos entrantes para identificar los metadatos estructurados relevantes y así enriquecer el documento para su indexación, búsqueda o análisis.
Figura 1. Arquitectura de referencia para actualizaciones vectoriales escalables con MongoDB
Enfoque de modelo de datos
En la solución de demostración, el modelo de datos es una colección de documentos que encapsula toda la información relevante sobre una canción. El modelo de datos basado en documentos de MongoDB almacena tipos de datos diversos junto a sus embeddings, lo que permite una recuperación de datos fácil y rápida.
Los datos de muestra tienen dos conjuntos de datos disponibles para importar: archive_lyrics_small1 y archive_lyrics_small2. Los documentos de estos conjuntos de datos tienen la siguiente estructura:
{ "title": "Hurricane", "artist": "Bob Dylan", "year": 1976, "lyrics": "...", "language": "en", "genre": "rock", "duration": 61, "lyrics_embeddings_en": [...], "tags": ["man", "story", "night"] // only in archive_lyrics_small1 }
En esta solución, Atlas Stream Processing utiliza los siguientes campos de datos para el tema de salida:
lyrics_embeddings_en/lyrics_embeddings_es: Vector de incrustación de letras específico del lenguajetagsSolo en el conjunto de datosarchive_lyrics_small1, se enumeran las palabras que se repiten frecuentemente en las letras
Compilar la solución
El repositorio de GitHub contiene instrucciones detalladas para replicar esta solución, permitiéndote actualizar tus embeddings de forma asíncrona y a escala con MongoDB Atlas.
El README le guiará a través de los siguientes pasos:
Cargar el conjunto de datos
Importante
Si aún no tienes una cuenta de Atlas, únete ahora y crea un clúster.
Utiliza el script provisto para cargar los datos con mongoimport.
Configura un clúster de Kafka en Confluent
Siga las instrucciones de la documentación de Confluent para crear un clúster de Kafka.
Copia tu URL de inicio desde la pestaña Cluster Settings en Confluent y utiliza la REST API de Kafka para crear una clave de API para conectarte a tu clúster.
Crear los temas SpanishInputTopic, EnglishInputTopic y OutputTopic en la pestaña Topics de Confluent.
Configurar el registro de conexión de procesamiento de flujo
Utilice la URL de bootstrap de Confluent en el registro de conexiones para configurar una nueva conexión entre el Espacio de Trabajo de Procesamiento de Flujos Atlas y el clúster de Kafka.
Conectar el espacio de trabajo de Atlas Stream Processing al clúster de Atlas.
Configurar el procesamiento de flujos de Atlas
Copia tu cadena de conexión para conectarte al Espacio de trabajo de Stream Processing.
Utilice MongoDB Shell (mongosh) para configurar las canalizaciones y conexiones en el espacio de trabajo de procesamiento de secuencias.
Crea un índice de búsqueda vectorial de Atlas
Cree y configure un índice de Atlas búsqueda vectorial para lyrics_embeddings_es. Debes estructurar el índice de búsqueda de la siguiente manera:
{ "fields": [ { "type": "vector", "path": "lyrics_embeddings_es", "numDimensions": 768, "similarity": "cosine" } ] }
Cree y configure un índice de Atlas búsqueda vectorial para lyrics_embeddings_en. Debes estructurar el índice de búsqueda de la siguiente manera:
{ "fields": [ { "type": "vector", "path": "lyrics_embeddings_en", "numDimensions": 384, "similarity": "cosine" } ] }
Busque y analice documentos a gran escala mediante la búsqueda vectorial
Utiliza el script proporcionado query_client.py para ejecutar queries semánticas utilizando Atlas Vector Search en una interfaz de chat.
Lecciones clave
Mantén la relevancia de los embeddings: Actualiza regularmente los embeddings de datos para asegurar que tus búsquedas semánticas sigan siendo precisas.
Optimiza la combinación de modelos de lenguaje: Garantizar que su LLM se alinee estrechamente con el lenguaje de sus datos para mejorar la pertinencia y precisión de los resultados de su búsqueda.
Adopte incrustaciones flexibles: el modelo de datos flexible de MongoDB le permite almacenar incrustaciones directamente junto con sus datos, independientemente de su longitud o del modelo utilizado para generarlas.
Elija la función de similitud adecuada: La eficacia de sus búsquedas semánticas depende de la función de similitud elegida. Adapta tu selección a tu caso de uso específico.
Generar incrustaciones asincrónicas: Crear incrustaciones de manera asincrónica para mantener el rendimiento de tu aplicación y escalar las funciones de generación horizontalmente.
Autores
David Sanchez, MongoDB