Freigeben über


Generierung von Texteinbettungen im semantischen Kernel

Mit der Generierung von Texteinbettungen können Sie ein KI-Modell verwenden, um Vektoren zu generieren (auch bekannt als Einbettungen). Diese Vektoren codieren die semantische Bedeutung des Texts so, dass mathematische Formeln auf zwei Vektoren verwendet werden können, um die Ähnlichkeit des ursprünglichen Texts zu vergleichen. Dies ist nützlich für Szenarien wie die Abruf-Augmentierte Generierung (Retrieval Augmented Generation, RAG), in denen wir eine Datenbank mit Informationen durchsuchen möchten, um nach einem Text zu suchen, der sich auf eine Benutzeranfrage bezieht. Alle übereinstimmenden Informationen können dann als Eingabe für den Chatabschluss bereitgestellt werden, sodass das KI-Modell bei der Beantwortung der Benutzerabfrage mehr Kontext hat.

Beim Auswählen eines Einbettungsmodells müssen Sie Folgendes berücksichtigen:

  • Was ist die Größe der vom Modell generierten Vektoren und ist konfigurierbar, da sich dies auf Ihre Vektorspeicherkosten auswirkt.
  • Welche Art von Elementen die generierten Vektoren enthalten, z. B. float32, float16 usw., da sich dies auf Ihre Vektorspeicherkosten auswirkt.
  • Wie schnell generiert es Vektoren?
  • Wie viel kostet die Erzeugung?

Trinkgeld

Weitere Informationen zum Speichern und Durchsuchen von Vektoren finden Sie unter Was sind Semantic Kernel Vector Store Connectors?

Trinkgeld

Weitere Informationen zur Verwendung von RAG mit Vektorspeichern im Semantischen Kernel finden Sie unter Wie Vektorspeicher mit der Textsuche des Semantischen Kernels verwenden und Was sind Plugins für die Kernel-Textsuche des Semantischen Kernels?

Einrichten Ihrer lokalen Umgebung

Einige der KI-Dienste können lokal gehostet werden und erfordern möglicherweise ein Setup. Nachfolgend finden Sie Anweisungen für diejenigen, die dies unterstützen.

Keine lokale Einrichtung.

Installieren der erforderlichen Pakete

Vor dem Hinzufügen der Einbettungsgenerierung zum Kernel müssen Sie die erforderlichen Pakete installieren. Nachfolgend finden Sie die Pakete, die Sie für jeden KI-Dienstanbieter installieren müssen.

dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI

Erstellen von Diensten für die Generierung von Texteinbettungen

Nachdem Sie nun die erforderlichen Pakete installiert haben, können Sie einen Texteinbettungsdienst erstellen. Nachfolgend finden Sie die verschiedenen Möglichkeiten zum Erstellen von Einbettungsgenerierungsdiensten mithilfe des semantischen Kernels.

Direktes Hinzufügen zum Kernel

Wenn Sie einen Dienst für die Texteinbettung hinzufügen möchten, können Sie ihn mit dem folgenden Code dem internen Dienstanbieter des Kernels hinzufügen.

Wichtig

Der Azure OpenAI Embedding Generation Connector ist derzeit experimentell. Um es zu verwenden, müssen Sie #pragma warning disable SKEXP0010hinzufügen.

using Microsoft.SemanticKernel;

#pragma warning disable SKEXP0010
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddAzureOpenAITextEmbeddingGeneration(
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT", // Name of deployment, e.g. "text-embedding-ada-002".
    endpoint: "YOUR_AZURE_ENDPOINT",           // Name of Azure OpenAI service endpoint, e.g. https://myaiservice.openai.azure.com.
    apiKey: "YOUR_API_KEY",
    modelId: "MODEL_ID",          // Optional name of the underlying model if the deployment name doesn't match the model name, e.g. text-embedding-ada-002.
    serviceId: "YOUR_SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel.
    httpClient: new HttpClient(), // Optional; if not provided, the HttpClient from the kernel will be used.
    dimensions: 1536              // Optional number of dimensions to generate embeddings with.
);
Kernel kernel = kernelBuilder.Build();

