Busca em vetores
Aviso
No momento, a busca em vetores do Azure Cosmos DB está em versão prévia. Como resultado, o uso das APIs de busca em vetores do EF gerará um aviso de "API experimental" (EF9103
) que deve ser suprimido. As APIs e os recursos podem mudar de maneiras significativas no futuro.
O Azure Cosmos DB agora oferece suporte de visualização 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.
Para usar a busca em vetores, você deve primeiro se inscrever na versão prévia do recurso. Em seguida, defina as políticas de vetor no seu contêiner para determinar quais propriedades JSON em seus documentos contêm vetores e informações relacionadas a vetores para essas propriedades (dimensões, tipo de dados, função de distância).
Depois que o contêiner estiver configurado corretamente, adicione uma propriedade de vetor ao modelo no caminho definido na política de contêiner e configure-o com o EF como um vetor:
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);
}
}
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.