You can store vector embeddings alongside your other MongoDB data. These embeddings capture meaningful relationships in your data and allow you to perform semantic search and implement RAG.
Empezar
Utiliza el siguiente tutorial para aprender a crear incrustaciones vectoriales y consultarlas mediante la búsqueda vectorial. En concreto, realizas las siguientes acciones:
Define a function that uses an embedding model to generate vector embeddings.
Seleccione si desea usar un modelo propietario o de código abierto. Para incrustaciones de última generación, utilizar Voyage IA.
Cree incrustaciones a partir de sus datos y almacénelas en MongoDB.
Seleccione si desea crear incrustaciones a partir de datos nuevos o de datos existentes que ya tiene en una colección de MongoDB.
Crea incrustaciones a partir de tus términos de búsqueda y ejecuta las query de la búsqueda vectorial.
Para aplicaciones de producción, normalmente se escribe un script para generar incrustaciones vectoriales. Se puede empezar con el código de muestra de esta página y personalizarlo según el caso de uso.
Requisitos previos
Para completar este tutorial, debes tener lo siguiente:
Utiliza un modelo de incrustación
Crea incrustaciones a partir de datos
En esta sección, se crearán incrustaciones vectoriales a partir de los datos utilizando la función que se definió, y luego se almacenarán estas incrustaciones en una colección de MongoDB.
Cree embeddings para los query
En esta sección, se debe indexar las incrustaciones vectoriales en la colección y se debe crear una incrustación que se usa para ejecutar una query de búsqueda vectorial de muestra.
La búsqueda vectorial devuelve documentos cuyas incrustaciones son las más cercanas en distancia a la incrustación de la query. Esto indica que son similares en significado.
Considerations
Considere los siguientes factores al crear embeddings vectoriales:
Elegir un método para crear embeddings
Para crear incrustaciones vectoriales, se debe utilizar un modelo de incrustación. Los modelos de incrustación son algoritmos que se utilizan para generar representaciones numéricas de los datos. Elegir una de las siguientes maneras de acceder a un modelo de incrustación:
Método | Descripción |
|---|---|
Carga un modelo de código abierto | If you don't have an API key for a proprietary embedding model, load an open-source embedding model locally from your application. |
Utilice un modelo propietario | Most AI providers offer APIs for their proprietary embedding models that you can use to create vector embeddings. For state-of-the-art embeddings, use Voyage AI. |
Aproveche una integración | Puedes integrar MongoDB Vector Search con frameworks de código abierto y servicios de IA para conectarte rápidamente a modelos de incrustación tanto de código abierto como propietarios y generar incrustaciones vectoriales para MongoDB Vector Search. Para obtener más información, consulta Integraciones de IA de MongoDB. |
Selecciona un modelo de incrustación
El modelo de incrustación que se elija afecta a los resultados de la query y determina el número de dimensiones que se especifican en el índice de MongoDB Vector Search. Cada modelo ofrece diferentes ventajas dependiendo de los datos y el caso de uso. Para incrustaciones de última generación, incluidos modelos de incrustación multimodales y específicos de dominio, se debe usar Voyage IA.
Cuando elija un modelo embebido para la búsqueda vectorial de MongoDB, considere las siguientes métricas:
Dimensiones de la incrustación: La longitud de la incrustación de vector.
Las incrustaciones más pequeñas son más eficientes en almacenamiento, mientras que las más grandes pueden capturar relaciones más matizadas en sus datos. El modelo que elijas debe lograr un equilibrio entre eficiencia y complejidad.
Max Tokens: El número de tokens que se pueden comprimir en una sola incrustación.
Tamaño del modelo: El tamaño del modelo en gigabytes.
Aunque los modelos más grandes rinden mejor, requieren más recursos informáticos a medida que escalas MongoDB Vector Search a producción.
Promedio de recuperación: una puntuación que mide el rendimiento de los sistemas de recuperación.
Una puntuación más alta indica que el modelo es mejor para clasificar los documentos relevantes en posiciones más altas en la lista de resultados recuperados. Esta puntuación es importante al elegir un modelo para aplicaciones de RAG.
Compresión de vectores
If you have a large number of float vectors and want to reduce the storage and WiredTiger footprint (such as disk and memory usage) in mongod, compress your embeddings by converting them to binData vectors.
BinData es un tipo de datos BSON que almacena datos binarios. El tipo por defecto para las representaciones vectoriales es un arreglo de números flotantes de 32bits (float32). Los datos binarios son más eficientes en almacenamiento que el formato de arreglo predeterminado y, por lo tanto, requieren tres veces menos espacio en disco.
Almacenar vectores binData mejora el rendimiento de las query, ya que se necesitan menos recursos para cargar un documento en el conjunto de trabajo. Esto puede mejorar significativamente la velocidad de las query para realizar query vectoriales en las que se devuelven más de 20 documentos. Si comprimes tus incrustaciones float32, puedes crear las query con vectores float32 o binData.
El tutorial en esta página incluye una función de ejemplo que puedes utilizar para convertir tus vectores float32 a vectores binData.
Controladores compatibles
BSON Los vectores BinData son compatibles con los siguientes controladores:
Driver C++ v4.1.0 o posterior
Controlador C#/.NET v3.2.0 o posterior
Go Driver v2.1.0 o posterior
PyMongo Driver v4.10 o posterior
Node.js Driver v6.11 o posterior
Java Driver v5.3.1 o posterior
Segundo plano
Los vectores de punto flotante suelen ser difíciles de comprimir porque cada elemento del arreglo tiene su propio tipo (a pesar de que la mayoría de los vectores son de tipo uniforme). Por esta razón, convertir la salida del vector de punto flotante de un modelo de incrustación en un vector binData con subtipo float32 es un esquema de serialización más eficiente. Los vectores binData almacenan un único descriptor de tipo para todo el vector, lo que reduce la sobrecarga de almacenamiento.
Valida tus incrustaciones
Considera las siguientes estrategias para asegurarte de que tus incrustaciones sean correctas y óptimas:
Considera las siguientes mejores prácticas al crear incrustaciones y realizar los query:
Prueba tus funciones y scripts.
La generación de incrustaciones requiere tiempo y recursos computacionales. Antes de crear incrustaciones a partir de grandes conjuntos de datos o colecciones, prueba que tus funciones o scripts de incrustación funcionen como se espera en un pequeño subconjunto de tus datos.
Crea incrustaciones agrupados.
Si deseas generar incrustaciones a partir de un conjunto de datos grande o una colección con muchos documentos, créelas en agrupaciones para evitar problemas de memoria y optimizar el rendimiento.
Evalúa el rendimiento.
Ejecuta los query de prueba para comprobar si tus resultados de búsqueda son relevantes y están correctamente clasificados.
Para obtener más información sobre cómo evaluar los resultados y optimizar el rendimiento de los índices y las query, se debe consultar Cómo medir la precisión de los resultados de la query y Benchmark para MongoDB Vector Search.
Se deben considerar las siguientes estrategias si se encuentran problemas con las incrustaciones:
Verificar el entorno.
Comprueba que las dependencias necesarias estén instaladas y actualizadas. Las versiones conflictivas de bibliotecas pueden causar un comportamiento inesperado. Asegúrate de que no haya conflictos creando un nuevo entorno e instalando solo los paquetes necesarios.
Nota
Si utilizas Colab, asegúrate de que la dirección IP de la sesión de notebook esté incluida en la lista de acceso de tu proyecto Atlas.
Supervisa el uso de la memoria.
Si se experimenta problemas de rendimiento, se debe comprobar el uso de la RAM, la CPU y el disco para identificar un posible cuello de botella. En entornos en host como Colab o Jupyter Notebooks, se debe garantizar que la instancia esté provista con suficientes recursos y actualízala, si es necesario.
Asegura dimensiones coherentes.
Verifica que la definición del índice de MongoDB Vector Search coincida con las dimensiones de las incrustaciones almacenadas en MongoDB y que las incrustaciones de las query coincidan con las dimensiones de las incrustaciones indexadas. De lo contrario, podrías encontrar errores al ejecutar las query de búsquedas vectoriales.
Para solucionar problemas específicos, consulta Resolución de problemas.
Próximos pasos
Una vez que hayas aprendido a crear incrustaciones y a realizar las query en las incrustaciones con MongoDB Vector Search, comienza a desarrollar aplicaciones de IA generativa implementando la generación de recuperación aumentada (RAG):
También puedes cuantificar tus incrustaciones vectoriales de 32 bits en menos bits para reducir aún más el consumo de recursos y mejorar la velocidad de las query. Para obtener más información, consulta Cuantificación de vectores.