Compartir a través de


Generación de incrustaciones de texto en Kernel Semántico

Con la generación de incrustaciones de texto, puede usar un modelo de IA para generar vectores (también conocidos como incrustaciones). Estos vectores codifican el significado semántico del texto de tal manera que las ecuaciones matemáticas se pueden usar en dos vectores para comparar la similitud del texto original. Esto es útil para escenarios como la generación aumentada de recuperación (RAG), donde queremos buscar una base de datos de información para el texto relacionado con una consulta de usuario. A continuación, se puede proporcionar cualquier información coincidente como entrada para finalizar el chat, de modo que el modelo de IA tenga más contexto al responder a la consulta del usuario.

Al elegir un modelo de inserción, deberá tener en cuenta lo siguiente:

  • Cuál es el tamaño de los vectores generados por el modelo y es configurable, ya que esto afectará al costo de almacenamiento de vectores.
  • Qué tipo de elementos contienen los vectores generados, por ejemplo, float32, float16, etc., ya que esto afectará al costo de almacenamiento de vectores.
  • ¿Qué tan rápido genera vectores?
  • ¿Cuánto cuesta la generación?

Propina

Para obtener más información sobre cómo almacenar y buscar vectores, consulte ¿Qué son los conectores de almacén de vectores de kernel semántico?

Propina

Para obtener más información sobre el uso de RAG con almacenes de vectores en kernel semántico, consulte Uso de almacenes de vectores con búsqueda de texto de kernel semántico y ¿Qué son los complementos de búsqueda de texto de kernel semántico?

Configuración del entorno local

Algunos de los servicios de IA se pueden hospedar localmente y pueden requerir alguna configuración. A continuación se muestran instrucciones para aquellos que admiten esto.

No hay ninguna configuración local.

Instalación de los paquetes necesarios

Antes de agregar la generación de incrustaciones al kernel, deberá instalar los paquetes necesarios. A continuación se muestran los paquetes que deberá instalar para cada proveedor de servicios de IA.

dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI

Creación de servicios de generación de inserción de texto

Ahora que ha instalado los paquetes necesarios, puede crear un servicio de generación de inserción de texto. A continuación se muestran las diversas maneras de generar servicios de creación de texto mediante el Kernel Semántico.

Agregar directamente al kernel

Para agregar un servicio de generación de inserción de texto, puede usar el código siguiente para agregarlo al proveedor de servicios interno del kernel.

Importante

El conector de generación de embeddings de OpenAI de Azure es actualmente experimental. Para usarlo, deberá agregar #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();

Uso de la inserción de dependencias

Si usa la inserción de dependencias, es probable que quiera agregar los servicios de generación de inserción de texto directamente al proveedor de servicios. Esto resulta útil si desea crear singletons de los servicios de generación de embeddings y reutilizarlos en kernels transitorios.

Importante

El conector para la generación de incrustaciones de Azure OpenAI es experimental en este momento. Para usarlo, deberá agregar #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);
});

Creación de instancias independientes

Por último, puede crear instancias del servicio directamente para poder agregarlas a un kernel más adelante o usarlas directamente en el código sin insertarlas nunca en el kernel o en un proveedor de servicios.

Importante

El conector de generación de inserción de OpenAI de Azure es actualmente experimental. Para usarlo, deberá agregar #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.
);

Uso de servicios de generación de inserción de texto

Todos los servicios de generación de inserción de texto implementan el ITextEmbeddingGenerationService que tiene un único método GenerateEmbeddingsAsync que puede generar vectores de ReadOnlyMemory<float> a partir de valores de string proporcionados. Un método de extensión GenerateEmbeddingAsync también está disponible para versiones de valor único de la misma acción.

Este es un ejemplo de cómo invocar el servicio con varios valores.

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

Este es un ejemplo de cómo invocar el servicio con un solo valor.

using Microsoft.SemanticKernel.Embeddings;

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

Próximamente

Más información próximamente.

Próximamente

Más información próximamente.