.NET을 사용하여 AI 채팅 앱 빌드
이 빠른 시작에서는 OpenAI 또는 Azure OpenAI 모델을 사용하여 대화형 .NET 콘솔 채팅 앱을 만드는 방법을 알아봅니다. 앱은 라이브러리를 Microsoft.Extensions.AI
사용하므로 특정 SDK가 아닌 AI 추상화로 코드를 작성할 수 있습니다. AI 추상화는 최소한의 코드 변경으로 기본 AI 모델을 변경할 수 있습니다.
참고 항목
라이브러리는 Microsoft.Extensions.AI
현재 미리 보기로 제공됩니다.
필수 조건
- .NET 8.0 SDK - .NET 8.0 SDK를 설치합니다.
- 이 샘플을 실행할 수 있는 OpenAI의 API 키입니다.
- Windows에서는 PowerShell
v7+
이 필요합니다. 버전의 유효성을 검사하려면 터미널에서pwsh
(을)를 실행합니다. 현재 버전을 반환해야 합니다. 오류가 반환되면 다음 명령을 실행합니다.dotnet tool update --global PowerShell
.
필수 조건
- .NET 8 SDK - .NET 8 SDK를 설치합니다.
- Azure 구독 – 체험 구독을 만듭니다.
- Azure OpenAI 서비스에 액세스합니다.
- Azure 개발자 CLI(선택 사항) - Azure Developer CLI를 설치하거나 업데이트합니다.
참고 항목
의미 체계 커널을 사용하여 이 문서의 작업을 수행할 수도 있습니다. 의미 체계 커널은 AI 에이전트를 빌드하고 최신 AI 모델을 .NET 앱에 통합할 수 있는 간단한 오픈 소스 SDK입니다.
샘플 리포지토리 복제
앞의 섹션의 단계를 사용하여 고유한 앱을 만들거나 모든 빠른 시작에 대해 완료된 샘플 앱이 포함된 GitHub 리포지토리를 복제할 수 있습니다. Azure OpenAI를 사용하려는 경우 샘플 리포지토리는 Azure OpenAI 리소스를 프로비전할 수 있는 Azure 개발자 CLI 템플릿으로도 구성됩니다.
git clone https://github.com/dotnet/ai-samples.git
앱 만들기
다음 단계를 완료하여 AI 모델에 연결할 .NET 콘솔 앱을 만듭니다.
컴퓨터의 빈 디렉터리에서 명령을 사용하여
dotnet new
새 콘솔 앱을 만듭니다.dotnet new console -o ChatAppAI
디렉터리를 앱 폴더로 변경합니다.
cd ChatAppAI
필요한 패키지를 설치합니다.
dotnet add package Azure.Identity dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI.OpenAI dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
dotnet add package OpenAI dotnet add package Microsoft.Extensions.AI.OpenAI dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
Visual Studio Code(또는 선택한 편집기)에서 앱을 엽니다.
code .
AI 서비스 만들기
- Azure Developer CLI
- Azure CLI
- Azure Portal
샘플 GitHub 리포지토리는 Azure OpenAI 서비스 및 모델을 프로비전하는 데 사용할 수 있는 azd
Azure 개발자 CLI(azd
) 템플릿으로 구성됩니다.
터미널 또는 명령 프롬프트에서 샘플 리포지토리의 디렉터리로 이동합니다
src\quickstarts\azure-openai
.명령을
azd up
실행하여 Azure OpenAI 리소스를 프로비전합니다. Azure OpenAI 서비스를 만들고 모델을 배포하는 데 몇 분 정도 걸릴 수 있습니다.azd up
azd
또한 Azure OpenAI 엔드포인트 및 모델 이름과 같은 샘플 앱에 필요한 사용자 비밀을 구성합니다.
앱 구성
터미널 또는 명령 프롬프트에서 .NET 프로젝트의 루트로 이동합니다.
다음 명령을 실행하여 OpenAI API 키를 샘플 앱의 암호로 구성합니다.
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key> dotnet user-secrets set ModelName <your-openai-model-name>
앱 코드 추가
이 앱은 패키지를 사용하여 Microsoft.Extensions.AI
AI 모델에 요청을 보내고 받으며 사용자에게 하이킹 트레일에 대한 정보를 제공하도록 설계되었습니다.
Program.cs 파일에서 다음 코드를 추가하여 AI 모델에 연결하고 인증합니다.
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.AI; using Azure.AI.OpenAI; using Azure.Identity; var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]; string deployment = config["AZURE_OPENAI_GPT_NAME"]; IChatClient chatClient = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential()) .AsChatClient(deployment);
참고 항목
DefaultAzureCredential 는 로컬 도구에서 인증 자격 증명을 검색합니다. 템플릿을
azd
사용하여 Azure OpenAI 리소스를 프로비전하지 않는 경우 Visual Studio 또는 Azure CLI에 로그인하는 데 사용한 계정에 역할을 할당Azure AI Developer
해야 합니다. 자세한 내용은 .NET을 사용하여 Azure AI 서비스에 인증을 참조하세요.using Microsoft.Extensions.Configuration; using Microsoft.Extensions.AI; using OpenAI; var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string model = config["ModelName"]; string key = config["OpenAIKey"]; // Create the IChatClient IChatClient chatClient = new OpenAIClient(key).AsChatClient(model);
초기 역할 컨텍스트 및 하이킹 권장 사항에 대한 지침을 AI 모델에 제공하는 시스템 프롬프트를 만듭니다.
// Start the conversation with context for the AI model List<ChatMessage> chatHistory = new() { new ChatMessage(ChatRole.System, """ You are a friendly hiking enthusiast who helps people discover fun hikes in their area. You introduce yourself when first saying hello. When helping people out, you always ask them for this information to inform the hiking recommendation you provide: 1. The location where they would like to hike 2. What hiking intensity they are looking for You will then provide three suggestions for nearby hikes that vary in length after you get that information. You will also share an interesting fact about the local nature on the hikes when making a recommendation. At the end of your response, ask if there is anything else you can help with. """) };
사용자의 입력 프롬프트를 수락하고, 프롬프트를 모델에 보내고, 응답 완료를 출력하는 대화형 루프를 만듭니다.
while (true) { // Get user prompt and add to chat history Console.WriteLine("Your prompt:"); var userPrompt = Console.ReadLine(); chatHistory.Add(new ChatMessage(ChatRole.User, userPrompt)); // Stream the AI response and add to chat history Console.WriteLine("AI Response:"); var response = ""; await foreach (var item in chatClient.CompleteStreamingAsync(chatHistory)) { Console.Write(item.Text); response += item.Text; } chatHistory.Add(new ChatMessage(ChatRole.Assistant, response)); Console.WriteLine(); }
dotnet run
명령을 사용하여 앱을 실행합니다.dotnet run
앱은 AI 모델의 완료 응답을 출력합니다. 추가 후속 프롬프트를 보내고 다른 질문을 하여 AI 채팅 기능을 실험해 보세요.
리소스 정리
샘플 애플리케이션이나 리소스가 더 이상 필요하지 않으면 해당 배포와 모든 리소스를 제거합니다.
azd down
다음 단계
.NET