.NET yapay zeka uygulamaları için vektör veritabanları

Vektör veritabanları vektör eklemelerini depolar ve yönetir. Eklemeler, anlamsal anlamı koruyan verilerin sayısal gösterimleridir. Sözcükler, belgeler, görüntüler, ses ve diğer veri türlerinin tümü vektörleştirilebilir. Bir yapay zeka modelinin metin özetleme, bağlamsal olarak ilgili verileri bulma veya metin açıklamalarından görüntü oluşturma gibi karşılaştırmalar ve dönüştürmeler yapabilmesi için girişlerin anlamını anlamasına yardımcı olmak için eklemeleri kullanabilirsiniz.

Örneğin, vektör veritabanını kullanarak şunları yapabilirsiniz:

  • İçeriklerine, temalarına, yaklaşımlarına ve stillerine göre benzer görüntüleri, belgeleri ve şarkıları tanımlayın.
  • Benzer ürünleri özelliklerine, özelliklerine ve kullanıcı gruplarına göre tanımlayın.
  • Kullanıcı tercihlerine göre içerik, ürün veya hizmet önerin.
  • Karmaşık gereksinimleri karşılamak için büyük bir seçenek havuzundan en iyi olası seçenekleri belirleyin.
  • Baskın veya normal kalıplardan farklı olan veri anomalilerini veya dolandırıcılık faaliyetlerini tanımlayın.

Vektör veritabanları, bir özellik alanındaki tam eşleşmeler yerine veri özelliklerine göre benzer öğeleri bulmak için vektör arama özellikleri sağlar. Vektör arama, Azure OpenAI ekleme modelleri gibi bir yapay zeka ekleme modeli kullanarak oluşturduğunuz verilerinizin vektör gösterimlerini analiz ederek çalışır. Arama işlemi, veri vektörleri ile sorgu vektörünüzün arasındaki mesafeyi ölçer. Sorgu vektörünüzle en yakın veri vektörleri, anlamsal olarak en benzer olanlardır.

Çoğu modern veritabanı ürünü, geleneksel sorgulamanın yanı sıra vektör aramasını destekler; Azure SQL/SQL Server, Azure Cosmos DB, PostgreSQL ve diğer birçok önemli üründe bu durum söz konusudur. Alternatif olarak, çok çeşitli ayrılmış, özelleştirilmiş vektör veritabanı ürünleri mevcuttur. Bu ürünler vektör araması yapmak için son derece iyileştirilmiştir ve genellikle yalnızca vektör arama iş yüklerini işlemek için geleneksel bir veritabanıyla birlikte yüklenir.

.NET ve OpenAI ile vektör arama iş akışları

Vektör veritabanları ve bunların arama özellikleri, Azure OpenAI ile RAG deseni iş akışlarında özellikle yararlıdır. Bu düzen, yapay zeka modelinizi verileriniz hakkında daha fazla görsel açıdan zengin bilgiyle artırmanıza olanak tanır. Vektör veritabanlarını kullanan yaygın bir yapay zeka iş akışı şu adımları içerir:

  1. OpenAI ekleme modeli kullanarak verileriniz için eklemeler oluşturun.
  2. Eklemeleri bir vektör veritabanında veya arama hizmetinde depolayın ve dizinleyin.
  3. Uygulamanızdaki kullanıcı istemlerini eklemelere dönüştürün.
  4. Kullanıcı istemi ekleme işlemini veritabanınızdaki eklemelerle karşılaştırarak verileriniz arasında bir vektör araması çalıştırın.
  5. Vektör arama sonuçlarından kullanıcı dostu bir tamamlama derlemek için gpt-4o gibi bir dil modeli kullanın.

Bu akışın uygulamalı bir örneği için, Vektör Araması Kullanarak .NET Uygulamasında RAG ile Azure OpenAI Uygulama öğreticisine bakın.

RAG deseninin diğer avantajları şunlardır:

  • Yapay zeka modellerinden kullanıcı istemlerine bağlamsal olarak uygun ve doğru yanıtlar oluşturun.
  • LLM jeton sınırlarının üstesinden gelin; esas iş veritabanı vektör araması ile gerçekleştirilir.
  • Güncelleştirilmiş verilerde sık sık yapılan ince ayarlamalardan kaynaklanan maliyetleri azaltın.

