Delen via


Chatvoltooiing

Wanneer de chat is voltooid, kunt u een back-and-forth-gesprek simuleren met een AI-agent. Dit is natuurlijk handig voor het maken van chatbots, maar kan ook worden gebruikt voor het maken van autonome agents die bedrijfsprocessen kunnen voltooien, code kunnen genereren en meer. Als het primaire modeltype dat wordt geleverd door OpenAI, Google, Mistral, Facebook en anderen, is het voltooien van chats de meest voorkomende AI-service die u toevoegt aan uw Semantic Kernel-project.

Wanneer u een voltooiingsmodel voor chats kiest, moet u rekening houden met het volgende:

  • Welke modaliteiten ondersteunt het model (bijvoorbeeld tekst, afbeelding, audio, enzovoort)?
  • Biedt het ondersteuning voor het aanroepen van functies?
  • Hoe snel ontvangt en genereert het tokens?
  • Hoeveel kost elk token?

Belangrijk

Van alle bovenstaande vragen is het belangrijkst of het model functie-aanroepen ondersteunt. Als dit niet het geval is, kunt u het model niet gebruiken om uw bestaande code aan te roepen. De meeste van de nieuwste modellen van OpenAI, Google, Mistral en Amazon bieden allemaal ondersteuningsfuncties. Ondersteuning van kleine taalmodellen is echter nog steeds beperkt.

De benodigde pakketten installeren

Voordat u chatvoltooiing aan uw kernel toevoegt, moet u de benodigde pakketten installeren. Hieronder vindt u de pakketten die u moet installeren voor elke AI-serviceprovider.

dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI

Services voor het voltooien van chats maken

Nu u de benodigde pakketten hebt geïnstalleerd, kunt u services voor chatvoltooiing maken. Hieronder vindt u de verschillende manieren waarop u services voor chatvoltooiing kunt maken met behulp van Semantische kernel.

Rechtstreeks toevoegen aan de kernel

Als u een chatvoltooiingsservice wilt toevoegen, kunt u de volgende code gebruiken om deze toe te voegen aan de interne serviceprovider van de kernel.

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

Afhankelijkheidsinjectie gebruiken

Als u afhankelijkheidsinjectie gebruikt, wilt u waarschijnlijk uw AI-services rechtstreeks toevoegen aan de serviceprovider. Dit is handig als u singletons van uw AI-services wilt maken en deze opnieuw wilt gebruiken in tijdelijke kernels.

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

Zelfstandige exemplaren maken

Ten slotte kunt u exemplaren van de service rechtstreeks maken, zodat u ze later aan een kernel kunt toevoegen of ze rechtstreeks in uw code kunt gebruiken zonder ze ooit in de kernel of in een serviceprovider te injecteren.

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

Als u een chatvoltooiingsservice wilt toevoegen, kunt u de volgende code gebruiken om deze toe te voegen aan de kernel.

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

U kunt ook rechtstreeks exemplaren van de service maken, zodat u ze later aan een kernel kunt toevoegen of ze rechtstreeks in uw code kunt gebruiken zonder ze in de kernel te injecteren.

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
)

Services voor chatvoltooiing ophalen

Nadat u chatvoltooiingsservices aan uw kernel hebt toegevoegd, kunt u deze ophalen met behulp van de get-servicemethode. Hieronder ziet u een voorbeeld van hoe u een chatvoltooiingsservice van de kernel kunt ophalen.

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

chat_completion_service = kernel.get_service(type=ChatCompletionClientBase)

Services voor chatvoltooiing gebruiken

Nu u een chatvoltooiingsservice hebt, kunt u deze gebruiken om antwoorden te genereren van een AI-agent. Er zijn twee belangrijkste manieren om een chat-voltooiingsservice te gebruiken:

  • Niet-streaming: u wacht totdat de service een volledig antwoord genereert voordat u deze retourneert aan de gebruiker.
  • Streaming: afzonderlijke segmenten van het antwoord worden gegenereerd en geretourneerd aan de gebruiker wanneer ze worden gemaakt.

Hieronder vindt u de twee manieren waarop u een chat-voltooiingsservice kunt gebruiken om antwoorden te genereren.

Niet-streaming chatvoltooiing

Als u niet-streaming chatvoltooiing wilt gebruiken, kunt u de volgende code gebruiken om een antwoord van de AI-agent te genereren.

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]

Voltooiing van streamingchat

Als u streamingchatvoltooiing wilt gebruiken, kunt u de volgende code gebruiken om een antwoord te genereren van de AI-agent.

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)

Volgende stappen

Nu u chatvoltooiingsservices hebt toegevoegd aan uw Semantic Kernel-project, kunt u beginnen met het maken van gesprekken met uw AI-agent. Raadpleeg de volgende artikelen voor meer informatie over het gebruik van een chatvoltooiingsservice: