Generera embeddingar för anslutningar till Semantic Kernel Vector Store
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 dependency injection-behållare och lösas upp därifrån.
Skapa en inbäddningsgenerator
Du kan skapa instanser av textinbäddningstjänster som tillhandahålls av Semantic Kernel direkt.
De implementerar alla ITextEmbeddingGenerationService
-gränssnittet.
// Constructing an Azure OpenAI 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älpverktyg för att registrera dem med en beroendeinjiceringscontainer.
// 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
För att använda den ITextEmbeddingGenerationService
du skapade, anropar du bara GenerateEmbeddingAsync
-metoden på den.
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.
VectorSearchResults<Hotel> searchResult = await collection.VectorizedSearchAsync(searchEmbedding);
List<VectorSearchResult<Hotel>> resultItems = await searchResult.Results.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);
}
Tips
Mer information om hur du genererar inbäddningar finns i inbäddningsgenerering i Semantisk Kernel.
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 OpenAI-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 }
Tips
Mer information om hur du kommenterar din datamodell finns i definiera datamodellen.
Tips
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.