Compartir a través de


Vector de búsqueda

Advertencia

El vector de búsqueda de Azure Cosmos DB se encuentra actualmente en versión preliminar. Como resultado, el uso de las API del vector de búsqueda de EF generará una advertencia de "API experimental" (EF9103) que se debe suprimir. Las API y las funciones pueden cambiar de formas importantes en el futuro.

Azure Cosmos DB ofrece ahora soporte de vista previa para la búsqueda de similitud vectorial. El vector de búsqueda es una parte fundamental de algunos tipos de aplicaciones, incluye IA, la búsqueda semántica y otras. Azure Cosmos DB le permite almacenar vectores directamente en sus documentos junto con el resto de sus datos, lo que significa que puede realizar todas sus consultas en una única base de datos. Esto puede simplificar considerablemente su arquitectura y eliminar la necesidad de una solución de base de datos de vectores adicional y dedicada en su pila. Para obtener más información sobre el vector de búsqueda en Azure Cosmos DB, consulte la documentación.

Para usar el vector de búsqueda, primero debe inscribirse en la función de vista previa. A continuación, defina las políticas de vectores en su contenedor para identificar qué propiedades JSON de sus documentos contienen vectores e información relacionada con vectores, así como diversa información relacionada con los vectores para dichas propiedades (dimensiones, tipo de datos, función de distancia).

Una vez que su contenedor esté correctamente configurado, añada una propiedad vectorial a su modelo en la ruta que definió en la política del contenedor, y configúrela con EF como vector:

public class Blog
{
    ...

    public float[] Vector { get; set; }
}

public class BloggingContext
{
    ...

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Embeddings)
            .IsVector(DistanceFunction.Cosine, dimensions: 1536);
    }
}

En este punto su modelo está configurado. La inserción de datos vectoriales se realiza como cualquier otro tipo de datos con EF:

float[] vector = /* generate vector data from text, image, etc. */
context.Add(new Blog { Vector = vector });
await context.SaveChangesAsync();

Por último, use la función EF.Functions.VectorDistance() en las consultas LINQ para realizar la búsqueda de similitud vectorial:

float[] anotherVector = /* generate vector data from text, image, etc. */
var blogs = await context.Blogs
    .OrderBy(s => EF.Functions.VectorDistance(s.Vector, anotherVector))
    .Take(5)
    .ToListAsync();

Devolverá los cinco primeros Blogs, basándose en la similitud de su propiedad Vector y los datos anotherVector proporcionados externamente.