次の方法で共有


セマンティック カーネルでのテキスト埋め込みの生成

テキスト埋め込みの生成では、AI モデルを使用してベクター (埋め込みとも呼ばれる) を生成できます。 これらのベクトルは、元のテキストの類似性を比較するために 2 つのベクトルで数式を使用できるように、テキストのセマンティック意味をエンコードします。 これは、ユーザー クエリに関連するテキストの情報のデータベースを検索する検索拡張生成 (RAG) などのシナリオに役立ちます。 一致する情報をチャット完了への入力として提供し、AI モデルがユーザー クエリに応答するときのコンテキストを増やすことができます。

埋め込みモデルを選択する場合は、次の点を考慮する必要があります。

  • モデルによって生成されるベクターのサイズは何ですか。これはベクターストレージコストに影響を与えるので、構成可能です。
  • 生成されたベクターに含まれる要素の種類 (float32、float16 など) は、ベクターストレージコストに影響します。
  • ベクターの生成速度はどのくらいですか?
  • 生成コストはどのくらいですか?

ヒント

セマンティック カーネルでベクター ストアで RAG を使用する方法の詳細については、「セマンティック カーネル テキスト検索 でベクター ストアを使用する方法」と「セマンティック カーネル テキスト検索プラグインとは」を参照してください。

ローカル環境の設定

一部の AI サービスはローカルでホストでき、一部のセットアップが必要になる場合があります。 これをサポートするユーザー向けの手順を次に示します。

ローカルセットアップなし。

必要なパッケージのインストール

カーネルに埋め込み世代を追加する前に、必要なパッケージをインストールする必要があります。 AI サービス プロバイダーごとにインストールする必要があるパッケージを次に示します。

dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI

テキスト埋め込み生成サービスの作成

必要なパッケージをインストールしたので、テキスト埋め込み生成サービスを作成できます。 セマンティック カーネルを使用して埋め込み生成サービスをテキストで作成する方法を次に示します。

カーネルに直接追加する

テキスト埋め込み生成サービスを追加するには、次のコードを使用してカーネルの内部サービス プロバイダーに追加します。

大事な

Azure OpenAI 埋め込み生成コネクタは現在試験段階です。 これを使用するには、#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();

依存性注入の使用

依存関係の挿入を使用している場合は、テキスト埋め込み生成サービスをサービス プロバイダーに直接追加する必要があります。 これは、埋め込み生成サービスのシングルトンを作成し、それらを一時的なカーネルで再利用する場合に役立ちます。

大事な

Azure OpenAI 埋め込み生成コネクタは現在試験段階です。 これを使用するには、#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);
});

スタンドアロン インスタンスの作成

最後に、サービスのインスタンスを直接作成して、後でカーネルに追加するか、カーネルまたはサービス プロバイダーに挿入することなく、コードで直接使用することができます。

大事な

Azure OpenAI 埋め込み生成コネクタは現在試験段階です。 これを使用するには、#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.
);

テキスト埋め込み生成サービスの使用

すべてのテキスト埋め込み生成サービスは、指定された string 値から ReadOnlyMemory<float> ベクトルを生成できる 1 つのメソッド GenerateEmbeddingsAsync を持つ ITextEmbeddingGenerationService を実装します。 GenerateEmbeddingAsync 拡張メソッドは、同じアクションの単一値バージョンでも使用できます。

複数の値を使用してサービスを呼び出す方法の例を次に示します。

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

1 つの値でサービスを呼び出す方法の例を次に示します。

using Microsoft.SemanticKernel.Embeddings;

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

もうすぐです

詳細については、近日公開予定です。

もうすぐです

詳細については、近日公開予定です。