Udostępnij przez


Generowanie osadzania tekstu w jądrze semantycznym

Podczas generowania osadzeń tekstu można użyć modelu sztucznej inteligencji do generowania wektorów (czyli osadzeń). Te wektory kodują semantyczne znaczenie tekstu w taki sposób, że równania matematyczne mogą być używane w dwóch wektorach w celu porównania podobieństwa oryginalnego tekstu. Jest to przydatne w scenariuszach, takich jak pobieranie rozszerzonej generacji (RAG), gdzie chcemy przeszukać bazę danych informacji o tekście powiązanym z zapytaniem użytkownika. Wszystkie pasujące informacje można następnie podać jako dane wejściowe do ukończenia czatu, aby model sztucznej inteligencji miał większy kontekst podczas odpowiadania na zapytanie użytkownika.

Podczas wybierania modelu osadzania należy wziąć pod uwagę następujące kwestie:

  • Jaki jest rozmiar wektorów generowanych przez model i jest konfigurowalny, ponieważ będzie to miało wpływ na koszt magazynu wektorowego.
  • Jaki typ elementów zawiera wygenerowane wektory, np. float32, float16 itp., ponieważ wpłynie to na koszt magazynu wektorowego.
  • Jak szybko generuje wektory?
  • Ile kosztuje generowanie?

Napiwek

Aby uzyskać więcej informacji na temat przechowywania i wyszukiwania wektorów, zobacz Co to są łączniki semantycznego magazynu wektorów jądra?

Napiwek

Aby uzyskać więcej informacji na temat używania programu RAG z magazynami wektorów w jądrze semantycznym, zobacz Jak używać magazynów wektorów z wyszukiwaniem tekstu w jądrze semantycznym i Co to są wtyczki wyszukiwania tekstu w jądrze semantycznym?

Konfigurowanie środowiska lokalnego

Niektóre usługi sztucznej inteligencji mogą być hostowane lokalnie i mogą wymagać konfiguracji. Poniżej znajdują się instrukcje dla osób, które to obsługują.

Brak konfiguracji lokalnej.

Instalowanie niezbędnych pakietów

Przed dodaniem generacji osadzania do jądra należy zainstalować niezbędne pakiety. Poniżej przedstawiono pakiety, które należy zainstalować dla każdego dostawcy usług sztucznej inteligencji.

dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI

Tworzenie usług generowania osadzania tekstu

Po zainstalowaniu niezbędnych pakietów możesz utworzyć usługę generowania osadzania tekstu. Poniżej przedstawiono kilka sposobów tworzenia usług generowania osadzania tekstu przy użyciu jądra semantycznego.

Dodawanie bezpośrednio do jądra

Aby dodać usługę generowania osadzania tekstu, możesz użyć następującego kodu, aby dodać go do wewnętrznego dostawcy usług jądra.

Ważny

Łącznik generacji osadzania usługi Azure OpenAI jest obecnie eksperymentalny. Aby go użyć, należy dodać #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();

Korzystanie z wstrzykiwania zależności

Jeśli używasz wstrzykiwania zależności, prawdopodobnie chcesz dodać usługi generowania osadów tekstowych bezpośrednio do dostawcy usług. Jest to przydatne, jeśli chcesz utworzyć singletony usług generowania osadzeń i ponownie użyć ich w tymczasowych jądrach.

Ważny

Łącznik generowania osadów usługi Azure OpenAI jest obecnie w fazie eksperymentalnej. Aby go użyć, należy dodać #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);
});

Tworzenie wystąpień autonomicznych

Na koniec możesz utworzyć wystąpienia usługi bezpośrednio, aby można było później dodać je do jądra lub użyć ich bezpośrednio w kodzie, nigdy nie wstrzykując ich do jądra ani dostawcy usług.

Ważny

Łącznik generacji osadzania usługi Azure OpenAI jest obecnie eksperymentalny. Aby go użyć, należy dodać #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.
);

Korzystanie z usług generowania osadzania tekstu

Wszystkie usługi generowania osadzania tekstu implementują ITextEmbeddingGenerationService, która posiada pojedynczą metodę GenerateEmbeddingsAsync umożliwiającą generowanie wektorów ReadOnlyMemory<float> na podstawie podanych wartości string. Metoda rozszerzenia GenerateEmbeddingAsync jest również dostępna dla wersji jednowartościowej tej samej akcji.

Oto przykład sposobu wywoływania usługi z wieloma wartościami.

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

Oto przykład sposobu wywoływania usługi z pojedynczą wartością.

using Microsoft.SemanticKernel.Embeddings;

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

Wkrótce

Więcej informacji można znaleźć wkrótce.

Wkrótce

Więcej informacji można znaleźć wkrótce.