Sdílet prostřednictvím


Dokončení chatu

Po dokončení chatu můžete simulovat back-and-forth konverzaci s agentem AI. To je samozřejmě užitečné pro vytváření chatovacích robotů, ale dá se použít také k vytváření autonomních agentů, kteří můžou provádět obchodní procesy, generovat kód a provádět další činnosti. Jako primární typ modelu, který poskytuje OpenAI, Google, Mistral, Facebook a další, dokončení chatu je nejběžnější službou AI, kterou přidáte do projektu sémantického jádra.

Při výběru modelu dokončování chatu je potřeba zvážit následující:

  • Jaké způsoby model podporuje (např. text, obrázek, zvuk atd.)?
  • Podporuje volání funkcí?
  • Jak rychle přijímá a generuje tokeny?
  • Kolik stojí každý token?

Důležité

Z výše uvedených otázek je nejdůležitější, jestli model podporuje volání funkcí. Pokud tomu tak není, nebudete moct model použít k volání existujícího kódu. Většina nejnovějších modelů od OpenAI, Google, Mistral a Amazon podporují volání funkcí. Podpora malých jazykových modelů je ale stále omezená.

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řed přidáním dokončení chatu 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 pro dokončování chatu

Teď, když jste nainstalovali potřebné balíčky, můžete vytvářet služby pro dokončování chatu. Níže je několik způsobů, jak vytvořit služby pro dokončování chatu pomocí sémantického jádra.

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

Pokud chcete přidat službu pro dokončování chatu, můžete ji pomocí následujícího kódu přidat k poskytovateli vnitřních služeb jádra.

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();

Použití injektáže závislostí

Pokud používáte injektáž závislostí, budete pravděpodobně chtít přidat služby AI přímo k poskytovateli služeb. To je užitečné, pokud chcete vytvořit jednotony služeb AI a znovu je použít v přechodných jádrech.

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);
});

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.

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
);

Pokud chcete vytvořit službu pro dokončování chatu, musíte naimportovat potřebné moduly a vytvořit instanci služby. Níže jsou uvedené kroky k vytvoření služby pro dokončování chatu pro každého poskytovatele služeb AI.

Spropitné

Existují tři metody, jak poskytnout požadované informace službám AI. Informace můžete zadat buď přímo prostřednictvím konstruktoru, nastavit potřebné proměnné prostředí, nebo vytvořit soubor .env v adresáři projektu obsahující proměnné prostředí. Na této stránce najdete všechny požadované proměnné prostředí pro každého poskytovatele služeb 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")

Poznámka:

Služba AzureChatCompletion také podporuje ověřování Microsoft Entra. Pokud nezadáte klíč rozhraní API, služba se pokusí ověřit pomocí tokenu Entra.

Můžete začít používat službu dokončení hned nebo přidat službu dokončení chatu k jádru. K přidání služby do jádra můžete použít následující kód.

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)

Instance služby pro dokončování chatu můžete vytvářet přímo a buď je přidat do jádra, nebo je použít přímo v kódu, aniž byste je do jádra vkládali. Následující kód ukazuje, jak vytvořit službu pro dokončování chatu a přidat ji do jádra.

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();

Načítání služeb pro dokončování chatu

Po přidání služeb pro dokončování chatu do jádra je můžete načíst pomocí metody get. Níže je příklad, jak z jádra načíst službu dokončování chatu.

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);

Spropitné

Přidání služby pro dokončování chatu do jádra se nevyžaduje, pokud nepotřebujete používat jiné služby v jádru. Službu dokončování chatu můžete použít přímo ve svém kódu.

Používání služeb pro dokončování chatu

Teď, když máte službu pro dokončování chatu, můžete ji použít k vygenerování odpovědí z agenta umělé inteligence. Službu pro dokončování chatu můžete použít dvěma hlavními způsoby:

  • bez streamování: Čekáte, až služba vygeneruje celou odpověď, než je vrácena uživateli.
  • streamování: Jednotlivé bloky odpovědi se vygenerují a vrátí uživateli při jejich vytváření.

Než začnete, budete muset ručně vytvořit instanci nastavení spouštění, která bude používat službu dokončování chatu, pokud jste službu nezaregistrovali v jádru.

from semantic_kernel.connectors.ai.open_ai import OpenAIChatPromptExecutionSettings

execution_settings = OpenAIChatPromptExecutionSettings()

Spropitné

Pokud chcete zjistit, co můžete nakonfigurovat v nastavení spouštění, můžete zkontrolovat definici třídy v zdrojovém kódu nebo si prohlédnout dokumentaci k rozhraní API.

Níže jsou uvedené dva způsoby, jak můžete pomocí služby pro dokončování chatu generovat odpovědi.

Dokončení chatu bez streamování

Pokud chcete použít dokončování chatu bez streamování, můžete k vygenerování odpovědi z agenta AI použít následující kód.

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
);

Dokončení chatu streamování

Pokud chcete použít dokončování streamovaného chatu, můžete k vygenerování odpovědi od agenta AI použít následující kód.

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="")

Poznámka:

Sémantické jádro pro Javu nepodporuje model odezvy streamování.

Další kroky

Teď, když jste do projektu sémantického jádra přidali služby pro dokončování chatu, můžete začít vytvářet konverzace s vaším agentem AI. Další informace o používání služby pro dokončování chatu najdete v následujících článcích: