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á.

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.OpenAI

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.

dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI
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.OpenAI;

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 přidat službu pro dokončování chatu, můžete ji do jádra přidat pomocí následujícího kódu.

from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion

# Initialize the kernel
kernel = Kernel()

# Add the Azure OpenAI chat completion service
kernel.add_service(AzureChatCompletion(
    deployment_name="my-deployment",
    api_key="my-api-key",
    base_url="https://my-deployment.azurewebsites.net", # Used to point to your service
    service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
))

Můžete také vytvořit instance služby přímo, abyste je mohli později přidat do jádra nebo je použít přímo ve svém kódu, aniž byste je do jádra vkládali.

from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion

chat_completion_service = AzureChatCompletion(
    deployment_name="my-deployment",
    api_key="my-api-key",
    base_url="https://my-deployment.azurewebsites.net", # Used to point to your service
    service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)

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

chat_completion_service = kernel.get_service(type=ChatCompletionClientBase)

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:

  • Non-streaming: Před vrácením této odpovědi uživateli počkáte, až služba vygeneruje celou odpověď.
  • Streamování: Jednotlivé bloky odpovědi se vygenerují a vrátí uživateli při jejich vytváření.

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_contents(
    chat_history=history,
    kernel=kernel,
))[0]

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_contents(
    chat_history=history,
    kernel=kernel,
)

async for chunk in response:
    print(chunk)

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: