Aracılığıyla paylaş


Vektör araması

Uyarı

Azure Cosmos DB vektör araması şu anda önizleme aşamasındadır. Sonuç olarak, EF'nin vektör arama API'lerini kullanmak, gizlenmiş olması gereken bir "deneysel API" uyarısı (EF9103) oluşturur. API'ler ve özellikler gelecekte hataya neden olacak şekilde değişebilir.

Azure Cosmos DB artık vektör benzerliği araması için önizleme desteği sunuyor. Vektör araması, yapay zeka, anlamsal arama ve diğerleri gibi bazı uygulama türlerinin temel bir parçasıdır. Azure Cosmos DB, vektörleri verilerinizin geri kalanıyla birlikte doğrudan belgelerinizde depolamanıza olanak tanır. Bu sayede tüm sorgularınızı tek bir veritabanında gerçekleştirebilirsiniz. Bu, mimarinizi önemli ölçüde basitleştirebilir ve yığınınızda ek, ayrılmış bir vektör veritabanı çözümü gereksinimini ortadan kaldırabilir. Azure Cosmos DB vektör araması hakkında daha fazla bilgi edinmek için belgelere bakın.

Vektör aramasını kullanmak için önce önizleme özelliğine kaydolmanız gerekir. Ardından, belgelerinizdeki hangi JSON özelliklerinin bu özellikler için vektörler ve vektörle ilgili bilgiler (boyutlar, veri türü, uzaklık işlevi) içerdiğini belirlemek için kapsayıcınızda vektör ilkeleri tanımlayın.

Kapsayıcınız düzgün bir şekilde ayarlandıktan sonra, kapsayıcı ilkesinde tanımladığınız yolda modelinize bir vektör özelliği ekleyin ve ef ile vektör olarak yapılandırın:

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

Bu noktada modeliniz yapılandırılır. Vektör verilerinin eklenmesi, EF ile aynı diğer veri türleri gibi yapılır:

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

Son olarak, vektör benzerliği araması yapmak için LINQ sorgularında işlevini kullanın EF.Functions.VectorDistance() :

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

Bu, mülklerinin Vector ve dışarıdan sağlanan anotherVector verilerin benzerliğine bağlı olarak ilk beş Blogu döndürür.