Сегодня, когда искусственный интеллект развивается стремительно, ещё никогда не было лучшего времени, чтобы быть .NET-разработчиком, работающим с AI. Благодаря современным библиотекам и API-интерфейсам, интеграция больших языковых моделей (LLM) в приложения .NET стала простой, быстрой и надёжной.
Одним из ключевых инструментов, который делает этот процесс таким удобным, является библиотека Microsoft.Extensions.AI. Она предоставляет чистые абстракции для работы с разными AI-провайдерами.
В этой статье мы подробно рассмотрим, как использовать GitHub Models в .NET 9: настроим OpenAI-адаптер, создадим чат-клиент и подключим приложение напрямую к модели всего за несколько строк кода.
1. Настройка консольного приложения .NET 9
Начнём с создания базового консольного приложения .NET 9. Когда оно готово, добавим необходимые библиотеки.
Установка библиотек
-
Откройте NuGet Package Manager.
-
В поле поиска введите
Microsoft.Extensions.AI
. -
Вместо установки этой библиотеки напрямую установите Microsoft.Extensions.AI.OpenAI — именно она нужна для подключения к GitHub Models.
-
Пакет
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, чтобы получить доступ к моделям.
-
Перейдите на GitHub Models Marketplace.
-
В выпадающем списке выберите модель.
-
Для примера используем GPT-4.1 Mini.
-
Нажмите «Use this model».
-
Если вы используете бесплатный тариф, нажмите «Create personal access token», чтобы сгенерировать API-ключ.
Создание токена
-
Установите срок действия (по умолчанию 30 дней).
-
Укажите имя токена, например YouTube GitHub Model Token.
-
Нажмите «Generate token» для создания.
Скопируйте токен сразу — он отображается только один раз. Храните его в надёжном месте и никогда не вставляйте напрямую в код. Для демонстрации мы вставим его в примере, но в реальном приложении используйте переменные окружения или Secret Manager.
После вставки токена добавьте имя модели ("gpt-4.1-mini"
) — на этом настройка чат-клиента завершена.
4. Реализация логики чат-приложения
Теперь, когда клиент готов, создадим логику самого чата.
Приветственное сообщение
При запуске приложения отобразите короткое приветствие и инструкцию, как выйти из чата.
История диалога
Чтобы модель могла поддерживать контекст, создайте список для хранения всех сообщений между пользователем и моделью.
В нём будут как сообщения пользователя, так и ответы ассистента.
Основной цикл чата
Чат должен работать непрерывно, пока пользователь не введёт exit
.
-
Используйте цикл
while (true)
. -
Отобразите приглашение ко вводу в консоли.
-
Считайте сообщение пользователя.
-
Если строка пустая — пропустите итерацию.
-
Если введено
exit
— выйдите из цикла.
Каждое сообщение пользователя добавляйте в историю, чтобы передать полный контекст модели при следующем запросе.
5. Потоковые ответы модели в реальном времени
Перед тем как вывести ответ модели, добавьте метку «Assistant:», чтобы было видно, от кого сообщение.
Метод GetStreamingResponseAsync()
позволяет получать ответ постепенно, токен за токеном, то есть вы будете видеть текст по мере его генерации — как в настоящем чате.
Используйте Console.Write()
для вывода каждого токена сразу, создавая эффект живого диалога.
Параллельно сохраняйте ответ в переменную assistantResponse
, добавляя каждый фрагмент текста.
Когда модель закончит, добавьте полный ответ в историю чата, чтобы сохранить контекст.
6. Улучшение интерфейса
Пока что и пользователь, и модель выводятся одинаковым цветом, что не очень удобно.
Исправим это:
-
Приветствие: жёлтый
-
Сообщения пользователя: белый
-
Ответ ассистента: зелёный
Теперь чат стал нагляднее и приятнее визуально.
После изменения цветов запустите приложение снова — разница заметна сразу.
Сообщения чётко различимы, а ответы ассистента появляются плавно, в реальном времени.
7. Тестирование чат-приложения
Проверим, как работает наш чат:
-
Введите:
What’s .NET?
→ Ассистент мгновенно объясняет, что такое .NET. -
Затем попробуйте:
Write a story about a superhero.
→ Модель начинает стримить креативную историю прямо в консоль. -
Проверим контекст:
-
Введите
Add 10 and 5.
→ Ответ:10 + 5 = 15.
-
Затем введите
Minus 4.
→ Ответ:15 - 4 = 11.
-
Модель запомнила предыдущий результат, потому что мы передаём всю историю диалога при каждом новом запросе.
8. Заключение
Вы только что увидели, насколько просто .NET может взаимодействовать с AI и большими языковыми моделями с помощью библиотеки Microsoft.Extensions.AI.
Всего за несколько строк кода мы:
-
Подключили консольное приложение .NET 9 к GitHub Models
-
Реализовали потоковую генерацию ответов
-
Добавили историю диалога
-
Создали интерактивный чат
Это отличный пример того, насколько мощной и гибкой стала экосистема AI в .NET. Всё просто, быстро и элегантно — идеальное решение для разработчиков, создающих интеллектуальные приложения.