Поделиться через


Чат с локальной моделью ИИ с помощью .NET

Из этого краткого руководства вы узнаете, как создать консольное приложение чата .NET с помощью модели OpenAI или Azure OpenAI. Приложение использует библиотеку Microsoft.Extensions.AI, чтобы можно было писать код с помощью абстракций ИИ, а не конкретного пакета SDK. Абстракции искусственного интеллекта позволяют изменять базовую модель ИИ с минимальными изменениями кода.

Предпосылки

Запуск локальной модели искусственного интеллекта

Выполните следующие действия, чтобы настроить и запустить локальную модель ИИ на устройстве. Многие различные модели ИИ доступны для локального выполнения и обучаются для различных задач, таких как создание кода, анализ изображений, создание чата или создание внедрения. В этом кратком руководстве вы будете использовать модель общего назначения phi3:mini, которая является небольшой, но способной генеративной ИИ, созданной Microsoft.

  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

Выполните следующие действия, чтобы создать консольное приложение .NET, которое подключается к локальной phi3:mini модели ИИ.

  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 .
    

Подключитесь и общайтесь с моделью ИИ

Пакет SDK для семантического ядра предоставляет множество служб и функций для подключения к моделям ИИ и управления взаимодействиями. В дальнейших шагах вы создадите простое приложение, которое подключается к локальному ИИ и сохраняет журнал бесед для улучшения взаимодействия чата.

  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.GetStreamingResponseAsync(chatHistory))
        {
            Console.Write(item.Text);
            response += item.Text;
        }
        chatHistory.Add(new ChatMessage(ChatRole.Assistant, response));
        Console.WriteLine();
    }
    

    Приведенный выше код выполняет следующее:

    • Создает OllamaChatClient, реализующий интерфейс IChatClient.
      • Этот интерфейс обеспечивает свободно связанную абстракцию, которая позволяет общаться с моделями искусственного интеллекта.
      • Позже можно изменить базовую реализацию клиента чата на другую модель, например Azure OpenAI, без изменения другого кода.
    • ChatHistory Создает объект для хранения сообщений между пользователем и моделью ИИ.
    • Извлекает запрос от пользователя и сохраняет его в ChatHistory.
    • Отправляет данные чата в модель ИИ, чтобы создать ответ.

    Примечание.

    По умолчанию Ollama выполняется на порте 11434, поэтому для конечной точки модели ИИ задано значение http://localhost:11434.

  2. Запустите приложение и введите запрос в консоль, чтобы получить ответ от ИИ, например следующее:

    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 a 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 for desktop apps and ASP.NET Core
    for modern web applications), mobile applications (.NET MAUI),
    IoT solutions, AI/ML projects, and much more with a vast array of prebuilt
    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. Ответ от ИИ является точным, но и подробным. Сохраненный журнал чата позволяет ИИ изменять свой ответ. Укажите ИИ сократить указанный список:

    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 (.NET MAUI), 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.
    

    Ответ ИИ после обновления стал гораздо короче во второй раз. Из-за доступной истории чата ИИ смог оценить предыдущий результат и предоставить более короткие сводки.

Дальнейшие действия