次の方法で共有


チャット入力候補

チャットの完了により、AI エージェントとの会話の前後をシミュレートできます。 これはもちろん、チャット ボットの作成に役立ちますが、ビジネス プロセスを完了したり、コードを生成したりできる自律的なエージェントの作成にも使用できます。 OpenAI、Google、Mistral、Facebook などが提供する主要なモデルの種類として、チャットの完了はセマンティック カーネル プロジェクトに追加する最も一般的な AI サービスです。

チャット完了モデルを選択する場合は、次の点を考慮する必要があります。

  • モデルはどのモダリティ (テキスト、画像、オーディオなど) をサポートしていますか?
  • 関数呼び出しをサポートしていますか?
  • トークンを受け取って生成する速度はどのくらいですか?
  • 各トークンのコストはどのくらいですか?

重要

上記のすべての質問のうち、最も重要なのは、モデルが関数呼び出しをサポートしているかどうかです。 そうでない場合は、モデルを使用して既存のコードを呼び出すことができなくなります。 OpenAI、Google、Mistral、Amazon の最新モデルのほとんどは、関数呼び出しをサポートしています。 ただし、小さな言語モデルからのサポートはまだ限られています。

ローカル環境の設定

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

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

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

カーネルにチャットの完了を追加する前に、必要なパッケージをインストールする必要があります。 AI サービス プロバイダーごとにインストールする必要があるパッケージを次に示します。

dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI

チャット完了サービスの作成

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

カーネルに直接追加する

チャット完了サービスを追加するには、次のコードを使用してカーネルの内部サービス プロバイダーに追加します。

using Microsoft.SemanticKernel;

IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddAzureOpenAIChatCompletion(
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT",
    apiKey: "YOUR_API_KEY",
    endpoint: "YOUR_AZURE_ENDPOINT",
    modelId: "gpt-4", // Optional name of the underlying model if the deployment name doesn't match the model name
    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
);
Kernel kernel = kernelBuilder.Build();

依存関係の挿入を使用する

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

using Microsoft.SemanticKernel;

var builder = Host.CreateApplicationBuilder(args);

