다음을 통해 공유


채팅 완료

채팅이 완료되면 AI 에이전트와의 전후 대화를 시뮬레이션할 수 있습니다. 이는 물론 챗봇을 만드는 데 유용하지만 비즈니스 프로세스를 완료하고 코드를 생성할 수 있는 자율 에이전트를 만드는 데도 사용할 수 있습니다. OpenAI, Google, Mistral, Facebook 등에서 제공하는 기본 모델 유형으로 채팅 완성은 의미 체계 커널 프로젝트에 추가할 가장 일반적인 AI 서비스입니다.

채팅 완료 모델을 선택할 때 다음을 고려해야 합니다.

  • 모델에서 지원하는 형식(예: 텍스트, 이미지, 오디오 등)은 무엇인가요?
  • 함수 호출을 지원하나요?
  • 토큰을 얼마나 빨리 받고 생성하나요?
  • 각 토큰 비용은 얼마인가요?

Important

위의 모든 질문 중에서 가장 중요한 것은 모델이 함수 호출을 지원하는지 여부입니다. 그렇지 않으면 모델을 사용하여 기존 코드를 호출할 수 없습니다. OpenAI, Google, Mistral 및 Amazon의 최신 모델 대부분은 모두 함수 호출을 지원합니다. 그러나 작은 언어 모델의 지원은 여전히 제한됩니다.

필요한 패키지 설치

커널에 채팅 완료를 추가하기 전에 필요한 패키지를 설치해야 합니다. 다음은 각 AI 서비스 공급자에 대해 설치해야 하는 패키지입니다.

dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI

채팅 완료 서비스 만들기

이제 필요한 패키지를 설치했으므로 채팅 완료 서비스를 만들 수 있습니다. 의미 체계 커널을 사용하여 채팅 완료 서비스를 만들 수 있는 몇 가지 방법은 다음과 같습니다.

커널에 직접 추가

채팅 완료 서비스를 추가하려면 다음 코드를 사용하여 커널의 내부 서비스 공급자에 추가할 수 있습니다.

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

종속성 주입 사용

종속성 주입을 사용하는 경우 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.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
);

채팅 완료 서비스를 추가하려면 다음 코드를 사용하여 커널에 추가할 수 있습니다.

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

나중에 커널에 추가하거나 커널에 삽입하지 않고 코드에서 직접 사용할 수 있도록 서비스의 인스턴스를 직접 만들 수도 있습니다.

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
)

채팅 완료 서비스 검색

커널에 채팅 완료 서비스를 추가한 후에는 서비스 가져오기 방법을 사용하여 검색할 수 있습니다. 다음은 커널에서 채팅 완료 서비스를 검색하는 방법의 예입니다.

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

chat_completion_service = kernel.get_service(type=ChatCompletionClientBase)

채팅 완료 서비스 사용

이제 채팅 완료 서비스가 있으므로 이를 사용하여 AI 에이전트에서 응답을 생성할 수 있습니다. 채팅 완료 서비스를 사용하는 두 가지 주요 방법이 있습니다.

  • 비 스트리밍: 사용자에게 반환하기 전에 서비스가 전체 응답을 생성할 때까지 기다립니다.
  • 스트리밍: 응답의 개별 청크가 생성되고 생성될 때 사용자에게 반환됩니다.

다음은 채팅 완료 서비스를 사용하여 응답을 생성하는 두 가지 방법입니다.

비 스트리밍 채팅 완료

비 스트리밍 채팅 완료를 사용하려면 다음 코드를 사용하여 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_contents(
    chat_history=history,
    kernel=kernel,
))[0]

스트리밍 채팅 완료

스트리밍 채팅 완료를 사용하려면 다음 코드를 사용하여 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_contents(
    chat_history=history,
    kernel=kernel,
)

async for chunk in response:
    print(chunk)

다음 단계

이제 의미 체계 커널 프로젝트에 채팅 완료 서비스를 추가했으므로 AI 에이전트와 대화를 만들 수 있습니다. 채팅 완료 서비스를 사용하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.