Dela via


Generera inbäddningar för Semantic Kernel Vector Store-anslutningsappar

Varning

Funktionen Semantic Kernel Vector Store är i förhandsversion, och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.

Semantisk kernel stöder generering av inbäddningar med hjälp av många populära AI-tjänster direkt.

Dessa tjänster kan konstrueras direkt eller läggas till i en beroendeinmatningscontainer och matchas därifrån.

Skapa en inbäddningsgenerator

Du kan skapa instanser av textinbäddningstjänster som tillhandahålls av Semantic Kernel direkt. De implementerar ITextEmbeddingGenerationService alla gränssnittet.

// 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"));

Du kan också använda hjälp för att registrera dem med en container för beroendeinmatning.

// 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");

Generera inbäddningar

Om du vill använda den ITextEmbeddingGenerationService du skapade anropar du bara metoden på den GenerateEmbeddingAsync .

Här är ett exempel på hur du genererar inbäddningar när du laddar upp poster.

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" }
    });
}

Här är ett exempel på hur du genererar inbäddningar vid sökning.

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);
}

Inbäddningsdimensioner

Vektordatabaser kräver vanligtvis att du anger antalet dimensioner som varje vektor har när du skapar samlingen. Olika inbäddningsmodeller stöder vanligtvis generering av vektorer med olika dimensionsstorlekar. Till exempel genererar Open AI text-embedding-ada-002 vektorer med 1 536 dimensioner. Vissa modeller gör det också möjligt för en utvecklare att välja hur många dimensioner de vill ha i utdatavektorn, t.ex. Google text-embedding-004 producerar vektorer med 768 dimensioner som standard, men gör det möjligt för en utvecklare att välja valfritt antal dimensioner mellan 1 och 768.

Det är viktigt att se till att de vektorer som genereras av inbäddningsmodellen har samma antal dimensioner som matchande vektor i databasen.

Om du skapar en samling med hjälp av semantiska kernelvektorlagringsabstraktioner måste du ange antalet dimensioner som krävs för varje vektoregenskap antingen via anteckningar eller via postdefinitionen. Här är exempel på att båda anger antalet dimensioner till 1536.

[VectorStoreRecordVector(Dimensions: 1536)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
new VectorStoreRecordVectorProperty("DescriptionEmbedding", typeof(float)) { Dimensions = 1536 }

Dricks

Mer information om hur du kommenterar din datamodell finns i definiera datamodellen.

Dricks

Mer information om hur du skapar en postdefinition finns i definiera schemat med en postdefinition.

Kommer snart

Mer information kommer snart.

Kommer snart

Mer information kommer snart.