Rate this post

Сегодня, когда искусственный интеллект развивается стремительно, ещё никогда не было лучшего времени, чтобы быть .NET-разработчиком, работающим с AI. Благодаря современным библиотекам и API-интерфейсам, интеграция больших языковых моделей (LLM) в приложения .NET стала простой, быстрой и надёжной.

Одним из ключевых инструментов, который делает этот процесс таким удобным, является библиотека Microsoft.Extensions.AI. Она предоставляет чистые абстракции для работы с разными AI-провайдерами.
В этой статье мы подробно рассмотрим, как использовать GitHub Models в .NET 9: настроим OpenAI-адаптер, создадим чат-клиент и подключим приложение напрямую к модели всего за несколько строк кода.

1. Настройка консольного приложения .NET 9

Начнём с создания базового консольного приложения .NET 9. Когда оно готово, добавим необходимые библиотеки.

Установка библиотек

  1. Откройте NuGet Package Manager.

  2. В поле поиска введите Microsoft.Extensions.AI.

  3. Вместо установки этой библиотеки напрямую установите Microsoft.Extensions.AI.OpenAI — именно она нужна для подключения к GitHub Models.

  4. Пакет OpenAI уже включает в себя основную библиотеку Microsoft.Extensions.AI как зависимость, поэтому устанавливать её отдельно не нужно.

После установки убедитесь, что библиотека добавлена в проект. Очистите Program.cs, чтобы перейти к следующему этапу.

2. Создание и настройка чат-клиента

Интерфейс IChatClient — это главная абстракция, предоставляемая библиотекой Microsoft.Extensions.AI, которая позволяет взаимодействовать с большими языковыми моделями в .NET.

Создаём экземпляр чат-клиента

Создайте переменную типа IChatClient и присвойте ей новый экземпляр чат-клиента.

  • Имя модели:
    Указывает, какую модель GitHub Models вы хотите использовать. Укажем его позже.

  • API-ключ:
    Этот ключ аутентифицирует ваше приложение в GitHub Models. Без него запросы не будут выполняться. Пока оставим его пустым — позже добавим реальный ключ.

  • Endpoint:
    В OpenAIClientOptions есть свойство Endpoint. Так как мы подключаемся к GitHub Models, укажите URL:

    https://api.github.com/models

    Это позволит клиенту отправлять все запросы напрямую в GitHub Models.

После этого вызовите .AsChatClient(), чтобы преобразовать клиент конкретного провайдера в стандартный интерфейс IChatClient.
Это важно: такой подход делает код чистым, гибким и независимым от провайдера. Если вы решите сменить поставщика AI, логику приложения менять не придётся.

3. Создание API-ключа GitHub

Теперь создадим API-ключ GitHub, чтобы получить доступ к моделям.

  1. Перейдите на GitHub Models Marketplace.

  2. В выпадающем списке выберите модель.

  3. Для примера используем GPT-4.1 Mini.

  4. Нажмите «Use this model».

  5. Если вы используете бесплатный тариф, нажмите «Create personal access token», чтобы сгенерировать API-ключ.

Создание токена

  • Установите срок действия (по умолчанию 30 дней).

  • Укажите имя токена, например YouTube GitHub Model Token.

  • Нажмите «Generate token» для создания.

Скопируйте токен сразу — он отображается только один раз. Храните его в надёжном месте и никогда не вставляйте напрямую в код. Для демонстрации мы вставим его в примере, но в реальном приложении используйте переменные окружения или Secret Manager.

После вставки токена добавьте имя модели ("gpt-4.1-mini") — на этом настройка чат-клиента завершена.

4. Реализация логики чат-приложения

Теперь, когда клиент готов, создадим логику самого чата.

Приветственное сообщение

При запуске приложения отобразите короткое приветствие и инструкцию, как выйти из чата.

История диалога

Чтобы модель могла поддерживать контекст, создайте список для хранения всех сообщений между пользователем и моделью.
В нём будут как сообщения пользователя, так и ответы ассистента.

Основной цикл чата

Чат должен работать непрерывно, пока пользователь не введёт exit.

  1. Используйте цикл while (true).

  2. Отобразите приглашение ко вводу в консоли.

  3. Считайте сообщение пользователя.

  4. Если строка пустая — пропустите итерацию.

  5. Если введено exit — выйдите из цикла.

Каждое сообщение пользователя добавляйте в историю, чтобы передать полный контекст модели при следующем запросе.

5. Потоковые ответы модели в реальном времени

Перед тем как вывести ответ модели, добавьте метку «Assistant:», чтобы было видно, от кого сообщение.

Метод GetStreamingResponseAsync() позволяет получать ответ постепенно, токен за токеном, то есть вы будете видеть текст по мере его генерации — как в настоящем чате.

Используйте Console.Write() для вывода каждого токена сразу, создавая эффект живого диалога.
Параллельно сохраняйте ответ в переменную assistantResponse, добавляя каждый фрагмент текста.
Когда модель закончит, добавьте полный ответ в историю чата, чтобы сохранить контекст.

6. Улучшение интерфейса

Пока что и пользователь, и модель выводятся одинаковым цветом, что не очень удобно.
Исправим это:

  • Приветствие: жёлтый

  • Сообщения пользователя: белый

  • Ответ ассистента: зелёный

Теперь чат стал нагляднее и приятнее визуально.

После изменения цветов запустите приложение снова — разница заметна сразу.
Сообщения чётко различимы, а ответы ассистента появляются плавно, в реальном времени.

7. Тестирование чат-приложения

Проверим, как работает наш чат:

  • Введите: What’s .NET?
    → Ассистент мгновенно объясняет, что такое .NET.

  • Затем попробуйте: Write a story about a superhero.
    → Модель начинает стримить креативную историю прямо в консоль.

  • Проверим контекст:

    1. Введите Add 10 and 5.
      → Ответ: 10 + 5 = 15.

    2. Затем введите Minus 4.
      → Ответ: 15 - 4 = 11.

Модель запомнила предыдущий результат, потому что мы передаём всю историю диалога при каждом новом запросе.

8. Заключение

Вы только что увидели, насколько просто .NET может взаимодействовать с AI и большими языковыми моделями с помощью библиотеки Microsoft.Extensions.AI.

Всего за несколько строк кода мы:

  • Подключили консольное приложение .NET 9 к GitHub Models

  • Реализовали потоковую генерацию ответов

  • Добавили историю диалога

  • Создали интерактивный чат

Это отличный пример того, насколько мощной и гибкой стала экосистема AI в .NET. Всё просто, быстро и элегантно — идеальное решение для разработчиков, создающих интеллектуальные приложения.