Sdílet prostřednictvím


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.