Здесь уже была заметка про концепцию Software 2.0 от Andrej Karpathy и теперь он снова рассказывает о развитии программного обеспечения в сторону Software 3.0.
В концепции Андрея Карпаты: Software 1.0 — это традиционный код, Software 2.0 — это нейронные сети (веса которых «программируются» данными), а Software 3.0 — это большие языковые модели (БЯМ, LLM), которые программируются при помощи инструкций (промптов) на естественным языке.
В этой эволюции ПО, LLM — играют роль операционной системы. При этом, в этой аналогии — сейчас 1960-е годы, когда LLM (вычисления) дороги и централизованы (в облаке), а взаимодействие с LLM осуществляется через текстовый интерфейс (терминал) и пока не имеет графической оболочки (GUI).
Однако, использование LLM требует учёта их «психологии» и особенностей. LLM — это стохастические «симуляции людей» (обучение на огромных объёмах текста, придаёт им «человекоподобную психологию»). При этом, хотя LLM могут демонстрировать суперспособности в обладании энциклопедическими знаниями и памятью (подобно саванту из фильма «Человек дождя»), но они же демонстрируют различные примеры когнитивного дефицита: галлюцинации (LLM часто «выдумывают» информацию) и совершают элементарные ошибки (например, утверждают, что 9.11 больше, 9.9 или неправильно считают число букв «r»в слове «strawberry»).
Самый главный недостаток текущих БЯМ — это то, что они не обучаются в процессе работы и не приобретают новые знания. Каждое взаимодействие с ними — начинается «с чистого листа» в рамках контекстного окна, которое работает как «рабочая память» модели.
Так же, БЯМ уязвимы: они доверчивы и подвержены атакам типа «prompt injection».
Уже сейчас наблюдается переход от прямого взаимодействия с БЯМ к их использованию внутри приложений (например, Cursor (для программирования) или Perplexity (для поиска информации)).
Ключевые свойства LLM-приложений: управление контекстом, оркестрация множественных вызовов LLM (используются различные модели для разных задач).
Крайне важен специфический интерфейс (GUI), который позволяет понимать и взаимодействовать с выходными данными LLM (например, в Cursor — это просмотр различий в коде, выделяемый красным/зелёным).
Концепция «Слайдер автономности» (Autonomy Slider) — возможность регулировать степень автономности, которую пользователь предоставляет LLM (от простых дополнений до полной агентности (например, автодополнение, изменение фрагмента кода, изменение файла, изменение всего репозитория)).
Взаимодействие человека с БЯМ происходит в цикле генерации-верификации, где ИИ генерирует, а человек верифицирует. При этом, учитывая особенности работы БЯМ — важно «держать ИИ на поводке» (keep AI on the leash), чтобы избегать слишком больших, неконтролируемых выводов (например, тысяч строк кода), которые человек просто не сможет быстро проверить. Поэтом, нужно работать с небольшими, инкрементальными изменениями.
«Вайб-кодинг» (Vibe Coding) — позволяет непрограммистам создавать базовые приложения с помощью естественного языка и LLM, без необходимости глубокого изучения синтаксиса языка программирования. Возможно, станет распространённым путём разработки программного обеспечения для нового поколения.
БЯМ — это новый «потребитель» информации. Помимо людей (через GUI) и компьютеров (через API), теперь есть агенты (LLM), которым необходимо взаимодействовать с цифровой инфраструктурой (lm.txt — аналог robots.txt для LLM, предоставляющий машиночитаемую информацию о домене (например, в Markdown)).
Таким образом, сфера программного обеспечения переживает революцию, переходя от ручного программирования к программированию через данные а, теперь, к программированию на естественном языке с помощью LLM. Однако, несмотря на быстрый прогресс, достижение полной автономии в программном обеспечении (как и в беспилотных автомобилях) займет ещё продолжительное время и поэтому акцент должен быть сделан на инструментах, которые усиливают человека, а не полностью его заменяют.
По теме