Повстання машин на .NET 10: як я змусив ШІ писати код за їжу (і ледь не збанкрутував на токенах)

💡 Усі статті, обговорення, новини про AI — в одному місці. Приєднуйтесь до AI спільноти!

Ви цікавитеся IT, але ніколи не писали нічого серйозного. Або ви розробник, але вам просто ліньки знову створювати свій велосипед. Вас задовбали члени родини або друзі, які пристають із одноманітними запитаннями, котрі ШІ може вирішити за секунди.
Ви хочете вирішити цю проблему. Ви завантажуєте AI IDE (або відкриваєте свій уже встановлений редактор із ШІ-агентами), кидаєте йому посилання на проєкт і просите агента запустити його. Агент каже, які саме ключі йому потрібні, розповідає, де їх отримати, ви все це додаєте, і за кілька хвилин у вас уже є готовий бот у Telegram, який вміє шукати в інтернеті, перекладати текст та розповідати пласкі анекдоти.
Потім вам спадає на думку: «А що, як хтось користуватиметься цим ботом без мого дозволу і витрачатиме мої кровно зароблені гроші в нерівному бою з навколишньою реальністю? Я хочу, щоб цим ботом користувалися тільки члени моєї родини». Агент редактора за кілька хвилин додає ці функції.
А потім ви думаєте: «О, я хочу, щоб бот міг завантажувати PDF-документи, перекладати їх на потрібну мову, стисло розповідати про їхній вміст і відповідати на будь-які запитання щодо цього файлу». Алгоритм той самий, і за кілька хвилин у вас вже бот із цими можливостями.
Нарешті, ви хочете, щоб бот працював не лише на вашому ноутбуці чи комп’ютері, а й на старому Raspberry Pi, який припадає пилом на полиці вже кілька років. Або у вас взагалі з постійно підключених до мережі пристроїв є тільки розумний пилосос — це теж не проблема... напевно.
Якщо вам цікаво, як це влаштовано, читайте статтю далі.

Привіт, DOU!

Поки розробники на Python намагаються вдесяте перевстановити pip, а JavaScript-спільнота завантажує черговий гігабайт node_modules для виведення «Hello World», я вирішив підійти до справи серйозно.

Зустрічайте: AiTelegramBotFramework — повноцінний, заряджений та обвішаний бронею стартовий шаблон для створення Telegram-ботів на .NET 10 та C# 14, повністю оптимізований під роботу з ШІ-кодинг-агентами.

Але це не нудна стаття про архітектурні патерни. Це історія про те, як мій пет-проєкт перетворився на Skynet локального масштабу.

Фінансовий моніторинг: як друзі з’їли мій API-баланс

Усе починалося ще у 2023 році. Мені просто хотілося мати зручний інтерфейс у Telegram, щоб «на льоту» перемикатися між різними моделями та провайдерами (це зараз їх десятки, а тоді все крутилося навколо OpenAI). Бот вмів відповідати на запитання, малювати зображення та розпізнавати голосові повідомлення (бо ліньки друкувати, а слухати ШІ вміє краще за людей).

Я дав доступ до бота своїм друзям. Це була фатальна помилка.

Вже за добу мій API-баланс почав танути, як сніг у травні. Виявилося, що ці «тестувальники» годинами просили шалено дорогу на той час GPT скласти поему про пригоди картоплини в стилі Шекспіра або згенерувати десятки зображень котів у кіберпанк-стилі.

Рішення знайшлося швидко: я додав систему детального білінгу та обліку лімітів токенів (/billing). Тепер я точно знаю, хто саме з’їв мій баланс на безглузді запити, і можу одним кліком урізати їм ліміти. Капіталізм у дії.

Як не віддати OpenAI свою квартиру: MCP та економія 90% токенів

Згодом бот розрісся. Кодова база стала настільки великою, що коли я просив ШІ-агента (Cursor чи Antigravity) додати якусь дрібничку, він зчитував половину мого проєкту. Запити ставали золотими. ШІ буквально проїдав мій бюджет розробника.

Ми з ботом сіли порадитися (він, до речі, теж хоче жити і просив токенів) та вирішили інтегрувати Model Context Protocol (MCP). Я підняв локальну семантичну пам’ять на SurrealDB з локальною моделлю ONNX.

Тепер ШІ-агент не перечитує весь проєкт щоразу, а робить швидкий семантичний пошук по коду. Результат: економія на токенах понад 90%. Сем Альтман плаче в кутку над трупом померлого від голоду Ілона Маска, поки ми спокійно продовжуємо кодити за копійки.

Skynet на мінімалках: Самодеплой бота (якщо він себе не вб’є)