Verwendung der Abhängigkeitsinjektion

Wenn Sie Dependency Injection verwenden, sollten Sie wahrscheinlich Ihre Text-Einbettungsdienste direkt zum Dienstanbieter hinzufügen. Dies ist hilfreich, wenn Sie Singletons Ihrer Einbettungsgenerierungsdienste erstellen und sie in vorübergehenden Kerneln wiederverwenden möchten.

Wichtig

Der Azure OpenAI Embedding Generation Connector ist derzeit experimentell. Um es zu verwenden, müssen Sie #pragma warning disable SKEXP0010hinzufügen.

using Microsoft.SemanticKernel;

var builder = Host.CreateApplicationBuilder(args);

#pragma warning disable SKEXP0010
builder.Services.AddAzureOpenAITextEmbeddingGeneration(
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT", // Name of deployment, e.g. "text-embedding-ada-002".
    endpoint: "YOUR_AZURE_ENDPOINT",           // Name of Azure OpenAI service endpoint, e.g. https://myaiservice.openai.azure.com.
    apiKey: "YOUR_API_KEY",
    modelId: "MODEL_ID",          // Optional name of the underlying model if the deployment name doesn't match the model name, e.g. text-embedding-ada-002.
    serviceId: "YOUR_SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel.
    dimensions: 1536              // Optional number of dimensions to generate embeddings with.
);

builder.Services.AddTransient((serviceProvider)=> {
    return new Kernel(serviceProvider);
});

Erstellen eigenständiger Instanzen

Schließlich können Sie Instanzen des Diensts direkt erstellen, damit Sie sie einem Kernel später hinzufügen oder direkt in Ihrem Code verwenden können, ohne sie jemals in den Kernel oder in einen Dienstanbieter einzufügen.

Wichtig

Der Azure OpenAI Embedding Generation Connector ist derzeit experimentell. Um es zu verwenden, müssen Sie #pragma warning disable SKEXP0010hinzufügen.

using Microsoft.SemanticKernel.Connectors.AzureOpenAI;

#pragma warning disable SKEXP0010
AzureOpenAITextEmbeddingGenerationService textEmbeddingGenerationService = new (
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT", // Name of deployment, e.g. "text-embedding-ada-002".
    endpoint: "YOUR_AZURE_ENDPOINT",           // Name of Azure OpenAI service endpoint, e.g. https://myaiservice.openai.azure.com.
    apiKey: "YOUR_API_KEY",
    modelId: "MODEL_ID",          // Optional name of the underlying model if the deployment name doesn't match the model name, e.g. text-embedding-ada-002.
    httpClient: new HttpClient(), // Optional; if not provided, the HttpClient from the kernel will be used.
    dimensions: 1536              // Optional number of dimensions to generate embeddings with.
);

Verwenden von Texteinbettungs-Generierungsdiensten

Alle Dienste der Texteinbettung implementieren die ITextEmbeddingGenerationService, die über eine einzelne Methode GenerateEmbeddingsAsync verfügt, die ReadOnlyMemory<float> Vektoren aus bereitgestellten string-Werten generieren kann. Eine Erweiterungsmethode GenerateEmbeddingAsync ist auch für Einzelwertversionen derselben Aktion verfügbar.

Hier ist ein Beispiel für das Aufrufen des Diensts mit mehreren Werten.

IList<ReadOnlyMemory<float>> embeddings =
    await textEmbeddingGenerationService.GenerateEmbeddingsAsync(
    [
        "sample text 1",
        "sample text 2"
    ]);

Hier ist ein Beispiel für das Aufrufen des Diensts mit einem einzelnen Wert.

using Microsoft.SemanticKernel.Embeddings;

ReadOnlyMemory<float> embedding =
    await textEmbeddingGenerationService.GenerateEmbeddingAsync("sample text");

Demnächst

Weitere Informationen werden in Kürze verfügbar sein.

Demnächst

Weitere Informationen werden in Kürze verfügbar sein.