• Записи 1544
  • Теги 109
  • Комментарии 3323

Лог жизни

Эксперимент с генерацией кода с помощью ИИ

Сегодня меня опять потянуло в направлении Web-программирования. Интерес к информационной безопасности поутих, зато снова крутится в голове идея сделать движок для сообщества, аналогичный Pikabu или DTF, в идеале — с поддержкой PWA (и оффлайн-режима), протоколов IndieWeb и ActivityPub. Ну или для начала прикрутить PWA хотя бы к IntB.
Смотрел разные инструменты и технологии, и в итоге наткнулся на Bolt.new — генерацию приложений с помощью ИИ. К подобному я отношусь довольно скептично, но всё же решил попробовать. Запросил у него приложение, похоже на стену в социальных сетях. Увы, оказалось, что Bolt не поддерживает PHP (эх, вот теперь реально начинаю верить, что PHP может отмереть). Пришлось соглашаться на то, что дают — Node+Express и better-sqlite3 вместо просто sqlite. Всякие frameworks типа React или даже Svelte я использовать не стал, указал, что проект должен быть на чистом Javascript. Код сгенерировался, но на самом сервере запускаться отказался — какая-то ошибка с bindings для better-sqlite. Но я просто так не сдался, скачал проект к себе на компьютер и запустил там. К моему удивлению, заработало!
Правда, изначально в проекте не было почти ничего: ни разбиения на страницы (хоть какого-нибудь), ни нормальной регистрации пользователя, ни даже отправки сообщения через AJAX, без перезагрузки страницы. Можно было только ввести имя пользователя, после чего появлялось поле для отправки самого сообщения и кнопка рядом с ним. Ну и выделялись хештеги как ссылки (я сразу написал, что должна быть их поддержка), но при этом выборки постов по хештегам тоже не было.
Я стал экспериментировать дальше. Сначала запросил добавку разбиения на страницы (кстати, не знаю почему, но терпеть не могу его делать, и мои собственные проекты часто именно на этом этапе и застревают). Сработало как-то криво: кнопка появилась, но выводиться стало по 4 сообщения, а не по 10, как я запрашивал. Но вот при нажатии кнопки более старые соощения не подгружались. Потом запросил отправку сообщения через AJAX, без перезагрузки страницы — тут всё прошло хорошо. Дальше попросил бота добавить блок входа пользователя и страницу восстановления пароля, но, кажется, это оказалось за пределами его возможностей. Точнее, он написал код, который генерирует/проверяет JWT, сделал форму входа и ссылки для регистрации и восстановления пароля, но при попытке ими воспользоваться ничего не происходит. Да ещё сначала выдалась какая-то ошибка. Я так и не понял, в чём дело: то ли токены для генерации закончились, то ли задача оказалась слишком сложной для ИИ на данном этапе. Была ещё мысль дать команду на рефакторинг кода — вынести код для пользователей и код для постов в отдельные модули из server.js, но из-за того, что токены кончились, не стал экспериментировать.
В общем, пришёл к выводу, что пока что писать серьёзный код ИИ не готов. Даже для таких достаточно простых приложений. Максимум — подойдёт для быстрого прототипирования или обучения. Интересно, а есть ли self-hosted решения для таких задач? UPD: Как выяснилось, есть как минимум Tabby, FauxPilot и FireCode. Возможно, потом попробую…
Зато этот эксперимент поменял моё отношение к NodeJS. Прежде у меня было мнение, что NodeJS очень прожорлив в плане потребления памяти и поэтому не подходит для low load проектов на слабых VDS. Но запустив сгенерированное приложение у себя на компьютере, обнаружил, что RSS его процесса составляет всего 60 Мб. Для сравнения, суммарный RSS всех процессов php-fpm на VDS, где стоит этот сайт — 90 Мб.

8 комментариев:

Нет
Julia
0

Мне тоже удалось поэкспериментировать с написанием кода через нейронки. Код для UI генерится хуже всего, ну оно и понятно почему. Еще нужно уметь кодить промпты, которые заставят нейронку сгенерить код с минимумом поправок. Поэтому для себя имею вывод, что есть LLM-ки которые позволяют сгенерить бойлерплейт или прототип без поиска по своим старым проектам и гугла. Есть RAG, который выступает как продвинутый code hints. А так конечно же бизнес-логику и вёрстку нужно крафтить самостоятельно.

4X_Pro написал(а):
В общем, пришёл к выводу, что пока что писать серьёзный код ИИ не готов


Я думаю, вряд ли сможет. Дешевле писать гибридно.
4X_Pro
0
Julia написал(а):
Еще нужно уметь кодить промпты, которые заставят нейронку сгенерить код с минимумом поправок.

А это как? То есть, что именно нужно в таких промптах предусматривать, на что указывать?

Julia написал(а):
А так конечно же бизнес-логику и вёрстку нужно крафтить самостоятельно.

