Generieren von Einbettungen für Connectors für den semantischen Kernelvektorspeicher
Warnung
Die Funktionalität des semantischen Kernelvektorspeichers befindet sich in der Vorschau, und Verbesserungen, die fehlerhafte Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.
Der semantische Kernel unterstützt das Generieren von Einbettungen mithilfe vieler beliebter KI-Dienste sofort.
Diese Dienste können direkt erstellt oder einem Abhängigkeitseinfügungscontainer hinzugefügt und von dort aufgelöst werden.
Erstellen eines Einbettungsgenerators
Sie können Instanzen der Von Semantic Kernel bereitgestellten Texteinbettungsdienste direkt erstellen.
Sie alle implementieren die ITextEmbeddingGenerationService
Schnittstelle.
// 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"));
Sie können auch Hilfsprogramme verwenden, um sie mit einem Abhängigkeitseinfügungscontainer zu registrieren.
// 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");
Generieren von Einbettungen
Um die ITextEmbeddingGenerationService
erstellte Methode zu verwenden, rufen Sie einfach die GenerateEmbeddingAsync
Methode darauf auf.
Hier ist ein Beispiel für das Generieren von Einbettungen beim Hochladen von Datensätzen.
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" }
});
}
Hier ist ein Beispiel für das Generieren von Einbettungen bei der Suche.
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);
}
Einbettungsdimensionen
Vektordatenbanken erfordern in der Regel, dass Sie die Anzahl der Dimensionen angeben, die jeder Vektor beim Erstellen der Auflistung hat.
Unterschiedliche Einbettungsmodelle unterstützen in der Regel das Generieren von Vektoren mit unterschiedlichen Dimensionen. Z.B. Open AI text-embedding-ada-002
generiert Vektoren mit 1536 Dimensionen. Einige Modelle ermöglichen es einem Entwickler auch, die gewünschte Anzahl von Dimensionen im Ausgabevektor auszuwählen, z. B. Google text-embedding-004
erzeugt Vektoren mit 768 Dimensionen standardmäßig, ermöglicht es einem Entwickler jedoch, eine beliebige Anzahl von Dimensionen zwischen 1 und 768 auszuwählen.
Es ist wichtig sicherzustellen, dass die vom Einbettungsmodell generierten Vektoren dieselbe Anzahl von Dimensionen aufweisen wie der übereinstimmende Vektor in der Datenbank.
Wenn Sie eine Auflistung mit den Abstraktionen des semantischen Kernelvektorspeichers erstellen, müssen Sie die Anzahl der Dimensionen angeben, die für jede Vektoreigenschaft entweder über Anmerkungen oder über die Datensatzdefinition erforderlich sind. Hier sind Beispiele für die Festlegung der Anzahl der Dimensionen auf 1536.
[VectorStoreRecordVector(Dimensions: 1536)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
new VectorStoreRecordVectorProperty("DescriptionEmbedding", typeof(float)) { Dimensions = 1536 }
Tipp
Weitere Informationen zum Kommentieren des Datenmodells finden Sie unter Definieren des Datenmodells.
Tipp
Weitere Informationen zum Erstellen einer Datensatzdefinition finden Sie unter Definieren des Schemas mit einer Datensatzdefinition.
In Kürze verfügbar
Weitere Informationen werden in Kürze verfügbar sein.
In Kürze verfügbar
Weitere Informationen werden in Kürze verfügbar sein.