Aracılığıyla paylaş


Eski Anlamsal Çekirdek Bellek Depoları

İpucu

Eski Bellek Depoları yerine Vektör Deposu soyutlamalarını kullanmanızı öneririz. Vektör Deposu soyutlamalarını kullanma hakkında daha fazla bilgi için buradan başlayın.

Semantik Çekirdek, birincil arabiriminin Microsoft.SemanticKernel.Memory.IMemoryStoreolduğu bir dizi Bellek Deposu soyutlaması sağlar.

Bellek Deposu ve Vektör Deposu soyutlamaları

Anlam Çekirdeği'nin vektör depolama ve arama özelliklerini geliştirme ve genişletme çabasının bir parçası olarak Bellek Deposu soyutlamalarının yerini alacak yeni bir soyutlama kümesi yayımladık. Yeni soyutlamalara Vektör Deposu soyutlamaları diyoruz. Her ikisinin de amacı benzerdir, ancak arabirimleri farklıdır ve Vektör Deposu soyutlamaları genişletilmiş işlevsellik sağlar.

Karakteristik Eski Bellek Depoları Vektör Depoları
Ana Arabirim IMemoryStore VectorStore
Soyutlamalar NuGet paketi Microsoft.SemanticKernel.Abstractions Microsoft.Extensions.VectorData.Abstractions
Adlandırma Kuralı {Provider}MemoryStore, örneğin RedisMemoryStore {Sağlayıcı} VektörDeposu, örnek olarak RedisVektörDeposu
Kayıt ekleme/güncelleme, alma ve silme işlemlerini destekler. Evet Evet
Koleksiyon oluşturma ve silmeyi destekler Evet Evet
Vektör arama desteği Evet Evet
Tercih ettiğiniz vektör arama dizini ve uzaklık işlevini seçmeyi destekler Hayır Evet
Kayıt başına birden çok vektör destekler Hayır Evet
Özel şemaları destekler Hayır Evet
Birden çok vektör türünü destekler Hayır Evet
Vektör araması için meta veri ön filtrelemeyi destekler Hayır Evet
Veri kümesinin tamamını istemciye indirip yerel vektör araması yaparak vektör olmayan veritabanlarında vektör aramasını destekler Evet Hayır

Kullanılabilir Bellek Deposu bağlayıcıları

Anlam Çekirdeği, bilgileri depolamak ve almak için kullanabileceğiniz vektör veritabanlarına yönelik birkaç Bellek Deposu bağlayıcısı sunar. Bu şunları içerir:

Hizmet C# (programlama dili) Piton
NoSQL için Azure Cosmos DB'de Vektör Veritabanı C# Piton
MongoDB için sanal çekirdek tabanlı Azure Cosmos DB'de Vektör Veritabanı C# Piton
Azure Yapay Zeka Arama C# Piton
Azure PostgreSQL Sunucusu C#
Azure SQL Veritabanı C#
Kroma C# Piton
DuckDB C#
Milvus C# Piton
MongoDB Atlas Vektör Arama C# Piton
Pinecone C# Piton
Postgres C# Piton
Qdrant C# Piton
Redis C# Piton
Sqlite C#
Ağırlaştır C# Piton

Bellek Depolarından Vektör Depolarına Geçiş

Bellek Deposu soyutlamalarını kullanarak Vektör Deposu soyutlamalarına geçiş yapmak istiyorsanız, bunu yapmanın çeşitli yolları vardır.

Vektör Deposu soyutlamalarıyla mevcut koleksiyonu kullanma

Çoğu durumda en basit yol Yalnızca Bellek Deposu soyutlamaları kullanılarak oluşturulan bir koleksiyona erişmek için Vektör Deposu soyutlamalarını kullanmak olabilir. Vektör Deposu soyutlaması kullanmak istediğiniz şemayı seçmenize olanak tanıdığından çoğu durumda bu mümkündür. Temel gereksinim, eski Bellek Deposu uygulamasının kullandığı şemayla eşleşen bir veri modeli oluşturmaktır.

Örneğin, Azure AI Arama Bellek Deposu tarafından oluşturulan bir koleksiyona erişmek için aşağıdaki Vektör Deposu veri modelini kullanabilirsiniz.

using Microsoft.Extensions.VectorData;

class VectorStoreRecord
{
    [VectorStoreKey]
    public string Id { get; set; }

    [VectorStoreData]
    public string Description { get; set; }

    [VectorStoreData]
    public string Text { get; set; }

    [VectorStoreData]
    public bool IsReference { get; set; }

    [VectorStoreData]
    public string ExternalSourceName { get; set; }

    [VectorStoreData]
    public string AdditionalMetadata { get; set; }

    [VectorStoreVector(VectorSize)]
    public ReadOnlyMemory<float> Embedding { get; set; }
}

İpucu

Bellek Deposu kullanılarak oluşturulan koleksiyonlara erişmek için Vektör Deposu soyutlamalarını kullanma hakkında daha ayrıntılı örnekler için buraya bakın.

Yeni bir koleksiyon oluşturun

Bazı durumlarda yeni bir koleksiyona geçiş yapmak, mevcut koleksiyonu doğrudan kullanmaktan daha iyi olabilir. Bellek Deposu tarafından seçilen şema, özellikle filtrelemeyle ilgili gereksinimlerinizle eşleşmeyebilir.

Örneğin Redis Bellek deposu üç alanı olan bir şema kullanır:

  • dize meta verileri
  • uzun zaman mühürü
  • float[] ekleme

Ekleme veya zaman damgası dışındaki tüm veriler Meta Veri alanında serileştirilmiş json dizesi olarak depolanır. Bu, tek tek değerlerin dizinini oluşturmanın ve bunları filtrelemenin mümkün olmadığı anlamına gelir. Örneğin, ExternalSourceName kullanarak filtrelemek isteyebilirsiniz, ancak bir json dizesinin içindeyken bu mümkün değildir.

Bu durumda, verileri düz bir şemayla yeni bir koleksiyona geçirmek daha iyi olabilir. Burada iki seçenek vardır. Kaynak verilerinizden yeni bir koleksiyon oluşturabilir veya eski verileri eşleyip yeniye kopyalayabilirsiniz. Kaynak verilerden eklemeleri yeniden oluşturmanız gerekeceği için ilk seçenek daha maliyetli olabilir.

İpucu

Bellek Deposu soyutlamaları kullanılarak oluşturulan bir koleksiyondaki verilerin Vektör Deposu soyutlamaları kullanılarak oluşturulan koleksiyona nasıl kopyalanmasını gösteren Redis kullanımı örneği için buraya bakın.