Обновить
2K+
48
Alex Gusev@flancer

Я кодирую, потому что я кодирую…

99
Подписчики
Отправить сообщение

Вот ещё пример "хорошего использования" LLM для разработки программ. Одноразовых прорамм.

На всё ушло меньше минуты. Это от осознания проблемы и до получения результата.

Как что? Это же "боль"! Настоящая, реальная "боль", за избавление от которой люди готовы платить денег. Вот вам и повод для очередного стартапа :)

Смех смехом, но "джунгли" - этоне только наём, но и много чего всего остального. Рыночная экономика, чего мы хотим! Вот человека поорал, а кто-то услышал. Или не услышал - как повезло. Но тут уже 20+ плюсисков у публикации - значит "болит". Не факт, что вылечат, но хотя бы попытаются. А может ещё больше "залечат" и станет ещё хуже.

Просто, если даже не орать, пусть и в подушку, то не изменится вообще ничего.

Хорошая публикация (y) Браузер уже достаточно давно стоит рассматривать, как интернет-ОС. Пытались делать ChromeOS, но по факту любой браузер уже является операционной системой для выполнения распределённых приложений. Только мы его по инерции воспринимаем, как просмотрщик веб-страничек, хотя AJAX (SPA) появился 20 лет назад, а PWA - десять. Но всё равно - "открыть страничку". Хотя сейчас на "страничке" иногда кода больше, чем текста.

Для автоматизации действий в браузере - например, валидация вводимых пользователем данных. С этого всё и началось, в общем-то - с кастомизации реакции веб-страницы на действия пользователя. Без какого-либо ЯП этого достичь невозможно в принципе. Предложили LiveScript, который затем стал JavaScript. И понеслось...

Все "странности" JS, начиная с EventLoop, они отсюда - из веб-страницы. Ну и в nodejs перекочевали.

Спасибо за корректный ответ на не очень корректный коммент :)

Я сейчас в фазе анализа различных стилей подачи информации в публикациях. Отметил для себя "простыню текста" и момент пропажи удержания (когда интерес меня, как читателя, сменяется пониманием, что за извлечение смыслов придётся побороться). Где-то после 2-4 абзацев после введения. Я пытаюсь найти схему изложения материала (знаний), которая бы позволяла эффективно доносить информацию до интересующейся аудитории и не привлекать внимание остальной публики. Пока что у меня 4 стадии вырисовывается: зацепление - резонанс - раскрытие - осознание. Вы меня зацепили, я поймал резонанс с материалом, но на стадии "раскрытия" я посыпался и интерес затух. Просто рефлексирую публично. Это и есть "осознание", правда не вашего материала, а своего :)

В любом случае - спасибо за публикацию, позеленил. Ведь совсем не важно, про что написана статья, которая заставила тебя подумать ;)

Респект вам за целеустремлённость!! Я после пары абзацев после вступления начал сканировать со всё возрастающей скоростью и интересом - сколько ж автор букофф написал. Оказалось, что почти 150К!!

Как я понял, Василий написал книгу, вкратце пересказав в ней свой опыт общения с GPT, а эта публикация вкратце пересказала книгу Василия. Если все пересказы ужать до пары слов, то получится заголовок публикации - "Противоречивость нейропсихоза". Наверное, на нём и стоило мне остановиться.

А какие такие "готовые библиотеки" использует наше с чатиком приложение, а?

Вот это зависимости бэка, где "сервис с бекэндом из аж 4 классов":

  "dependencies": {
    "@teqfw/di": "^1.0.2",
    "dotenv": "^17.2.3",
    "lucide-static": "^0.553.0",
    "ws": "^8.18.3"
  }

А это вообще весь код фронта:

Одна внешняя зависимость на мой собственный DI
Одна внешняя зависимость на мой собственный DI

Ваши комментарии говорят о том, что код вы не увидели, даже если и посмотрели :)

А наша, например, бизнес-аппа легко за 100'000 непустых LOC перехлёстывает.

В Magento, например, под 2М строк кода без учёта расширений. И что? Я её кроил и переделывал под свои нужды, благо она под это заточена была.

Если ты понимаешь, как управлять табуном из 10 лошадей, ты понимаешь, как управлять любым табуном.

Я лет 8, как интегратор, копался в "кишках" Magento (и первой, и второй) - вот там мне это смирение пригодилось на все 100%.

