Generování vložených konektorů pro sémantické úložiště vektorů jádra
Upozorňující
Funkce sémantického úložiště vektorů jádra je ve verzi Preview a vylepšení, která vyžadují zásadní změny, se můžou vyskytovat za omezených okolností před vydáním.
Sémantické jádro podporuje generování vkládání pomocí mnoha oblíbených služeb umělé inteligence.
Tyto služby je možné vytvořit přímo nebo přidat do kontejneru injektáže závislostí a vyřešit je odtud.
Vytvoření generátoru vkládání
Instance služeb pro vkládání textu, které poskytuje sémantické jádro, můžete sestavit přímo.
Všechny implementují ITextEmbeddingGenerationService
rozhraní.
// Constructing an Azure Open AI embedding generation service directly.
ITextEmbeddingGenerationService azureOpenAITES = new AzureOpenAITextEmbeddingGenerationService(
"text-embedding-ada-002",
"https://{myservice}.openai.azure.com/",
"apikey");
// Constructing an Olama embedding generation service directly.
ITextEmbeddingGenerationService olamaTES = new OllamaTextEmbeddingGenerationService(
"mxbai-embed-large",
new Uri("http://localhost:11434"));
Pomocí pomocných rutin je můžete také zaregistrovat do kontejneru injektáže závislostí.
// Registering Google AI embedding generation service with a service collection.
var services = new ServiceCollection();
services.AddGoogleAIEmbeddingGeneration("text-embedding-004", "apiKey");
// Registering Mistral AI embedding generation service with the dependency injection container on
// the kernel builder.
var kernelBuilder = Kernel
.CreateBuilder()
.AddMistralTextEmbeddingGeneration("mistral-embed", "apiKey");
Generování vložených objektů
Pokud chcete použít vytvořenou ITextEmbeddingGenerationService
metodu, stačí ji GenerateEmbeddingAsync
zavolat.
Tady je příklad generování vkládání při nahrávání záznamů.
public async Task GenerateEmbeddingsAndUpsertAsync(
ITextEmbeddingGenerationService textEmbeddingGenerationService,
IVectorStoreRecordCollection<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" }
});
}
Tady je příklad generování vkládání při vyhledávání.
public async Task GenerateEmbeddingsAndSearchAsync(
ITextEmbeddingGenerationService textEmbeddingGenerationService,
IVectorStoreRecordCollection<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.
List<VectorSearchResult<Hotel>> searchResult = await collection.VectorizedSearchAsync(searchEmbedding).ToListAsync();
// Print the first search result.
Console.WriteLine("Score for first result: " + searchResult.FirstOrDefault()?.Score);
Console.WriteLine("Hotel description for first result: " + searchResult.FirstOrDefault()?.Record.Description);
}
Vložené dimenze
Vektorové databáze obvykle vyžadují, abyste při vytváření kolekce určili počet dimenzí, které má každý vektor.
Různé modely vkládání obvykle podporují generování vektorů s různými velikostmi dimenzí. Například Open AI text-embedding-ada-002
generuje vektory s rozměry 1536. Některé modely také umožňují vývojáři zvolit požadovaný počet dimenzí ve výstupním vektoru, například Google text-embedding-004
ve výchozím nastavení vytváří vektory s rozměry 768, ale umožňuje vývojáři zvolit libovolný počet dimenzí mezi 1 a 768.
Je důležité zajistit, aby vektory generované modelem vkládání měly stejný počet dimenzí jako odpovídající vektor v databázi.
Pokud vytváříte kolekci pomocí abstrakcí sémantického úložiště vektorů jádra, musíte určit počet dimenzí požadovaných pro každou vektorovou vlastnost prostřednictvím poznámek nebo prostřednictvím definice záznamu. Tady jsou příklady nastavení počtu dimenzí na 1536.
[VectorStoreRecordVector(Dimensions: 1536)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
new VectorStoreRecordVectorProperty("DescriptionEmbedding", typeof(float)) { Dimensions = 1536 }
Tip
Další informace o tom, jak anotovat datový model, najdete v tématu definování datového modelu.
Tip
Další informace o vytvoření definice záznamu najdete v tématu definování schématu pomocí definice záznamu.
Již brzy
Další informace budou brzy k dispozici.
Již brzy
Další informace budou brzy k dispozici.