채팅이 완료되면 AI 에이전트와의 전후 대화를 시뮬레이션할 수 있습니다. 이는 물론 챗봇을 만드는 데 유용하지만 비즈니스 프로세스를 완료하고 코드를 생성할 수 있는 자율 에이전트를 만드는 데도 사용할 수 있습니다. OpenAI, Google, Mistral, Facebook 등에서 제공하는 기본 모델 유형으로 채팅 완성은 의미 체계 커널 프로젝트에 추가할 가장 일반적인 AI 서비스입니다.
채팅 완료 모델을 선택할 때 다음을 고려해야 합니다.
모델에서 지원하는 형식(예: 텍스트, 이미지, 오디오 등)은 무엇인가요?
함수 호출을 지원하나요?
토큰을 얼마나 빨리 받고 생성하나요?
각 토큰 비용은 얼마인가요?
Important
위의 모든 질문 중에서 가장 중요한 것은 모델이 함수 호출을 지원하는지 여부입니다. 그렇지 않으면 모델을 사용하여 기존 코드를 호출할 수 없습니다. OpenAI, Google, Mistral 및 Amazon의 최신 모델 대부분은 모두 함수 호출을 지원합니다. 그러나 작은 언어 모델의 지원은 여전히 제한됩니다.
필요한 패키지 설치
커널에 채팅 완료를 추가하기 전에 필요한 패키지를 설치해야 합니다. 다음은 각 AI 서비스 공급자에 대해 설치해야 하는 패키지입니다.
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();
using Microsoft.SemanticKernel;
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // Optional
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();
Important
Mistral 채팅 완료 커넥터는 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0070해야 합니다.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddMistralChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
Important
Google 채팅 완료 커넥터는 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0070해야 합니다.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.Google;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddGoogleAIGeminiChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
apiVersion: GoogleAIVersion.V1, // Optional
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
Important
Hugging Face 채팅 완료 커넥터는 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0070해야 합니다.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddHuggingFaceChatCompletion(
model: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
OpenAI 채팅 완료 API(예: LLM Studio)를 지원하는 다른 AI 서비스 공급자의 경우 다음 코드를 사용하여 기존 OpenAI 채팅 완료 커넥터를 다시 사용할 수 있습니다.
Important
OpenAI 커넥터에서 사용자 지정 엔드포인트를 사용하는 것은 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0010해야 합니다.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0010
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Used to point to your service
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
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;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // Optional; for OpenAI deployment
serviceId: "YOUR_SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Important
Mistral 채팅 완료 커넥터는 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0070해야 합니다.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddMistralChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Important
Google 채팅 완료 커넥터는 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0070해야 합니다.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.Google;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddGoogleAIGeminiChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
apiVersion: GoogleAIVersion.V1, // Optional
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Important
Hugging Face 채팅 완료 커넥터는 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0070해야 합니다.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.Google;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddHuggingFaceChatCompletion(
model: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
OpenAI 채팅 완료 API(예: LLM Studio)를 지원하는 다른 AI 서비스 공급자의 경우 다음 코드를 사용하여 기존 OpenAI 채팅 완료 커넥터를 다시 사용할 수 있습니다.
Important
OpenAI 커넥터에서 사용자 지정 엔드포인트를 사용하는 것은 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0010해야 합니다.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0010
builder.Services.AddOpenAIChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Used to point to your service
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
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
);
using Microsoft.SemanticKernel.Connectors.OpenAI;
OpenAIChatCompletionService chatCompletionService = new (
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
organization: "YOUR_ORG_ID", // Optional
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
Important
Mistral 채팅 완료 커넥터는 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0070해야 합니다.
using Microsoft.SemanticKernel.Connectors.MistralAI;
#pragma warning disable SKEXP0070
MistralAIChatCompletionService chatCompletionService = new (
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Important
Google 채팅 완료 커넥터는 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0070해야 합니다.
using Microsoft.SemanticKernel.Connectors.Google;
#pragma warning disable SKEXP0070
GoogleAIGeminiChatCompletionService chatCompletionService = new (
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
apiVersion: GoogleAIVersion.V1, // Optional
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Important
Hugging Face 채팅 완료 커넥터는 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0070해야 합니다.
using Microsoft.SemanticKernel.Connectors.OpenAI;
OpenAIChatCompletionService chatCompletionService = new (
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
organization: "YOUR_ORG_ID", // Optional
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
OpenAI 채팅 완료 API(예: LLM Studio)를 지원하는 다른 AI 서비스 공급자의 경우 다음 코드를 사용하여 기존 OpenAI 채팅 완료 커넥터를 다시 사용할 수 있습니다.
Important
OpenAI 커넥터에서 사용자 지정 엔드포인트를 사용하는 것은 현재 실험적입니다. 이 기능을 사용하려면 .를 추가 #pragma warning disable SKEXP0010해야 합니다.
using Microsoft.SemanticKernel.Connectors.OpenAI;
#pragma warning disable SKEXP0010
OpenAIChatCompletionService chatCompletionService = new (
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
organization: "YOUR_ORG_ID", // Optional
endpoint: new Uri("YOUR_ENDPOINT"), // Used to point to your service
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 import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
# Initialize the kernel
kernel = Kernel()
# Add the Azure OpenAI chat completion service
kernel.add_service(OpenAIChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
org_id="my-org-id", # Optional
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
))
OpenAI 채팅 완료 API(예: LLM Studio)를 지원하는 다른 AI 서비스 공급자의 경우 다음 코드를 사용하여 기존 OpenAI 채팅 완료 커넥터를 다시 사용할 수 있습니다.
from semantic_kernel import Kernel
# Initialize the kernel
kernel = Kernel()
# Add the Azure OpenAI chat completion service
kernel.add_service(OpenAIChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
org_id="my-org-id", # Optional
base_url="https://my-custom-deployment.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
)
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
chat_completion_service = OpenAIChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
org_id="my-org-id", # Optional
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
OpenAI 채팅 완료 API(예: LLM Studio)를 지원하는 다른 AI 서비스 공급자의 경우 다음 코드를 사용하여 기존 OpenAI 채팅 완료 커넥터를 다시 사용할 수 있습니다.
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
chat_completion_service = OpenAIChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
org_id="my-org-id", # Optional
base_url="https://my-custom-deployment.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 에이전트와 대화를 만들 수 있습니다. 채팅 완료 서비스를 사용하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.