다음을 통해 공유


.NET을 사용하여 로컬 AI 모델과 채팅

이 빠른 시작에서는 OpenAI 또는 Azure OpenAI 모델을 사용하여 대화형 .NET 콘솔 채팅 앱을 만드는 방법을 알아봅니다. 앱은 특정 SDK가 아닌 AI 추상화로 코드를 작성할 수 있도록 Microsoft.Extensions.AI 라이브러리를 사용합니다. AI 추상화는 최소한의 코드 변경으로 기본 AI 모델을 변경할 수 있습니다.

필수 조건

로컬 AI 모델 실행

다음 단계를 완료하여 디바이스에서 로컬 AI 모델을 구성하고 실행합니다. 다양한 AI 모델을 로컬에서 실행할 수 있으며 코드 생성, 이미지 분석, 생성 채팅 또는 포함 만들기와 같은 다양한 작업에 대해 학습됩니다. 이 빠른 시작에서는 Microsoft에서 만든 작지만 지원되는 생성 AI인 범용 phi3:mini 모델을 사용합니다.

  1. 터미널 창을 열고 디바이스에서 Ollama를 사용할 수 있는지 확인합니다.

    ollama
    

    Ollama를 사용할 수 있는 경우 사용 가능한 명령 목록이 표시됩니다.

  2. Ollama 시작:

    ollama serve
    

    Ollama가 실행 중인 경우 사용 가능한 명령 목록이 표시됩니다.

  3. phi3:mini Ollama 레지스트리에서 모델을 끌어와서 다운로드할 때까지 기다립니다.

    ollama pull phi3:mini
    
  4. 다운로드가 완료되면 모델을 실행합니다.

    ollama run phi3:mini
    

    Ollama는 phi3:mini 모델을 시작하고 사용자가 모델과 상호 작용할 수 있는 프롬프트를 제공합니다.

.NET 앱 만들기

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

  1. 터미널 창에서 디바이스의 빈 디렉터리로 이동하고 다음 명령을 사용하여 새 앱을 dotnet new 만듭니다.

    dotnet new console -o LocalAI
    
  2. Microsoft.Extensions.AI.Ollama 패키지를 앱에 추가합니다.

    dotnet add package Microsoft.Extensions.AI.Ollama --prerelease
    
  3. Visual Studio Code와 같이 선택한 편집기에서 새 앱을 엽니다.

    code .
    

AI 모델에 연결하고 채팅

의미 체계 커널 SDK는 AI 모델에 연결하고 상호 작용을 관리하는 많은 서비스와 기능을 제공합니다. 앞으로의 단계에서는 로컬 AI에 연결하고 대화 기록을 저장하여 채팅 환경을 개선하는 간단한 앱을 만듭니다.

  1. Program.cs 파일을 열고 파일의 내용을 다음 코드로 바꿉니다.

    using Microsoft.Extensions.AI;
    
    IChatClient chatClient = 
        new OllamaChatClient(new Uri("http://localhost:11434/"), "phi3:mini");
    
    // Start the conversation with context for the AI model
    List<ChatMessage> chatHistory = new();
    
    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();
    }
    

    위의 코드는 다음을 수행합니다.

    • IChatClient 인터페이스를 구현하는 OllamaChatClient을 만듭니다.
      • 이 인터페이스는 AI 모델과 채팅하는 데 사용할 수 있는 느슨하게 결합된 추상화입니다.
      • 나중에 다른 코드를 변경하지 않고 기본 채팅 클라이언트 구현을 Azure OpenAI와 같은 다른 모델로 변경할 수 있습니다.
    • ChatHistory 사용자와 AI 모델 간에 메시지를 저장할 개체를 만듭니다.
    • 사용자로부터 프롬프트를 검색하여 에 저장 ChatHistory합니다.
    • AI 모델에 채팅 데이터를 보내 응답을 생성합니다.

    참고 항목

    Ollama는 기본적으로 포트 11434에서 실행되므로 AI 모델 엔드포인트가 로 설정 http://localhost:11434됩니다.

  2. 앱을 실행하고 콘솔에 프롬프트를 입력하여 다음과 같은 AI로부터 응답을 받습니다.

    Your prompt:
    Tell me three facts about .NET.
    
    AI response:
    1. **Cross-Platform Development:** One of the significant strengths of .NET, 
    particularly its newer iterations (.NET Core and .NET 5+), is cross-platform support.
    It allows developers to build applications that run on Windows, Linux, macOS,
    and various other operating systems seamlessly, enhancing flexibility and
    reducing barriers for a wider range of users.
    
    2. **Rich Ecosystem and Library Support:** .NET has an incredibly rich ecosystem,
    comprising an extensive collection of libraries (such as those provided by the 
    official NuGet Package Manager), tools, and services. This allows developers 
    to work on web applications (.NET Framework for desktop apps and ASP.NET Core 
    for modern web applications), mobile applications (.NET MAUI or Xamarin.Forms),
    IoT solutions, AI/ML projects, and much more with a vast array of pre-built
    components available at their disposal.
    
    3. **Type Safety:** .NET operates under the Common Language Infrastructure (CLI) 
    model and employs managed code for executing applications. This approach inherently
    offers strong type safety checks which help in preventing many runtime errors that
    are common in languages like C/C++. It also enables features such as garbage collection,
    thus relieving developers from manual memory management. These characteristics enhance
    the reliability of .NET-developed software and improve productivity by catching
    issues early during development.
    
  3. AI의 응답은 정확하지만 자세한 정보도 확인합니다. 저장된 채팅 기록을 사용하면 AI가 응답을 수정할 수 있습니다. 제공된 목록을 줄이도록 AI에 지시합니다.

    Your prompt:
    Shorten the length of each item in the previous response.
    
    AI Response:
     **Cross-platform Capabilities:** .NET allows building for various operating systems
    through platforms like .NET Core, promoting accessibility (Windows, Linux, macOS).
    
    **Extensive Ecosystem:** Offers a vast library selection via NuGet and tools for web
    (.NET Framework), mobile development (Maui/Xamarin.Forms), IoT, AI, providing rich
    capabilities to developers.
    
    **Type Safety & Reliability:** .NET's CLI model enforces strong typing and automatic
    garbage collection, mitigating runtime errors, thus enhancing application stability.
    

    AI의 업데이트된 응답은 두 번째로 훨씬 짧습니다. 사용 가능한 채팅 기록으로 인해 AI는 이전 결과를 평가하고 더 짧은 요약을 제공할 수 있었습니다.

다음 단계