И, это... я ни в коей мере не считаю "Magento" поделкой, если что. Это очень сложный продукт в инженерном смысле. Код в двойке был ужасен с точки зрения перфекциониста, но в археологическом плане он был изумительно любопытен. Такого нагромождения архитектурных стилей и разных подходов в одном продукте я не видел нигде. А ещё огромный зоопарк расширений, где у каждого были свои тараканы в голове! И тем не менее - она работала и работает! Удивительный в инженерном смысле продукт! Со своей замечательной философией.

Ну нет, это вряд ли. Тут как раз весь смысл в неформальности и неявности. Модели улавливают связи, невыраженные формально. Если всё формализовать, то это как Java в JS перегонять в GWT. Это уже есть.

Я вам показал. Видеть или нет - ваше дело. Лошадь можно привести к водопою...

Точно! Я вот пытаюсь тут сказать, что нынешние исходники - это вчерашние бинарники. И отношение к ним будет такое же: что-то там есть и хорошо. А код будет другой - спецификации для LLM. Вот их мы и будем править. Ну вот, кто-то тоже понял!!

Ну, и вишенкой на торте - агент в браузерном приложении использует мою собственную библиотеку для внедрения зависимостей @teqfw/di. Про которую он при обучении вряд ли что-то мог сильно много узнать. Тем не менее, код в web/app написан на чистом JS и не содержит статических импортов:

import'ы есть только в карте типов для VSCode
import'ы есть только в карте типов для VSCode

Вот тут - да, пришлось заборчиков понаставить, чтобы агент с темы не съезжал. Но в результате JS-код работает в браузере без транспиляции и сборок - as-is.

Я же говорю, управляемы и повторяемы в определённых границах.

Вы просто про PWA и WebRTC мало чего знаете, поэтому полезли на бэк. Так-то, в этом приложении вся логика в браузере. Вот список файлов фронта:

Скрытый текст
./web/app.js
./web/service-worker.js
./web/app/types.d.js
./web/app/Media/Manager.mjs
./web/app/Media/Monitor.mjs
./web/app/App.mjs
./web/app/Rtc/Peer.mjs
./web/app/VersionWatcher.mjs
./web/app/Config/RemoteLogging.mjs
./web/app/Net/Signal/Client.mjs
./web/app/Net/Signal/Orchestrator.mjs
./web/app/Net/Session/Manager.mjs
./web/app/Ui/Screen/Home.mjs
./web/app/Ui/Screen/End.mjs
./web/app/Ui/Screen/Call.mjs
./web/app/Ui/Screen/Settings.mjs
./web/app/Ui/Screen/NotFound.mjs
./web/app/Ui/Router/Config.mjs
./web/app/Ui/Toast.mjs
./web/app/Ui/Flow.mjs
./web/app/Ui/Router.mjs
./web/app/Ui/Templates/Loader.mjs
./web/app/Ui/ShareLinkService.mjs
./web/app/Pwa/Cache.mjs
./web/app/Pwa/ServiceWorker.mjs
./web/app/State/Media.mjs
./web/app/State/Machine.mjs
./web/app/Logger.mjs
./web/app/Env/Provider.mjs
./web/manifest.json
./web/AGENTS.md
./web/assets/icons/menu.svg
./web/assets/icons/phone.svg
./web/assets/icons/settings.svg
./web/assets/icons/help-circle.svg
./web/assets/icons/mic.svg
./web/assets/icons/icon-512.svg
./web/assets/icons/link.svg
./web/assets/icons/share.svg
./web/assets/icons/circle-check.svg
./web/assets/icons/refresh-ccw.svg
./web/assets/icons/mic-off.svg
./web/assets/icons/camera-off.svg
./web/assets/icons/AGENTS.md
./web/assets/icons/cable.svg
./web/assets/icons/close.svg
./web/assets/icons/video.svg
./web/assets/icons/camera.svg
./web/assets/icons/trash-2.svg
./web/assets/icons/rss.svg
./web/assets/icons/return-home.svg
./web/assets/icons/alert-triangle.svg
./web/assets/icons/icon-192.svg
./web/assets/icons/copy.svg
./web/assets/icons/slash.svg
./web/ui/component/icon-wrapper.css
./web/ui/component/header-action-button.css
./web/ui/component/icon-wrapper.js
./web/ui/component/AGENTS.md
./web/ui/component/screen-card.js
./web/ui/component/components.js
./web/ui/component/screen-note.css
./web/ui/component/screen-note.js
./web/ui/component/screen-header.js
./web/ui/component/header-action-button.js
./web/ui/component/screen-card.css
./web/ui/component/screen-header.css
./web/ui/component/big-button.js
./web/ui/component/big-button.css
./web/ui/style/toast.css
./web/ui/style/tokens.css
./web/ui/style/reset.css
./web/ui/style/layout.css
./web/ui/screen/settings.html
./web/ui/screen/home.css
./web/ui/screen/home.html
./web/ui/screen/call.css
./web/ui/screen/AGENTS.md
./web/ui/screen/settings.css
./web/ui/screen/call.html
./web/ui/screen/not-found.html
./web/ui/screen/not-found.css
./web/ui/screen/end.html
./web/ui/style.css
./web/reinstall.html
./web/index.html
./web/version.json

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

