Compartilhar via


Busca em vetores

Observação

A seguir, descreve o suporte à pesquisa de vetor no EF 10. O EF 9 inclui suporte experimental semelhante com nomenclatura de método ligeiramente diferente.

O Azure Cosmos DB agora oferece suporte para pesquisa de similaridade de vetor. A busca em vetores é uma parte fundamental de alguns tipos de aplicativos, incluindo IA, pesquisa semântica e outros. O Azure Cosmos DB permite que você armazene vetores diretamente em seus documentos junto com o restante dos dados, ou seja, é possível executar todas as suas consultas em um único banco de dados. Isso pode simplificar consideravelmente sua arquitetura e eliminar a necessidade de uma solução adicional de banco de dados vetorial dedicada em sua pilha. Para saber mais sobre a busca em vetores do Azure Cosmos DB, consulte a documentação.

A propriedade Vector pode ser configurada dentro de OnModelCreating.

public class Blog
{
    ...

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

public class BloggingContext
{
    ...

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>(b =>
        {
            b.Property(b => b.Vector).IsVectorProperty(DistanceFunction.Cosine, dimensions: 1536);
            b.HasIndex(x => x.Vector).IsVectorIndex(VectorIndexType.Flat);
        });
    }
}

Neste ponto, seu modelo está configurado. A inserção de dados vetoriais é feita como qualquer outro tipo de dados com EF:

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

Por fim, use a função EF.Functions.VectorDistance() em consultas LINQ para executar a pesquisa de similaridade vetorial:

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();

Isso retornará os cinco principais Blogs, com base na semelhança de sua propriedade Vector e nos dados anotherVector fornecidos externamente.

A pesquisa de similaridade de vetor pode ser usada com a pesquisa de texto completo na mesma consulta (ou seja, pesquisa híbrida), combinando os resultados das funções VectorDistance e FullTextScore usando a função RRF (Fusão de Classificação Recíproca).

Consulte a documentação para saber como habilitar o suporte à pesquisa de texto completo no modelo EF e como usar a pesquisa híbrida em consultas.