Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 arama işlemini anlama
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 ana üründe bu durum söz konusudur. Alternatif olarak, ayrılmış, özelleştirilmiş vektör veritabanı ürünlerinin geniş bir alanı vardır; bunlar vektör araması yapmak için yüksek oranda iyileştirilmiştir ve genellikle vektör arama iş yüklerini işlemek için yalnızca 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:
- OpenAI ekleme modeli kullanarak verileriniz için eklemeler oluşturun.
- Eklemeleri bir vektör veritabanında veya arama hizmetinde depolayın ve dizinleyin.
- Uygulamanızdaki kullanıcı istemlerini eklemelere dönüştürün.
- 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.
- 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.Abstractions paketi, .NET'daki vektör depolarıyla etkileşime yönelik birleşik bir soyutlama katmanı sağlar. Bu soyutlamalar, tek bir API'ye basit, üst düzey kod yazmanızı ve temel alınan vektör deposunu uygulamanızda en az değişiklikle değiştirmenizi sağlar.
Kitaplık aşağıdaki temel özellikleri sağlar:
- Seamless .NET type mapping: .NET türünüzü nesne/ilişkisel eşleyiciye benzer şekilde doğrudan veritabanına eşleyin.
- Unified veri modeli: .NET özniteliklerini kullanarak veri modelinizi bir kez tanımlayın ve desteklenen tüm vektör depolarında kullanın.
- CRUD işlemleri: Vektör deposunda kayıt oluşturma, okuma, güncelleştirme ve silme.
- Vektör ve karma arama: Vektör aramasını kullanarak kayıtları anlamsal benzerliğe göre sorgulayın veya karma arama için vektör ve metin aramasını birleştirin.
- Ekleme oluşturma yönetimi: Ekleme oluşturucunuzu bir kez yapılandırın ve kitaplığın oluşturma işlemini saydam bir şekilde işlemesine izin verin.
- Koleksiyon yönetimi: Vektör deposunda koleksiyonlar (tablolar veya dizinler) oluşturun, listeleyin ve silin.
Microsoft. Extensions.VectorData, vektör veritabanıyla etkileşim kurması gereken ek, daha üst düzey katmanların yapı taşıdır. Örneğin, Microsoft. Extensions.DataIngestion.
Microsoft.Extensions.VectorData ve Entity Framework Core
Veritabanınıza erişmek için zaten Entity Framework Core kullanıyorsanız, veritabanı sağlayıcınız vektör aramasını zaten destekliyor olabilir ve LINQ sorguları bu tür aramaları ifade etmek için kullanılabilir; Microsoft. Extensions.VectorData bu tür uygulamalarda gerekli olmayabilir. Ancak, ayrılmış vektör veritabanlarının çoğu EF Core ve Microsoft tarafından desteklenmez. Extensions.VectorData, bunlarla çalışmak için iyi bir deneyim sağlayabilir. Buna ek olarak, aynı uygulamada hem EF'yi hem de Microsoft.Extensions.VectorData'yı kullanırken bulabilirsiniz, örneğin Microsoft.Extensions.DataIngestion gibi ek bir katman kullandığınızda.
Ö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.