Partager via


Génération d’incorporation de texte dans le noyau sémantique

Avec la génération d’incorporation de texte, vous pouvez utiliser un modèle IA pour générer des vecteurs (alias incorporations). Ces vecteurs encodent la signification sémantique du texte de telle sorte que les équations mathématiques peuvent être utilisées sur deux vecteurs pour comparer la similarité du texte d’origine. Cela est utile pour les scénarios tels que la récupération d’une génération augmentée (RAG), où nous voulons rechercher une base de données d’informations pour du texte lié à une requête utilisateur. Toutes les informations correspondantes peuvent ensuite être fournies en tant qu’entrée à la complétion de conversation, afin que le modèle IA ait plus de contexte lors de la réponse à une requête utilisateur.

Lorsque vous choisissez un modèle d’incorporation, vous devez prendre en compte les éléments suivants :

  • Quelle est la taille des vecteurs générés par le modèle, et il est configurable, car cela affectera le coût de stockage vectoriel.
  • Quel type d’éléments contient les vecteurs générés, par exemple float32, float16, etc. , car cela affectera le coût de stockage vectoriel.
  • À quelle vitesse génère-t-il des vecteurs ?
  • Combien coûte la génération ?

Pourboire

Pour plus d’informations sur le stockage et la recherche de vecteurs, consultez Qu’est-ce que les connecteurs de magasin de vecteurs de noyau sémantique ?

Pourboire

Pour plus d’informations sur l’utilisation de RAG avec des magasins vectoriels dans le noyau sémantique, consultez Comment utiliser des magasins vectoriels avec la recherche de texte de noyau sémantique et Qu’est-ce que les plug-ins recherche de texte de noyau sémantique ?

Configuration de votre environnement local

Certains des services IA peuvent être hébergés localement et peuvent nécessiter une configuration. Vous trouverez ci-dessous des instructions pour ceux qui le soutiennent.

Aucune configuration locale.

Installation des packages nécessaires

Avant d’ajouter la génération d’incorporation à votre noyau, vous devez installer les packages nécessaires. Voici les packages que vous devez installer pour chaque fournisseur de services IA.

dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI

Création de services de génération d’incorporation de texte

Maintenant que vous avez installé les packages nécessaires, vous pouvez créer un service de génération d’incorporation de texte. Vous trouverez ci-dessous plusieurs façons de créer des services de génération d'intégrations de texte à l'aide du noyau sémantique.

Ajout direct au noyau

Pour ajouter un service de génération d’incorporation de texte, vous pouvez utiliser le code suivant pour l’ajouter au fournisseur de services interne du noyau.

Important

Le connecteur de création d’intégration Azure OpenAI est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0010.

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

Utilisation de l’injection de dépendances

Si vous utilisez l’injection de dépendances, vous souhaiterez probablement ajouter vos services de génération d’incorporation de texte directement au fournisseur de services. Cela est utile si vous souhaitez créer des singletons de vos services de génération d’incorporation et les réutiliser dans des noyaux temporaires.

Important

Le connecteur de génération d’incorporation Azure OpenAI est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0010.

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

Création d’instances autonomes

Enfin, vous pouvez créer des instances du service directement afin de pouvoir les ajouter à un noyau ultérieurement ou les utiliser directement dans votre code sans jamais les injecter dans le noyau ou dans un fournisseur de services.

Important

Le connecteur de génération d'embeddings Azure OpenAI est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0010.

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

Utilisation des services de génération d’incorporation de texte

Tous les services de génération incorporés de texte implémentent le ITextEmbeddingGenerationService qui a une méthode unique GenerateEmbeddingsAsync qui peut générer des vecteurs ReadOnlyMemory<float> à partir de valeurs string fournies. Une méthode d’extension GenerateEmbeddingAsync est également disponible pour les versions à valeur unique de la même action.

Voici un exemple d’appel du service avec plusieurs valeurs.

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

Voici un exemple d’appel du service avec une valeur unique.

using Microsoft.SemanticKernel.Embeddings;

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

À venir

Plus d’informations seront bientôt disponibles.

À venir

Plus d’informations seront bientôt disponibles.