builder.Services.AddAzureOpenAIChatCompletion(
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT",
    apiKey: "YOUR_API_KEY",
    endpoint: "YOUR_AZURE_ENDPOINT",
    modelId: "gpt-4", // Optional name of the underlying model if the deployment name doesn't match the model name
    serviceId: "YOUR_SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);

builder.Services.AddTransient((serviceProvider)=> {
    return new Kernel(serviceProvider);
});

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

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

using Microsoft.SemanticKernel.Connectors.AzureOpenAI;

AzureOpenAIChatCompletionService chatCompletionService = new (
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT",
    apiKey: "YOUR_API_KEY",
    endpoint: "YOUR_AZURE_ENDPOINT",
    modelId: "gpt-4", // Optional name of the underlying model if the deployment name doesn't match the model name
    httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);

チャット完了サービスを作成するには、必要なモジュールをインストールしてインポートし、サービスのインスタンスを作成する必要があります。 各 AI サービス プロバイダーのチャット完了サービスをインストールして作成する手順を次に示します。

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

セマンティック カーネル パッケージには、Azure OpenAI を使用するために必要なすべてのパッケージが付属しています。 Azure OpenAI を使用するために追加のパッケージは必要ありません。

チャット完了サービスの作成

ヒント

AI サービスに必要な情報を提供するには、3 つの方法があります。 コンストラクターを介して直接情報を提供するか、必要な環境変数を設定するか、環境変数を含む .env ファイルをプロジェクト ディレクトリ内に作成できます。 このページにアクセスして、各 AI サービスプロバイダーに必要なすべての環境変数を確認できます。 (https://github.com/microsoft/semantic-kernel/blob/main/python/samples/concepts/setup/ALL_SETTINGS.md)

from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion

chat_completion_service = AzureChatCompletion(
    deployment_name="my-deployment",  
    api_key="my-api-key",
    endpoint="my-api-endpoint", # Used to point to your service
    service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)

# You can do the following if you have set the necessary environment variables or created a .env file
chat_completion_service = AzureChatCompletion(service_id="my-service-id")

Note

サービスでは、Microsoft Entra 認証 もサポートされています。 API キーを指定しない場合、サービスは Entra トークンを使用して認証を試みます。

すぐに完了サービスの使用を開始するか、チャット完了サービスをカーネルに追加できます。 次のコードを使用して、カーネルにサービスを追加できます。

from semantic_kernel import Kernel

# Initialize the kernel
kernel = Kernel()

# Add the chat completion service created above to the kernel
kernel.add_service(chat_completion_service)

チャット完了サービスのインスタンスを直接作成し、カーネルに追加するか、カーネルに挿入せずにコード内で直接使用することができます。 次のコードは、チャット完了サービスを作成し、カーネルに追加する方法を示しています。

import com.azure.ai.openai.OpenAIAsyncClient;
import com.azure.ai.openai.OpenAIClientBuilder;
import com.microsoft.semantickernel.Kernel;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;

// Create the client
OpenAIAsyncClient client = new OpenAIClientBuilder()
    .credential(azureOpenAIClientCredentials)
    .endpoint(azureOpenAIClientEndpoint)
    .buildAsyncClient();

// Create the chat completion service
ChatCompletionService openAIChatCompletion = OpenAIChatCompletion.builder()
    .withOpenAIAsyncClient(client)
    .withModelId(modelId)
    .build();

// Initialize the kernel
Kernel kernel = Kernel.builder()
    .withAIService(ChatCompletionService.class, openAIChatCompletion)
    .build();

チャット完了サービスの取得

チャット完了サービスをカーネルに追加したら、get サービス メソッドを使用してそれらを取得できます。 カーネルからチャット完了サービスを取得する方法の例を次に示します。

var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
from semantic_kernel.connectors.ai.chat_completion_client_base import ChatCompletionClientBase

# Retrieve the chat completion service by type
chat_completion_service = kernel.get_service(type=ChatCompletionClientBase)

# Retrieve the chat completion service by id
chat_completion_service = kernel.get_service(service_id="my-service-id")

# Retrieve the default inference settings
execution_settings = kernel.get_prompt_execution_settings_from_service_id("my-service-id")
ChatCompletionService chatCompletionService = kernel.getService(ChatCompletionService.class);

ヒント

カーネルで他のサービスを使用する必要がない場合は、チャット完了サービスをカーネルに追加する必要はありません。 チャット完了サービスは、コード内で直接使用できます。

チャット完了サービスの使用

チャット完了サービスが完成したら、それを使用して AI エージェントからの応答を生成できます。 チャット完了サービスを使用するには、主に次の 2 つの方法があります。

  • ストリーミング以外の: サービスが応答全体を生成するのを待ってから、ユーザーに返します。
  • ストリーミング: 応答の個々の部分が生成されると、ユーザーに返されます。

開始する前に、カーネルにサービスを登録していない場合は、チャット完了サービスを使用する実行設定インスタンスを手動で作成する必要があります。

from semantic_kernel.connectors.ai.open_ai import OpenAIChatPromptExecutionSettings

execution_settings = OpenAIChatPromptExecutionSettings()

ヒント

実行設定で構成できる内容を確認するには、ソース コード でクラス定義を確認するか、API ドキュメントを確認します。

チャット完了サービスを使用して応答を生成する 2 つの方法を次に示します。

非ストリーミング チャットの完了

ストリーミング以外のチャットの完了を使用するには、次のコードを使用して、AI エージェントからの応答を生成できます。

ChatHistory history = [];
history.AddUserMessage("Hello, how are you?");

var response = await chatCompletionService.GetChatMessageContentAsync(
    history,
    kernel: kernel
);
chat_history = ChatHistory()
chat_history.add_user_message("Hello, how are you?")

response = await chat_completion.get_chat_message_content(
    chat_history=history,
    settings=execution_settings,
)
ChatHistory history = new ChatHistory();
history.addUserMessage("Hello, how are you?");

InvocationContext optionalInvocationContext = null;

List<ChatMessageContent<?>> response = chatCompletionService.getChatMessageContentsAsync(
    history,
    kernel,
    optionalInvocationContext
);

ストリーミング チャットの完了

ストリーミング チャットの完了を使用するには、次のコードを使用して、AI エージェントからの応答を生成できます。

ChatHistory history = [];
history.AddUserMessage("Hello, how are you?");

var response = chatCompletionService.GetStreamingChatMessageContentsAsync(
    chatHistory: history,
    kernel: kernel
);

await foreach (var chunk in response)
{
    Console.Write(chunk);
}
chat_history = ChatHistory()
chat_history.add_user_message("Hello, how are you?")

response = chat_completion.get_streaming_chat_message_content(
    chat_history=history,
    settings=execution_settings,
)

async for chunk in response:
    print(chunk, end="")

Note

Java 用セマンティック カーネルでは、ストリーミング応答モデルはサポートされていません。

次のステップ

セマンティック カーネル プロジェクトにチャット完了サービスを追加したので、AI エージェントとの会話の作成を開始できます。 チャット完了サービスの使用の詳細については、次の記事を参照してください。