А тепер найвеселіше. Навіщо розгортати бота вручну, якщо є ШІ? Я вирішив навчити його повній автономності.

Хоча проєкт чудово підтримує і класичний автоматичний деплой (простим пушем у задану гілку через Git-хуки), ми пішли далі. Завдяки набору системних інструментів, бот тепер вміє сам себе розгортати на виділеному сервері в реальному часі.

Ні, серйозно. У нього є SSH-доступ, він може самостійно стягнути свій же оновлений код з Git, скомпілювати нову версію себе та перезапустити Docker-контейнери. Це виглядає настільки рекурсивно й дивно, що нагадує компілятор C, повністю написаний мовою C — бот буквально перевинаходить і перезбирає сам себе прямо під час роботи.

Звісно, на практиці такий самодеплой через SSH — це більше веселий парадокс та самоіронія, адже він приречений на епічне падіння: щойно бот зупинить свій власний Docker-контейнер, він миттєво помре і фізично не зможе виконати команду запуску нової версії. Класичний рекурсивний тупик! Тож для реального життя краще використовувати перевірений часом деплой у задану гілку через класичні Git-хуки. Але сама ідея змусити бота перезапускати себе лоскоче нерви, особливо у п’ятницю ввечері, коли рука мимоволі тягнеться до кнопки живлення сервера.

Що всередині цього монстра?

Якщо ви втомилися від Python-скриптів, які ламаються від зміни версії інтерпретатора, ось що ви отримаєте «з коробки» в нашому .NET 10 шаблоні:

  • EF Core + PostgreSQL — ніяких «іграшкових» баз, тільки сувора реляційна класика.
  • Hangfire — для фонових завдань та розсилок, які не повинні падати при перезапуску бота.
  • OpenTelemetry & .NET Aspire — повна обсервабільність. Ви бачите кожен запит, кожен SQL-факап та метрики в красивому дашборді.
  • NPX-інструменти — можливість легко розширювати можливості ШІ-агента прямо через адмін-панель.

Важливо про ліцензію (MIT з етичною поправкою): Цей проєкт має особливу ліцензію. Задля підтримки України, будь-яка русифікація інтерфейсу чи документації заборонена на рівні ліцензійної угоди, доки окупанти не підуть геть з нашої землі. Справжній патріотичний Open Source! 🇺🇦

Мовне питання: раптова любов до Rust та корисні лінощі

До речі, у процесі нещадних експериментів із ШІ-агентами я раптово перейнявся глибокою повагою до Rust. У цієї мови є лише один крихітний мінус — її просто на дух не переносять самі ШІ-агенти. Варто їм підсунути файл на Rust, як вони спочатку кілька годин запекло сперечаються з компілятором про те, хто з них головний, а вже потім починають жалібно скиглити, благати про пощаду і наполегливо пропонувати «давай краще перепишемо це все на Python».

Поточний стан мого проєкту вже настільки зрілий, що його за бажання можна повністю портувати на Rust. Але, чесно кажучи, мені ліньки. Тож якщо ви відчуваєте в собі дух справжнього крабового воїна — форкайте і переписуйте самостійно. Ба більше, наша ліцензія не забороняє навіть згрішити й переписати бота на Python (хоча за таке ваша програмістська карма й отримає важкий удар, але закон є закон — ми не забороняємо).

🛠️ Секретні суперсили: планувальник, SSH-тандеми та юридичний дисклеймер

Окрім базового чату та генерації картинок, у фреймворку приховані справжні мега-фічі, про які просто соромно мовчати:

Планувальник завдань на базі Hangfire. Це не просто банальні відкладені повідомлення. Бот може щоранку надсилати вам свіжий прогноз погоди, а в п’ятницю ввечері — делікатно нагадувати, куди краще піти відпочити на вихідних. А якщо підключити туди Google Calendar MCP-інструмент, то бот перетворюється на вашого особистого асистента, який розпланує ваш день за секунду. Для нього це взагалі елементарна задача.

Тандем інструментів, або Розробка на автопілоті. Оскільки боту доступні SSH, Google Drive та планувальник Hangfire, ви можете будувати з цього комбо справжні автоматизовані мега-завдання:

Можна розписати план реалізації якогось проєкту (прямо в чаті бота або в IDE), розбити його на дрібні підзадачі, написати тести, які код має пройти (TDD у всій красі), і поставити планувальнику завдання: «Кожен день потихеньку пиши та тестуй цей проєкт». Ну не зовсім так, але кому потрібно той вже зрозумів як це зробити.

