Sdílet prostřednictvím


Generování zapouzdření textu v sémantickém jádru

Při generování textových embeddingů můžete k vygenerování vektorů (neboli embeddingů) použít model umělé inteligence. Tyto vektory kódují sémantický význam textu tak, aby matematické rovnice mohly být použity na dvou vektorech k porovnání podobnosti původního textu. To je užitečné ve scénářích, jako je načtení rozšířené generace (RAG), ve kterých chceme hledat v databázi informací text související s uživatelským dotazem. Všechny odpovídající informace se pak dají poskytnout jako vstup do dokončování chatu, aby model AI při odpovídání na uživatelský dotaz získal více kontextu.

Při výběru modelu vkládání je potřeba vzít v úvahu následující:

  • Jaká je velikost vektorů generovaných modelem a je konfigurovatelná, protože to ovlivní náklady na úložiště vektorů.
  • Jaký typ prvků generované vektory obsahují, například float32, float16 atd., protože to ovlivní náklady na úložiště vektorů.
  • Jak rychle generuje vektory?
  • Kolik stojí generování?

Spropitné

Další informace o ukládání a vyhledávání vektorů najdete v tématu Co jsou sémantické konektory úložiště vektorů jádra?

Spropitné

Další informace o použití RAG s vektorovými úložišti v sémantickém jádru najdete v tématu Jak používat vektorová úložiště se sémantickým vyhledáváním textu jádra a Co jsou pluginy pro vyhledávání textu v sémantickém jádru?

Nastavení místního prostředí

Některé služby AI je možné hostovat místně a můžou vyžadovat určité nastavení. Níže jsou uvedeny pokyny pro ty, které to podporují.

Žádné místní nastavení.

Instalace potřebných balíčků

Předtím, než přidáte generování vkládacích dat do jádra, budete muset nainstalovat potřebné balíčky. Níže jsou uvedené balíčky, které budete muset nainstalovat pro každého poskytovatele služeb AI.

dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI

Vytváření služeb generování vektorových reprezentací textu

Teď, když jste nainstalovali potřebné balíčky, můžete vytvořit službu generování vkládání textu. Níže jsou uvedeny různé způsoby, jak využít sémantické jádro k vytváření embedovacích generátorů.

Přímé přidání do jádra

Pokud chcete přidat službu generování vkládání textu, můžete ji přidat do vnitřního poskytovatele služeb jádra pomocí následujícího kódu.

Důležitý

Konektor pro generování vkládání dat Azure OpenAI je v současné době ve fázi experimentu. Pokud ho chcete použít, budete muset přidat #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();

Použití injektování závislostí

Pokud používáte injektáž závislostí, budete pravděpodobně chtít přidat služby generování vkládání textu přímo k poskytovateli služeb. To je užitečné, pokud chcete vytvořit singletony služeb pro generování embeddingů a znovu je použít v dočasných jádrech.

Důležitý

Konektor pro generování vektorových reprezentací Azure OpenAI je v současné době experimentální. Pokud ho chcete použít, budete muset přidat #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);
});

Vytváření samostatných instancí

Nakonec můžete vytvořit instance služby přímo, abyste je mohli později buď přidat do jádra, nebo je použít přímo v kódu, aniž byste je někdy vkládali do jádra nebo poskytovatele služeb.

Důležitý

Konektor pro generování embeddingů Azure OpenAI je v současné době experimentální. Pokud ho chcete použít, budete muset přidat #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.
);

Použití služeb generování vkládání textu

Všechny služby generování vkládání textu implementují ITextEmbeddingGenerationService, která má jednu metodu GenerateEmbeddingsAsync, která může generovat vektory ReadOnlyMemory<float> z poskytnutých hodnot string. Metoda rozšíření GenerateEmbeddingAsync je také k dispozici pro verze jedné hodnoty stejné akce.

Tady je příklad, jak vyvolat službu s více hodnotami.

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

Tady je příklad, jak vyvolat službu s jednou hodnotou.

using Microsoft.SemanticKernel.Embeddings;

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

Již brzy

Další informace budou brzy k dispozici.

Již brzy

Další informace budou brzy k dispozici.