Сьогодні, коли штучний інтелект розвивається надзвичайно швидко, ще ніколи не було кращого часу бути .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, вкажіть:https://api.github.com/models
Це налаштування дає змогу клієнту надсилати всі запити безпосередньо до GitHub Models.
Після цього викличте .AsChatClient()
, щоб перетворити клієнт конкретного провайдера на стандартний інтерфейс IChatClient
.
Це важливо, адже такий підхід робить код чистим, гнучким і незалежним від постачальника. Якщо ви захочете змінити провайдера, логіку програми міняти не доведеться.
3. Створення GitHub API-ключа
Тепер створимо API-ключ GitHub, щоб отримати доступ до моделей.
-
Перейдіть у GitHub Models Marketplace.
-
У спадному списку виберіть потрібну модель.
-
Для прикладу ми використаємо GPT-4.1 Mini.
-
Натисніть «Use this model».
-
Якщо ви користуєтеся безкоштовним тарифом, натисніть «Create personal access token», щоб згенерувати ключ.
Створення токена
-
Вкажіть термін дії (за замовчуванням — 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 може працювати зі штучним інтелектом і великими мовними моделями за допомогою бібліотеки Microsoft.Extensions.AI.
Усього за кілька рядків коду ми:
-
Підключили консольний застосунок .NET 9 до GitHub Models
-
Реалізували стрімінг відповідей у реальному часі
-
Додали збереження історії діалогу
-
Створили інтерактивний чат
Це чудовий приклад того, наскільки потужною та гнучкою стала екосистема AI у .NET.
Просто, швидко й елегантно — ідеально для розробників, які створюють інтелектуальні застосунки.