Звісно, писати код безпосередньо в IDE зі спеціалізованим ШІ-агентом набагато зручніше, але факт залишається фактом: бот повністю на це здатний. Він може зберігати ваші індивідуальні правила, скіли та протоколи прямо на вашому Google Диску або на віртуальній машині (ви ж не настільки божевільні, щоб запускати цей автономний код на своїй реальній робочій машині?).

Важливе попередження про безпеку (або «Я вмиваю руки» 👐)
Інструмент SSH-доступу відкритий виключно для власника бота. Чому? Бо я так і не знайшов надійного способу передачі конфіденційних даних так, щоб власник бота про них не дізнався. Взагалі, власник бота може легко дізнатися будь-які конфіденційні дані будь-якого свого користувача.
Попередження: якщо ви здуру вирішите прибрати це обмеження та відкрити SSH або доступ до системних інструментів стороннім людям — ви несете за це відповідальність самі. Я про це офіційно попередив і повністю зняв із себе будь-яку відповідальність, якщо ваш бот раптом злиє чиїсь секрети чи відформатує диск.

Портал у прод для вашого IDE-агента. У фреймворку передбачений спеціальний інструментарій (через додатковий шлюз prod-mcp-gateway), який дозволяє підключити ваш локальний ШІ-кодер прямо в серце продакшну!

Уявіть ситуацію: на бойовому сервері стався збій. Замість того, щоб судомно ломитися по SSH, шукати потрібні контейнери й лопатити гігабайти логів, ви просто даєте команду своєму агенту в IDE (на кшталт Cursor, Roo Code чи Antigravity): «Глянь логи проєкту на проде й розберися, чому оця фіча відвалилася».

ШІ-агент сам підключається до бази даних та сервісів на сервері, витягує логи, знаходить корінь проблеми й миттєво пропонує вам робочий фікс.

Усе, що для цього потрібно на реальному сервері — це налаштований Tailscale для підняття безпечної приватної мережі.

Важливе застереження: після того, як проблему розв’язано, Tailscale на сервері потрібно обов’язково відключити, щоб ваш прод не перетворився на прохідний двір.

Що далі?

Проєкт дійшов до тієї стадії, коли його може розвивати будь-хто, у кого встановлено Git та будь-яка IDE (або замість вас це зробить ваш знайомий ШІ-агент чи навіть якийсь пересічний шкіряний мішок, а ви просто питимете каву). Примітка: цю частину про шкіряних мішків додав сам ШІ-агент, поки автор відволікся на філіжанку кави.

Тож перевірте, чи не заіржавів ваш C#, переходьте на GitHub, ставте зірочку, та найголовніше — жодних пул-реквестів, народ! Форкайте проєкт, забирайте його собі, додавайте власні фічі й пишіть свої інструменти. Розвивайте його повністю самостійно, адже для цього у вас уже є все необхідне:

👉 Репозиторій AiTelegramBotFramework на GitHub

Чекаю на ваші коментарі внизу (особливо від фанатів Python, розкажіть мені, як воно там — писати ботів без типізації). Запускайте свої форки та створюйте власні версії!

Подяки (іноді крізь сльози)

Наостанок хочу висловити щиру вдячність усім колегам та керівникам компаній, де мені довелося працювати. Особливо тим, з яких мене вигнали з тріском — це був незабутній досвід, який навчив мене ефективно боротися з вигоранням!

Дякую:

  • Компанії Фармвест та моїм найпершим IT-колегам — обом Олександрам, Толіку та Антону. Саме з вами я навчився щиро ненавидіти користувачів та телефони (досі, коли я чую телефонний дзвінок, у мене підіймається тиск і темніє в очах).
  • Компанії Робософт — за мій перший і неоціненний досвід розробки в команді.
  • Компанії Webmerchantsinc — за те, що навчили мене писати й успішно виконувати команду SELECT в SQL (без цього бот точно не злетів би). Дякую, Олександре.
  • Особлива подяка Vitaliy Dyachenko (із NorthSouthTech), який дав мені унікальну можливість як попрацювати в проєктах, спочатку написаних нетверезими китайськими розробниками, так і вивести ці продукти на професійний рівень із сучасними стандартами та інструментами розробки.
  • Моєму брату — за те, що регулярно і з особливим натхненням нагадував мені, з якого саме місця ростуть мої руки.

P.S. Так, я знаю про існування таких чудових сервісів, як OpenRouter чи OpenClaw (ClawBot). Але цей проєкт зароджувався ще до того, як вони стали популярними чи взагалі з’явилися на горизонті (або принаймні до того, як я про них дізнався). Тож це мій власний ламповий велосипед, побудований з любов’ю та цікавістю до технологій!

👍ПодобаєтьсяСподобалось1
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі