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.
Uyarı
Semantik Çekirdek Vektör Deposu işlevselliği önizleme aşamasındadır ve uygulama açısından kırıcı değişiklikler gerektiren iyileştirmeler, nihai sürümden önce sınırlı koşullarda yine de ortaya çıkabilir.
Uyarı
Semantik Çekirdek Vektör Deposu işlevselliği önizleme aşamasındadır ve uygulama açısından kırıcı değişiklikler gerektiren iyileştirmeler, nihai sürümden önce sınırlı koşullarda yine de ortaya çıkabilir.
Semantik Çekirdek Vektör Deposu bağlayıcıları, ekleme oluşturmanın birden çok yolunu destekler.
Yerleştirmeler geliştirici tarafından oluşturulabilir ve VectorStoreCollection kullanılırken bir kaydın parçası olarak geçirilebilir veya dahili olarak VectorStoreCollection içinde oluşturulabilir.
Vektör Deposu'nun gömülü temsil oluşturmasına izin verme
Vektör deponuzda bir ekleme oluşturucu yapılandırarak hem yükseltme hem de arama işlemleri sırasında eklemelerin otomatik olarak oluşturulmasına olanak tanıyarak el ile ön işleme gereksinimini ortadan kaldırabilirsiniz.
Upsert üzerinde vektörlerin otomatik olarak oluşturulmasını etkinleştirmek için, veri modelinizdeki vector özelliği kaynak türü olarak tanımlanır, örneğin, dize ancak yine de VectorStoreVectorPropertyAttribute ile dekore edilmiştir.
[VectorStoreVector(1536)]
public string Embedding { get; set; }
Upsert öncesinde Embedding özelliği, bir vektör oluşturulacak olan dizeyi içermelidir. Veritabanında depolanan vektör türü (örn. float32, float16 vb.) yapılandırılmış ekleme oluşturucudan türetilir.
Önemli
Bu vektör özellikleri, oluşturulan vektörün veya vektörün oluşturulduğu özgün metnin alınmasını desteklemez. Ayrıca özgün metni depolamaz. Özgün metnin depolanması gerekiyorsa, depolamak için ayrı bir Data özelliği eklenmelidir.
Soyutlamaları uygulayan Microsoft.Extensions.AI ekleme oluşturucuları desteklenir ve çeşitli düzeylerde yapılandırılabilir:
Vektör Deposu'nda: Vektör deposunun tamamı için varsayılan bir ekleme oluşturucu ayarlayabilirsiniz. Oluşturucu, aksi belirtilmedikçe tüm koleksiyonlar ve özellikler için kullanılacaktır.
using Microsoft.Extensions.AI; using CommunityToolkit.VectorData.Qdrant; using OpenAI; using Qdrant.Client; var embeddingGenerator = new OpenAIClient("your key") .GetEmbeddingClient("your chosen model") .AsIEmbeddingGenerator(); var vectorStore = new QdrantVectorStore( new QdrantClient("localhost"), ownsClient: true, new QdrantVectorStoreOptions { EmbeddingGenerator = embeddingGenerator });Bir Koleksiyonda: Belirli bir koleksiyon için bir gömme oluşturucu yapılandırabilir ve mağaza seviyesindeki oluşturucuyu geçersiz kılabilirsiniz.
using Microsoft.Extensions.AI; using CommunityToolkit.VectorData.Qdrant; using OpenAI; using Qdrant.Client; var embeddingGenerator = new OpenAIClient("your key") .GetEmbeddingClient("your chosen model") .AsIEmbeddingGenerator(); var collectionOptions = new QdrantCollectionOptions { EmbeddingGenerator = embeddingGenerator }; var collection = new QdrantCollection<ulong, MyRecord>( new QdrantClient("localhost"), "myCollection", ownsClient: true, collectionOptions);Kayıt Tanımı Üzerine:
VectorStoreCollectionDefinitionprogramını kullanarak özellikleri program aracılığıyla tanımlarken, tüm özellikler için bir gömme oluşturucu belirleyebilirsiniz.using Microsoft.Extensions.AI; using Microsoft.Extensions.VectorData; using CommunityToolkit.VectorData.Qdrant; using OpenAI; using Qdrant.Client; var embeddingGenerator = new OpenAIClient("your key") .GetEmbeddingClient("your chosen model") .AsIEmbeddingGenerator(); var definition = new VectorStoreCollectionDefinition { EmbeddingGenerator = embeddingGenerator, Properties = new List<VectorStoreProperty> { new VectorStoreKeyProperty("Key", typeof(ulong)), new VectorStoreVectorProperty("DescriptionEmbedding", typeof(string), dimensions: 1536) } }; var collectionOptions = new QdrantCollectionOptions { Definition = definition }; var collection = new QdrantCollection<ulong, MyRecord>( new QdrantClient("localhost"), "myCollection", ownsClient: true, collectionOptions);Vektör Özellik Tanımında: Özellikleri program aracılığıyla tanımlarken, doğrudan özelliğinde bir ekleme oluşturucu ayarlayabilirsiniz.
using Microsoft.Extensions.AI; using Microsoft.Extensions.VectorData; using OpenAI; var embeddingGenerator = new OpenAIClient("your key") .GetEmbeddingClient("your chosen model") .AsIEmbeddingGenerator(); var vectorProperty = new VectorStoreVectorProperty("DescriptionEmbedding", typeof(string), dimensions: 1536) { EmbeddingGenerator = embeddingGenerator };
Örnek Kullanım
Aşağıdaki örnekte, hem upsert hem de arama işlemleri sırasında vektörleri otomatik olarak oluşturmak için ekleme oluşturucunun nasıl kullanılacağı gösterilmektedir. Bu yaklaşım, eklemeleri el ile önceden derleme gereksinimini ortadan kaldırarak iş akışlarını basitleştirir.
// The data model
internal class FinanceInfo
{
[VectorStoreKey]
public string Key { get; set; } = string.Empty;
[VectorStoreData]
public string Text { get; set; } = string.Empty;
// Note that the vector property is typed as a string, and
// its value is derived from the Text property. The string
// value will however be converted to a vector on upsert and
// stored in the database as a vector.
[VectorStoreVector(1536)]
public string Embedding => this.Text;
}
// Create an OpenAI embedding generator.
var embeddingGenerator = new OpenAIClient("your key")
.GetEmbeddingClient("your chosen model")
.AsIEmbeddingGenerator();
// Use the embedding generator with the vector store.
var vectorStore = new InMemoryVectorStore(new() { EmbeddingGenerator = embeddingGenerator });
var collection = vectorStore.GetCollection<string, FinanceInfo>("finances");
await collection.EnsureCollectionExistsAsync();
// Create some test data.
string[] budgetInfo =
{
"The budget for 2020 is EUR 100 000",
"The budget for 2021 is EUR 120 000",
"The budget for 2022 is EUR 150 000",
"The budget for 2023 is EUR 200 000",
"The budget for 2024 is EUR 364 000"
};
// Embeddings are generated automatically on upsert.
var records = budgetInfo.Select((input, index) => new FinanceInfo { Key = index.ToString(), Text = input });
await collection.UpsertAsync(records);
// Embeddings for the search is automatically generated on search.
var searchResult = collection.SearchAsync(
"What is my budget for 2024?",
top: 1);
// Output the matching result.
await foreach (var result in searchResult)
{
Console.WriteLine($"Key: {result.Record.Key}, Text: {result.Record.Text}");
}
Eklemeleri kendiniz oluşturma
Gömme üreteci oluşturma
Anlam Çekirdeği örnekleri oluşturma örnekleri için bkz. ITextEmbeddingGenerationService.
Yerleştirme oluşturma hizmetlerini nasıl oluşturacağınız hakkında bilgi için Microsoft.Extensions.AI.Abstractions kısmına bakın.
Anlam Çekirdeği ile upsert üzerinde eklemeler oluşturma ITextEmbeddingGenerationService
public async Task GenerateEmbeddingsAndUpsertAsync(
ITextEmbeddingGenerationService textEmbeddingGenerationService,
VectorStoreCollection<ulong, Hotel> collection)
{
// Upsert a record.
string descriptionText = "A place where everyone can be happy.";
ulong hotelId = 1;
// Generate the embedding.
ReadOnlyMemory<float> embedding =
await textEmbeddingGenerationService.GenerateEmbeddingAsync(descriptionText);
// Create a record and upsert with the already generated embedding.
await collection.UpsertAsync(new Hotel
{
HotelId = hotelId,
HotelName = "Hotel Happy",
Description = descriptionText,
DescriptionEmbedding = embedding,
Tags = new[] { "luxury", "pool" }
});
}
Anlam Çekirdeği ile aramada ekleme oluşturma ITextEmbeddingGenerationService
public async Task GenerateEmbeddingsAndSearchAsync(
ITextEmbeddingGenerationService textEmbeddingGenerationService,
VectorStoreCollection<ulong, Hotel> collection)
{
// Upsert a record.
string descriptionText = "Find me a hotel with happiness in mind.";
// Generate the embedding.
ReadOnlyMemory<float> searchEmbedding =
await textEmbeddingGenerationService.GenerateEmbeddingAsync(descriptionText);
// Search using the already generated embedding.
IAsyncEnumerable<VectorSearchResult<Hotel>> searchResult = collection.SearchAsync(searchEmbedding, top: 1);
List<VectorSearchResult<Hotel>> resultItems = await searchResult.ToListAsync();
// Print the first search result.
Console.WriteLine("Score for first result: " + resultItems.FirstOrDefault()?.Score);
Console.WriteLine("Hotel description for first result: " + resultItems.FirstOrDefault()?.Record.Description);
}
İpucu
Ekleme oluşturma hakkında daha fazla bilgi için anlam çekirdeği Ekleme oluşturma bölümüne bakın.
Boyutları ekleme
Vektör veritabanları genellikle koleksiyonu oluştururken her vektörde bulunan boyut sayısını belirtmenizi gerektirir.
Farklı ekleme modelleri genellikle çeşitli boyut boyutlarına sahip vektörlerin oluşturulmasını destekler. Örneğin, OpenAI text-embedding-ada-002 1536 boyutlu vektörler oluşturur. Bazı modeller, bir geliştiricinin çıkış vektörinde istediği boyut sayısını seçmesine de olanak tanır. Örneğin, Google text-embedding-004 varsayılan olarak 768 boyutlu vektörler üretir, ancak bir geliştiricinin 1 ile 768 arasında herhangi bir sayıda boyut seçmesine izin verir.
Ekleme modeli tarafından oluşturulan vektörlerin veritabanındaki eşleşen vektörle aynı sayıda boyuta sahip olduğundan emin olmak önemlidir.
Anlam Çekirdeği Vektör Deposu soyutlamalarını kullanarak bir koleksiyon oluşturuyorsanız, ek açıklamalar veya kayıt tanımı aracılığıyla her vektör özelliği için gereken boyut sayısını belirtmeniz gerekir. Burada, boyut sayısını 1536 olarak ayarlama örnekleri verilmiştir.
[VectorStoreVector(Dimensions: 1536)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
new VectorStoreVectorProperty("DescriptionEmbedding", typeof(float), dimensions: 1536);
İpucu
Veri modelinize açıklama ekleme hakkında daha fazla bilgi için veri modelinizi tanımlama bölümüne bakın.
İpucu
Kayıt tanımı oluşturma hakkında daha fazla bilgi için şemanızı bir kayıt tanımıyla tanımlamaya bakın.
Yakında
Daha fazla bilgi yakında sunulacaktır.
Yakında
Daha fazla bilgi yakında sunulacaktır.