Partilhar via


Pesquisa vetorial

Observação

O abaixo descreve o suporte de pesquisa vetorial 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 semelhança vetorial. A pesquisa vetorial é uma parte fundamental de alguns tipos de aplicação, incluindo IA, pesquisa semântica e outros. O Azure Cosmos DB permite que você armazene vetores diretamente em seus documentos junto com o restante de seus dados, o que significa que você pode executar todas as suas consultas em um único banco de dados. Isso pode simplificar consideravelmente a sua arquitetura e remover a necessidade de uma solução de base de dados vetorial adicional e dedicada na sua stack. Para saber mais sobre a pesquisa vetorial do Azure Cosmos DB, consulte a documentação.

A propriedade do vetor 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 o EF:

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

Finalmente, use a função EF.Functions.VectorDistance() em consultas LINQ para executar a pesquisa de semelhança 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 da sua propriedade Vector e nos dados anotherVector fornecidos externamente.

A pesquisa de semelhança vetorial pode ser usada com a pesquisa de texto completo na mesma consulta (ou seja, pesquisa híbrida), combinando resultados das funções VectorDistance e FullTextScore usando a função RRF (Reciprocal Rank Fusion).

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.