다음을 통해 공유


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

필수 조건

참고 항목

의미 체계 커널을 사용하여 이 문서의 작업을 수행할 수도 있습니다. 의미 체계 커널은 AI 에이전트를 빌드하고 최신 AI 모델을 .NET 앱에 통합할 수 있는 간단한 오픈 소스 SDK입니다.

샘플 리포지토리 복제

앞의 섹션의 단계를 사용하여 고유한 앱을 만들거나 모든 빠른 시작에 대해 완료된 샘플 앱이 포함된 GitHub 리포지토리를 복제할 수 있습니다. Azure OpenAI를 사용하려는 경우 샘플 리포지토리는 Azure OpenAI 리소스를 프로비전할 수 있는 Azure 개발자 CLI 템플릿으로도 구성됩니다.

git clone https://github.com/dotnet/ai-samples.git

앱 만들기

다음 단계를 완료하여 AI 모델에 연결할 .NET 콘솔 앱을 만듭니다.

  1. 컴퓨터의 빈 디렉터리에서 명령을 사용하여 dotnet new 새 콘솔 앱을 만듭니다.

    dotnet new console -o ChatAppAI
    
  2. 디렉터리를 앱 폴더로 변경합니다.

    cd ChatAppAI
    
  3. 필요한 패키지를 설치합니다.

    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
    
  4. Visual Studio Code(또는 선택한 편집기)에서 앱을 엽니다.

    code .
    

AI 서비스 만들기

샘플 GitHub 리포지토리는 Azure OpenAI 서비스 및 모델을 프로비전하는 데 사용할 수 있는 azd Azure 개발자 CLI(azd) 템플릿으로 구성됩니다.

  1. 터미널 또는 명령 프롬프트에서 샘플 리포지토리의 디렉터리로 이동합니다 src\quickstarts\azure-openai .

  2. 명령을 azd up 실행하여 Azure OpenAI 리소스를 프로비전합니다. Azure OpenAI 서비스를 만들고 모델을 배포하는 데 몇 분 정도 걸릴 수 있습니다.

    azd up
    

    azd 또한 Azure OpenAI 엔드포인트 및 모델 이름과 같은 샘플 앱에 필요한 사용자 비밀을 구성합니다.

앱 구성

  1. 터미널 또는 명령 프롬프트에서 .NET 프로젝트의 루트로 이동합니다.

  2. 다음 명령을 실행하여 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 모델에 요청을 보내고 받으며 사용자에게 하이킹 트레일에 대한 정보를 제공하도록 설계되었습니다.

  1. 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);
    
  2. 초기 역할 컨텍스트 및 하이킹 권장 사항에 대한 지침을 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.
            """)
        };
    
  3. 사용자의 입력 프롬프트를 수락하고, 프롬프트를 모델에 보내고, 응답 완료를 출력하는 대화형 루프를 만듭니다.

    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();
    }
    
  4. dotnet run 명령을 사용하여 앱을 실행합니다.

    dotnet run
    

    앱은 AI 모델의 완료 응답을 출력합니다. 추가 후속 프롬프트를 보내고 다른 질문을 하여 AI 채팅 기능을 실험해 보세요.

리소스 정리

샘플 애플리케이션이나 리소스가 더 이상 필요하지 않으면 해당 배포와 모든 리소스를 제거합니다.

azd down

다음 단계