Эх, а я вот с 2010 года, если не раньше, заморачиваюсь на тему того, как меньше времени тратить именно на вёрстку+валидацию ошибок на client side. И в готовых frameworkах на PHP во многом разочаровался именно от того, что ждал, что они предложат какие-то готовые решения, а потом оказывалось, что формы там всё равно нужно либо всё равно делать самому, либо писать такой код на PHP, что по итогу его объём будет даже больше, чем если бы я делал форму вручную.
В своё время даже придумал свой язык описания форм на основе YAML, но так толком и не использовал.
Потом был момент, когда узнал о Vue, и подумал «вот то, что надо: можно собирать интерфейс из готовых компонентов», но быстро разочаровался, увидев, что при выключенном JavaScript сайт не будет работать вообще. (А я в этом плане человек старых правил, и считаю такое недопустимым.) Сейчас пытаюсь Svelte Kit осваивать, там вроде эта проблема решена.
Нет
Julia
0
4X_Pro написал(а):
И в готовых frameworkах на PHP во многом разочаровался именно от того, что ждал, что они предложат какие-то готовые решения, а потом оказывалось, что формы там всё равно нужно либо всё равно делать самому, либо писать такой код на PHP, что по итогу его объём будет даже больше, чем если бы я делал форму вручную.


Как бе суть готовых решений в том, чтобы с минимальным гемороем накалякать типовое васян MVP. Или чтобы оттуда что-то взять как изолированный модуль или хотя бы воспроизводимое решение. Старые проекты и Гугол со Stackoverflow выполняют ту же самую функцию. Но "индекс" знаний все равно нужно поддерживать самостоятельно, знать что полезное можно найти в них. LLM-ки в этом плане просто за тебя вычисляют текстовый "индекс".


4X_Pro написал(а):
Потом был момент, когда узнал о Vue, и подумал «вот то, что надо: можно собирать интерфейс из готовых компонентов», но быстро разочаровался, увидев, что при выключенном JavaScript сайт не будет работать вообще.


Ну так фронтенд фреймворки нужны в первую очередь для менее геморной разработки SPA - приложений в браузере. У Vue кстати есть поддержка SSR, но ето довольно узкая тема для гибридных сайто-приложений: по-дефолту сайт работает как приложение, но с отключенным JS он тоже работает, хоть и с урезанным функционалом (на моем счету так работал/работает один аггрегатор магазинов). Тебе фронтенд фреймворки не нужны, если клиентской логики в целом мало: какие-нибудь кастомные формы, менюшки. Не более. SPA работает как обычное десктоп-приложение. Другое дело что фронтенд фреймворки тащат в разработку обычных сайтов, чтобы оптимизировать переключение контекста на технологиях, на перенос похожих модулей. Но во фрилансе оно и не нужно, если ты собираешься поддерживать проект один


4X_Pro написал(а):
Сейчас пытаюсь Svelte Kit осваивать, там вроде эта проблема решена.

.
Это что-то типа NextJS, но сделано на Svelte?
4X_Pro
0
Julia написал(а):
У Vue кстати есть поддержка SSR

Читал про это, но сложилось впечатление, что это какое-то очень костыльное решение.

Julia написал(а):
Тебе фронтенд фреймворки не нужны, если клиентской логики в целом мало: какие-нибудь кастомные формы, менюшки. Не более.

По итогу сам пришёл к сходным выводам, поэтому и забросил.

Julia написал(а):
Это что-то типа NextJS, но сделано на Svelte?

Да, именно так, он позиционируется как аналог Next и Nuxt. В самой первой версии, кстати, назывался не SvelteKit, а Sapper.
Нет
Julia
0
4X_Pro написал(а):
Читал про это, но сложилось впечатление, что это какое-то очень костыльное решение.


4X_Pro написал(а):
По итогу сам пришёл к сходным выводам, поэтому и забросил.


Тогда PHP+JS за глаза хватит.


4X_Pro написал(а):
Да, именно так, он позиционируется как аналог Next и Nuxt. В самой первой версии, кстати, назывался не SvelteKit, а Sapper.


Да, помню хайп вокруг Svelte в начале 2020х. Тогда каждый фреймворк хотел иметь свой фреймворк для SSR. Но Svelte так и не нашел устойчивую нишу: для SPA есть React, для менюшек и несложных формочек на сайте хватит обычного JS.
4X_Pro
0

Понятно. А я-то задавался вопросом (даже на idealists.su об этом писал), почему такой классный проект и малопопулярен в Рунете… Просто так сложилось, что я субъективно очень не люблю React, поэтому и смотрю в сторону его альтернатив.

Нет
Julia
0

4X_Pro написал(а):
Понятно. А я-то задавался вопросом (даже на idealists.su об этом писал), почему такой классный проект и малопопулярен в Рунете…


Не только в Рунете, а везде. "Переучиться" писать на Svelte в общем-то несложно. Но Svelte лично мне не зашел. В экосистеме Реакта стили компоновать проще, логика не мешается со стилями. Ну и с LLM-ками люди станут еще консервативнее в выборе технологий.
Нет
Julia
0
4X_Pro написал(а):
А это как? То есть, что именно нужно в таких промптах предусматривать, на что указывать?


У меня обычно такая структура:

<роль> <главная суть задачи: что требуется найти и условие> <дополнительные условия и ограничения задачи, если нужны> <входные данные для задачи: например, HTML-шаблоны>



Представляй промпт как направленный граф из токенов.
Написать комментарий
Прикрепить файлы: (не более 4 файлов, не более 102400 Кб каждый, 102400 Кб всего)


Задать вопрос