Microsoft. Extensions.VectorData kitaplığı

.NET vektör aramasını kullanmak için, herhangi bir ek kitaplık veya API gerektirmeden normal veritabanı sürücünüzü veya SDK'nızı kullanabilirsiniz. Örneğin, SQL Server üzerinde, standart .NET sürücüsü SqlClient kullanılırken T-SQL'de vektör araması gerçekleştirilebilir. Bununla birlikte, vektör aramasına bu şekilde erişmek genellikle oldukça düşük düzeydedir, serileştirme/seri durumdan çıkarma işlemini işlemek için önemli bir tören gerektirir ve sonuçta elde edilen kod veritabanları arasında taşınabilir değildir.

Alternatif olarak Microsoft. Extensions.VectorData kitaplığı .NET vektör depolarıyla etkileşime yönelik birleşik bir soyutlama katmanı sağlar.

Önemli soyutlamalar

Aşağıda bir koleksiyon oluşturan, kayıtları ekleyen ve vektör araması yapan en düşük uçtan uca örnek aşağıda verilmiştir:

using Microsoft.Extensions.AI;
using Microsoft.Extensions.VectorData;
using Microsoft.SemanticKernel.Connectors.InMemory;

// Configure an embedding generator to transform text to embeddings
IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator = ...;

// Create a vector store and get a collection with the embedding generator
var vectorStore = new InMemoryVectorStore(new() { EmbeddingGenerator = embeddingGenerator });
var collection = vectorStore.GetCollection<int, Movie>("movies");
await collection.EnsureCollectionExistsAsync();

// Upsert some records
await collection.UpsertAsync(new Movie { Key = 1, Title = "The Lion King", Description = "An animated film about a young lion prince" });
await collection.UpsertAsync(new Movie { Key = 2, Title = "Inception", Description = "A thief who steals corporate secrets through dream-sharing technology" });
await collection.UpsertAsync(new Movie { Key = 3, Title = "Finding Nemo", Description = "A fish searches the ocean for his lost son" });

// Search for movies similar to the query text
await foreach (var result in collection.SearchAsync("animals in the wild", top: 2))
{
    Console.WriteLine($"{result.Record.Title} (score: {result.Score})");
}

// Define the data model
class Movie
{
    [VectorStoreKey]
    public int Key { get; set; }

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

    [VectorStoreVector(Dimensions: 1536)]
    public string Description { get; set; }
}

Vektör deposu sağlayıcıları

Microsoft.Extensions.VectorData.Abstractions paketi soyutlamaları tanımlar ve ayrı sağlayıcı paketler belirli vektör veritabanları için uygulamalar sağlar. Vektör veritabanınızla eşleşen sağlayıcıyı seçin, örneğin Microsoft. SemanticKernel.Connectors.AzureAISearch.

Uyarı

"SemanticKernel" öğesinin paket adlarına eklenmesine rağmen, bu sağlayıcıların Semantik Çekirdek ile hiçbir ilgisi yoktur ve Agent Framework dahil olmak üzere .NET herhangi bir yerde kullanılabilir.

Tüm sağlayıcılar aynı VectorStore ve VectorStoreCollection<TKey,TRecord> soyut sınıfları uygular, böylece uygulama mantığınızı değiştirmeden bunlar arasında geçiş yapabilirsiniz.

Tip

Bellek içi sağlayıcıyı (Microsoft.SemanticKernel.Connectors.InMemory) ilk geliştirme/prototip oluşturma sırasında kullanın - herhangi bir dış hizmet veya yapılandırma gerektirmez ve bunu daha sonra bir üretim sağlayıcısıyla değiştirebilirsiniz. Bu sağlayıcı ile üretim veritabanınız arasında önemli farklar olabileceğinden, test için InMemory sağlayıcısını kullanmaktan kaçının. Testcontainers kullanarak üretim veritabanı sisteminizde testleri çalıştırmayı göz önünde bulundurun.