Вы пытаетесь отвёрткой заколачивать гвозди и говорите, что получается плохо.

Да, отвёрткой гвозди заколачивать плохо. Согласен.

Знаете, что хорошо делать с LLM? Попросить её по скрину с фрагментом XML-файла написать скрипт для подсчёта количества позиций определённого узла в этом XML-файле. Причём сам файл на 110М, его даже не каждый viewer с полпинка откроет, а клиент висит на связи и вы пытаетесь понять, почему у него экспорт не прошёл и на чьей стороне проблемы. Запрос к чатику, пара итераций с уточнениями и через несколько минут ответ есть - 280К+ позиций и проблемы не на нашей стороне. Всё это - не прерывая общения с клиентом.

Одноразовые приложения - вот конёк LLM.

Ну смотрите, для меня LLM вполне себе повторяемы и управляемы. Я себе уже это доказал (см. коммент выше). Я теперь щупаю границы управляемости и повторяемости.

Но другим я ничего доказывать не хочу - нервное это занятие. Я просто показываю. Вот сервис, который я писал через LLM - GPT + Codex. Там много больше "Hello, World!" - PWA, сигнальный сервер на web-сокетах, WebRTC. История отношений агента со мной есть. Сервис живой, можно пробовать.

Это не железобетонное доказательство, кое-что я там правил ручками. Но старался по-минимуму.

А так пусть каждый сам себе решает, насколько LLM (не)повторяемы и (не)управляемы. Я, например, на моноколесе ездить в принципе не собираюсь - убьюсь в первый же день. А другие - ничего, рассекают.

Ну, температуру можно "выкрутить в ноль", а если ещй и зафиксировать seed - то вот и повторяемость. Случайность в основы внесли специально, чтобы убрать детерминированность. А иначе это сильно смахивало на Большую Британскую Энциклопедию, а не на ИИ.

Но даже без этого повторяемость можно очень сильно усилить за счёт работы с контекстом. Вот пример из моей же публикации (см. Сходимость "вычислений"):

Плотность и согласованность контекста уменьшает "свободу выбора" Модели. Сравните запросы:

  • Сколько будет два в пятой степени?

  • Сколько будет два в пятой степени? Ответ дай одним числом.

  • Сколько будет два в пятой степени? Ответ дай одним числом. Только число и ничего более, это важно.

И что вас заставило запостить 4+ тыс. комментариев на "форуме для недотыкомок"? Я за 10+ лет в два раза меньше комментов настрочил, чем вы за два с небольшим года. Причём я-то свои комменты делал на техническом форуме для айтишников, а вы - на форуме для недотыкомок.

Не мучали бы вы себя здесь. Шли бы на форум профессионалов, соответствующих вашему осознанию вашего уровня.

Я хотел провести аналогию, что, когда вы программируете на языке высокого уровня, вы не лезете в бинарники, доверя компилятору, т.к. он уже доказал свою "повторяемость и управляемость".

Аналогично, когда LLM докажут свою "повторяемость и управляемость", вы сможете формировать когнитивный контекст приложения, по которому агенты будут "что-то там генерировать". Весь вопрос в том, в каких рамках LLM "повторяемы и управляемы"? Достаточно ли этих рамок для генерации чего-то более сложного, чем "Hello, World!"?

У уверен, что LLM достаточно управляемы и повторяемы в определённых рамках (см. "сужающийся и расширяющийся контекст" по ссылке выше). Тепрь пытаюсь понять, где границы и что можно сделать в этих рамках.

Если бы вы были берёзовым поленом, вы бы не писали комменты на Хабре и не получили бы обратную связь от меня. А так, получилось, как получилось, именно потому, что вы - это вы и никто другой. Вот при этом тут ad hominem. Я всем разное пишу, так-то. Кто на что наговорил.

Информация

В рейтинге
5 338-й
Откуда
Рига, Латвия, Латвия
Дата рождения
Зарегистрирован
Активность

Специализация

Фулстек разработчик
Ведущий
От 3 000 €
JavaScript
HTML
CSS
Node.js
Vue.js
Веб-разработка
Progressive Web Apps
PostgreSQL
MySQL
GitHub