프로젝트 초기화
// csproj 파일
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.3" />
<PackageReference Include="Microsoft.SemanticKernel" Version="1.41.0" />
<PackageReference Include="Microsoft.SemanticKernel.Connectors.OpenAI" Version="1.41.0" />
<PackageReference Include="System.Text.Json" Version="9.0.3" />
</ItemGroup>
<ItemGroup>
<None Include="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
C#
복사
소스 코드
// Program.cs
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.Extensions.Configuration;
// 애플리케이션 설정 구성 인스턴스 생성
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) // JSON 파일에서 설정을 로드하도록
.AddUserSecrets<Program>() // 민감 정보를 관리하기 위해 추가
.Build(); // 구성 객체 생성
var endpoint = config["GitHub:Models:EndPoint"]!;
var apikey = config["GitHub:Models:ApiKey"]!;
var model = config["GitHub:Models:ModelId"]!;
// Kernel 및 ChatCompletion 서비스 설정
var kernel = Kernel.CreateBuilder() // CreateBuilder()를 통해 커널 객체 생성
.AddAzureOpenAIChatCompletion(model, endpoint, apikey) // AddOpenAIChatCompletion 대신 AddAzureOpenAIChatCompletion 사용 : 모델 추가
.Build();
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>(); // IChatCompletionService(: AI 채팅 기능 담당 서비스) 타입의 의존성 검색 & 반환
// Chat History 객체 생성
ChatHistory chatHistory =
[
// 시스템 메시지 추가 (초기 설정)
new ChatMessageContent(AuthorRole.System, "You are a helpful assistant."),
];
while (true)
{
Console.Write("User: ");
string userInput = Console.ReadLine() ?? string.Empty;
if (string.IsNullOrWhiteSpace(userInput) || string.Equals(userInput, "exit", StringComparison.OrdinalIgnoreCase))
break;
// 사용자 메시지 추가
chatHistory.Add(new ChatMessageContent(AuthorRole.User, userInput));
// AI 응답 생성
var response = await chatCompletionService.GetChatMessageContentAsync(chatHistory);
// 응답을 Chat History에 추가
chatHistory.Add(response);
// 응답 출력
Console.WriteLine($"Assistant: {response.Content}");
}
Console.WriteLine("Chat ended.");
C#
복사
결과(Console)
다음과 같이, 제가 말했던 내용을 기억했다가 다음 답변시 활용할 수 있습니다

