{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Блог Михаила Озорнина: заметки с тегом ИИ",
    "_rss_description": "Главная · Блог · Работы ·",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/mikeozornin.ru\/blog\/tags\/ii\/",
    "feed_url": "https:\/\/mikeozornin.ru\/blog\/tags\/ii\/json\/",
    "icon": "https:\/\/mikeozornin.ru\/blog\/user\/userpic@2x.jpg?1614204384",
    "author": {
        "name": "Михаил Озорнин",
        "url": "https:\/\/mikeozornin.ru\/blog\/",
        "avatar": "https:\/\/mikeozornin.ru\/blog\/user\/userpic@2x.jpg?1614204384"
    },
    "items": [
        {
            "id": "220",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/ai-native-software\/",
            "title": "ИИ-нативные продукты",
            "content_html": "<p class=\"lead\">Рассуждаю, что важно учесть при разработке сложного софтверного продукта сейчас, чтобы он остался актуальным через год или два<\/p>\n<p>Мир софта меняется и скоро поменяется совсем. Да, я про ИИ и ЛЛМ в частности. Многие компании не пережили прошлую мобильную революцию (вспомните про нокию). Я размышляю как нам пережить эту. Поэтому, я хочу поразмышлять, что значит  «ии-нативные продукты».<\/p>\n<p>Я говорю не про конкретные ии-фичи, не про пресловутого бота, который отвечает мимо и невпопад, а скорее про общее ощущение от продуктов. Я говорю про по сути набор нефункциональных требований, касающихся ИИ, которые могут быть применимы ко всем нашим продуктам. Как сделать продукт, который:<\/p>\n<ul>\n<li>будет актуальным в среде агентов, а не людей,<\/li>\n<li>сам будет таким, что в нем агент станет полноценным пользователем и субъектом наряду с человеком<\/li>\n<\/ul>\n<p>Особенно это важно тем, кто поставляет продукты в он премис, там делают продукт не на месяц вперед. Пока спроектируют, пока разработают, пока клиенты обновятся. Продукт делается сейчас, а клиенты будут пользоваться ими через год.<\/p>\n<p>Хочется сейчас угадать и сделать что-то, что за год-два не потеряет своей актуальности.<\/p>\n<p>Для контекста: почти год назад, в конце февраля, вышел Сонет 3.7. Сонетом 3.7 уже можно было пользоваться, он мог уверенно написать работающий файл. Ну может несколько файлов. Но он не был настолько автономным как Опус 4.6 или ГПТ 5.4.<\/p>\n<p>Для контекста: стоимость решения одной и той же задачи с помощью ЛЛМ падает в 10 раз каждый год.<\/p>\n<p>Вот что мне приходит в голову ↓<\/p>\n<h2>1. Не оптимизировать human-only-сценарии<\/h2>\n<p>Я бы не вкладывался в долгую разработку удобного интерфейса работы оператора и решения им тех задач, которые он в целом решать не должен. Я бы подумал перед тем как тратить сейчас не одну сотню человеко-часов только на фронте.<\/p>\n<ul>\n<li>Хорошо: сделать графический редактор сценариев в стиле н8, но быстро.<\/li>\n<li>Не стал бы: тратить 500 человеко-часов на конструктор сценариев, хотя за 100 часов можно было бы сделать написание тех же сценариев из войса в телеграме.<\/li>\n<\/ul>\n<h2>2. Удобный, ии-нативный интерфейс<\/h2>\n<p>Я бы в целом ожидал возврата к основам линукосовой концепции «всё — это файл» и концепции компонуемости из юникс-утилит — программы как атомарные небольшим программам, результаты которых можно цеплять друг к другу через пайп и с унифицируемым интерфейсом ввода (текст) и вывода (текст).<\/p>\n<p><aside class=\"aside-margin-right\">См. в тему <a href=\"https:\/\/cursor.com\/blog\/dynamic-context-discovery#1-turning-long-tool-responses-into-files\">cursor.com\/blog\/dynamic-context-discovery<\/a><\/aside><\/p>\n<p>Я не говорю именно про терминал и текст, но идея компонуемости, как мне кажется, станет более актуальной.<\/p>\n<p>Интерфейс программ должен быть стандартный и максимально дружелюбный для агентов: rest api, терминальные команды, стандартный протокол.<\/p>\n<ul>\n<li>Хорошо: консольный cdk для прогона тестов<\/li>\n<li>Не стал бы: gui-программа для прогона тестов, которая еще работает только для Виндоуза.<\/li>\n<\/ul>\n<p>Я говорю про достаточно общие протоколы, не обязательно про МПЦ. Я не удивлюсь, если через год агенты научатся работать с любыми апи по опенапи-спеке и мы забудем врапперы типа МПЦ, как тупиковую ветвь эволюции.<\/p>\n<h2>3. Агент должен уметь разобраться по доке<\/h2>\n<p>Если доки недостаточно, чтобы агент разобрался — дока не очень. Если для интеграции продукта с телеграмом недостаточно дать доку агенту и отправить делать, значит дока не очень понятная или подробная. Если агент не может запустить дев-стенд вашего продукта по доке за один промт — у вас что-то не так.<\/p>\n<p>Сама дока должна быть доступна в агент-френдли формате: сервер-сайд-рендеринг, llm.txt или agents.md, доступность из курла. Никаких реакт-сайтов, которые требуют браузера. Да, агенты уже умеют читать и такое, но зачем усложнять им жизнь.<\/p>\n<h2>4. Стандартные форматы хранения, языки и протоколы<\/h2>\n<p>Я бы до последнего откладывал придумывание своих кастомных DSL, а попытался бы найти распространенный язык для задачи. Даже если бы он подходил всего лишь на 50%. Я понимаю, что ллм выучит и чужой незнакомый DSL. Но я не специалист и кажется, что лучше бы, чтобы не учила. Наша выучит, другая не станет.<\/p>\n<h2>5. Собирать из всего, что можно собрать, датасеты<\/h2>\n<p>В каждой фиче думать, какие данные нужно собрать и сохранить. С клиентов: метрики, сценарии действий, телеметрию. С нас самих: сохранять треки работы внутренних пользователей, записи всех митингов и обсуждений, все код-ревью, тикеты в саппорте, вопросы в чатах и поисковые запросы на портале хелпа.<\/p>\n<p>Контекст менеджмент — 50% самого важного в контексте именно написания продукта (вторые 50% — харнес). И поэтому не удивительно, что Ноушен и Линеар сделали своих агентов, у них внутри столько контекста по компании, что зашатаешься.<\/p>\n<h2>6. Не замыкаться в текущих ограничениях<\/h2>\n<p>Стоит рассчитывать, что через 2-3 года контекстное окно вырастет так, что можно будет отправлять туда 5 миллионов токенов (давайте представим, что я — футурист). Т. е. в окно контекста целиком влезут те данные, для которых сейчас нужно делать сложные система РАГ.<\/p>\n<h2>7. Агенты — first class citizens<\/h2>\n<p>При реализации каждой фичи нужно начать думать: а какие тулы и апишки нужно в рамках фичи заэкспоузить наружу для будущие агентов, и тратить на это время не по остаточному принципу, а так, чтобы агенты были first class citizen.<\/p>\n<p>Если функция доступна человеку, но недоступна агенту — мы сделали что-то не так.<\/p>\n<h2>8. Безопасность всего этого<\/h2>\n<p>Придется подумать, как не сделать с агентским продуктом с невероятно широким контектом хуже, чем без него вообще. В какой-то момент в защите инфраструктуры возник zero trust (когда пропал периметр и всё стало периметром), так же и тут нужно будет делать zero trust 2.0.<\/p>\n<p>Как минимум нужны будут:<\/p>\n<ul>\n<li>границы применимости: разделение на задачи, где норм принять решение агенту и на те, где обязателен человек;<\/li>\n<li>трассировка источников: откуда агент взял вывод и как к нему пришел,<\/li>\n<li>аудит: что он сделал и почему;<\/li>\n<li>replayability: можно ли воспроизвести решение агента потом при разборе инцидента.<\/li>\n<\/ul>\n<h2>9. Как встроить ии в feedback loop работы продукта<\/h2>\n<p>Хочется как-то перенести ответственность за контекст с человека на агента. Не оператор должен думать какие данные передать агенту, а агент должен у себя иметь инструменты self discovery и data retrival, пусть сам подумает, что ему надо.<\/p>\n<p>Сейчас хорошо работает сказать агенту «задай мне вопросы, которые помогут тебе хорошо решить задачу», хочется что-то аналогичное.<\/p>\n<h2>10. Самим заставлять себя решать задачи ллмками и агентами<\/h2>\n<p>Самим пытаться становиться ии-нативными, даже если прямо сейчас так медленнее. Например, договориться, в командах, что все лоу-баги чинятся только ЛЛМкой, никакой код нельзя для этого писать руками.<\/p>\n<p>Случайно вышло 10 пунктов, ну и хорошо.<\/p>\n<p>Если вдруг у кого есть, прости господи, подкаст, можем поговорить про это.<\/p>\n",
            "date_published": "2026-04-06T10:34:36+03:00",
            "date_modified": "2026-04-06T13:45:05+03:00",
            "_date_published_rfc2822": "Mon, 06 Apr 2026 10:34:36 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "220",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "215",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/reflection-is-more-important\/",
            "title": "Важность рефлексии растет",
            "content_html": "<p>На пост меня натолкнула рабочая ситуация: Я написал (будем честны, попросил ллм написать) один скрипт, и некоторые коллеги прореагировали «о, давно о таком мечтаю». И у меня в голове щелкнуло.<\/p>\n<p><aside class=\"aside-margin-right\">Когда я сейчас написал про один промт, я не утрировал, это был реально один промт.<\/span><\/aside><\/p>\n<p>Сейчас простые задачи решаются ллмками достаточно хорошо. Ядро линукса они все еще не напишут, но пропарсить все ресурсные файлы проекта, сгруппировать одинаковые строчки и дать к ним мгновенный поиск — это задача на один промт. И все, что удерживает людей сейчас, от того, что некоторая часть их задач начнет быть проще — рефлексия. Все что нужно — остановиться, и заметить момент «ага, я тут хочу упрощение, которое возможно реально»).<\/p>\n<p>И если раньше рефлексия не всегда помогала, например:<\/p>\n<ul>\n<li>Понял, что занимается рутиной, но невозможно понять, что рутина автоматизируема.<\/li>\n<li>Понял, что занимается рутиной, пошел узнать, автоматизируема ли она, ИТ-служба сказала «не существует технической возможности».<\/li>\n<li>Понял, что занимается рутинной автоматизированной задачей, понял, что автоматизируема, а питониста рядом нет.<\/li>\n<li>Понял, что занимается рутинной автоматизированной задачей, понял, что автоматизируема, а питонист рядом занят.<\/li>\n<li>Понял, что занимается рутинной автоматизированной задачей, понял, что автоматизируема, сходил в ИТ, питониста нашли, они задачу взяли, то на Q3 2027 года, потому что есть более важные.<\/li>\n<\/ul>\n<p>Сейчас ситуация сильно меняется.<\/p>\n<ul>\n<li>Понял, что занимается рутинной автоматизированной задачей, потратил один-два промта и, возможно, получил решение.<br \/>\nВозможно решения не получил, но и потратить 10 минут как будто не так и долго. Время на созвон со знакомым питонистом будете в календаре выбирать дольше.<\/li>\n<\/ul>\n<p>Нас всегда учили, что идея не стоит ничего. В целом идея все так же стоит ничего, но иногда — чуть больше, чем ничего, если есть ллмка.<\/p>\n",
            "date_published": "2026-01-26T10:34:56+03:00",
            "date_modified": "2026-01-26T01:00:13+03:00",
            "_date_published_rfc2822": "Mon, 26 Jan 2026 10:34:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "215",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "213",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/ai-design\/",
            "title": "ИИ-дизайн",
            "content_html": "<p class=\"lead\">Я задал один и тот же промт нескольким моделям и вот что вышло<\/p>\n<h2>Промт<\/h2>\n<pre class=\"e2-text-code\"><code class=\"\">Прочитай @\/llm\/PRD.md и сверстай статическую html-страницу about. Укажи в ней все преимущества, придумай как их проиллюстрировать, используй модный современный дизайн\r\n\r\nСохрани в файл about-page\/{model-name}.html\r\n\r\nОриентируйся только на prd, не используй about-страницу.<\/code><\/pre><p>Эксперимент проведен в декабре 2025-январе 2026. Использовался openrouter или облака ллммок. В скриншотах могут быть небольшие артефакты, скриншоты снимал плейрайт, он не умеет в стики-позиции.<\/p>\n<p>Для сравнения дизайн кожаного мешка (меня): <a href=\"https:\/\/recipe-scaler.ru\/#\/about\">https:\/\/recipe-scaler.ru\/#\/about<\/a><\/p>\n<h2>Gemini 3 pro<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/gemini-3-pro@2x.png\" width=\"1344\" height=\"3283\" alt=\"\" \/>\n<\/div>\n<h2>Grok code fast 1<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/grok.code-fast-1@2x.png\" width=\"1280\" height=\"4044\" alt=\"\" \/>\n<\/div>\n<h2>Minimax 2.1<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-1@2x.png\" width=\"1280\" height=\"2359\" alt=\"\" \/>\n<\/div>\n<h2>Minimax 2.1<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-2@2x.png\" width=\"1280\" height=\"9523\" alt=\"\" \/>\n<\/div>\n<h2>Minimax 2.1<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-3@2x.png\" width=\"1280\" height=\"11107\" alt=\"\" \/>\n<\/div>\n<h2>Minimax 2.1<\/h2>\n<p>Тут я просил швейцарский стиль<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-4@2x.png\" width=\"1280\" height=\"3501\" alt=\"\" \/>\n<\/div>\n<h2>Minimax 2.1<\/h2>\n<p>Тут я просил брутализм<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-5@2x.png\" width=\"1280\" height=\"3169\" alt=\"\" \/>\n<\/div>\n<h2>Opus 4.5<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/opus-4.5-1@2x.png\" width=\"1280\" height=\"7191\" alt=\"\" \/>\n<\/div>\n<h2>Opus 4.5<\/h2>\n<p>Тут я просил брутализм<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/opus-4.5-2@2x.png\" width=\"1280\" height=\"6154\" alt=\"\" \/>\n<\/div>\n<h2>Swe 1.5<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/swe-1.5-1@2x.png\" width=\"1280\" height=\"2923\" alt=\"\" \/>\n<\/div>\n<h2>Swe 1.5<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/swe-1.5-2@2x.png\" width=\"1280\" height=\"4061\" alt=\"\" \/>\n<\/div>\n<h2>Yandex assistant 2026-01-20<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/yandex-assistant-2026-01-20@2x.png\" width=\"1280\" height=\"2635\" alt=\"\" \/>\n<\/div>\n<h2>Zai GLM-4.7<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/zai-4.7-3@2x.png\" width=\"1954\" height=\"3319\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2026-01-20T20:45:35+03:00",
            "date_modified": "2026-01-20T20:45:55+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/gemini-3-pro@2x.png",
            "_date_published_rfc2822": "Tue, 20 Jan 2026 20:45:35 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "213",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/gemini-3-pro@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/grok.code-fast-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-3@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-4@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-5@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/opus-4.5-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/opus-4.5-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/swe-1.5-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/swe-1.5-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/yandex-assistant-2026-01-20@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/zai-4.7-3@2x.png"
                ]
            }
        },
        {
            "id": "212",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/claude-code-and-stupid-questions\/",
            "title": "Псевдозабота Клод Кода",
            "content_html": "<p>Клод код (Claude Code) заботится обо мне и показывает команды на согласования, к сожалению, он делает это <s>без уважения<\/s> плохо.<\/p>\n<p>Посмотрите на этот апрув:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/claude-code-1@2x.png\" width=\"741\" height=\"298\" alt=\"\" \/>\n<\/div>\n<p>Выполняет трехстрочную шелл-команду с вложенными конструкциями: циклы, условия. Если там где-то будет какая-то ошибка, я её просто не замечу.<\/p>\n<p>Я не специально выбирал, что скриншотить, они все такие:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/claude-code-2@2x.png\" width=\"685\" height=\"303\" alt=\"\" \/>\n<\/div>\n<p>У меня остается два варианта:<\/p>\n<ul>\n<li>Как мартышка жать и жать на кнопку «Approve». В итоге вырабатывается привычка, которая не даст мне себя защититить в опасной ситуации. См. принцип «подтверждения не работают».<\/li>\n<li>Один раз апрувнуть тоже не выйдет, потому что эта <i>конкретная<\/i> трехэтажная команда вряд ли когда-нибудь появится.<\/li>\n<li>Согласитья на YOLO (You Only Live Once) режим и разрешить ему делать все, что угодно, даже  <i>rm -rf <\/i>\/<\/li>\n<\/ul>\n<p>Оба варианта, как вы понимаете, плохие.<\/p>\n<p><b>Как надо<\/b><\/p>\n<p>Клод код должен выдавать ЛЛМ понятные инструменты к файлам: прочитать, изменить, и т. д. ЛЛМ должна не грепать файлы, а читать их тулами. Тогда клод код с одной стороны сможет не спрашивать никаких разрешений на чтение файлов (разве что на .env), а с другой быть уверенным, что ЛЛМ ничего не сломает своей командой. Тулом чтения ничего сломать нельзя по определению.<\/p>\n<p>Да, это нужно программировать, а греп уже есть. Да, греп более атомарный и гибкий, чем любые придуманные тулы. Да, ЛЛМ точнее сгенерирует команду для грепа, поскольку она на них обучалась. Но блин, апрувить все команды — не решение вовсе.<\/p>\n<p>Понятно, что клод код не увидит мой пост, но вы, когда будете делать ИИ-фичи, не будьте как клод.<\/p>\n",
            "date_published": "2026-01-15T22:01:21+03:00",
            "date_modified": "2026-01-26T16:02:36+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/claude-code-1@2x.png",
            "_date_published_rfc2822": "Thu, 15 Jan 2026 22:01:21 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "212",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/claude-code-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/claude-code-2@2x.png"
                ]
            }
        },
        {
            "id": "210",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/llm-code-review\/",
            "title": "ИИ-ревью кода",
            "content_html": "<p>Делал большую фичу, попросил ревью у ИИ. Попросил найти важные моменты во всех областях: безопасность, логика, деплой, производительность и прочее, и прочее.<\/p>\n<p>Опус 4.5 (лучшая на сейчас ЛЛМ в мире) написал:<\/p>\n<ul>\n<li>Критикал sql-инъекция. Как оказалось: пользователь сам себе после всех входов и разрешений на свой же запрос получит чуть больше своих же результатов.<\/li>\n<\/ul>\n<p>Опус не написал:<\/p>\n<ul>\n<li>Конфиг nginx забыли поправить и ничего не будет работать в целом.<\/li>\n<li>Сервис-воркер (фоновый код в браузерном приложении) блокировал работу новой вещи, перехватывая все обращения на себя.<\/li>\n<li>Кеширование oauth-запросов было настроено некорректно.<\/li>\n<li>Часовые пояса неправильные, посему токен не имел шансов подойти.<\/li>\n<li>Некоторые адреса обрабатываются неправильно и тоже работать не будет.<\/li>\n<\/ul>\n<p>Я прямо чую, что когда кто-то решит проблему нормального ревью (а не как вот такое атомарное) это будет большой шаг в разработке.<\/p>\n<p>Не говорю, что текущее бесполезно. Но пока это на уровне «к пуговицам претензии есть?»<\/p>\n",
            "date_published": "2026-01-11T16:01:45+03:00",
            "date_modified": "2026-01-11T16:04:20+03:00",
            "_date_published_rfc2822": "Sun, 11 Jan 2026 16:01:45 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "210",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "209",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/vibe-coding-as-a-slot-machine\/",
            "title": "Вайб-кодинг, дофамин и слот-машины",
            "content_html": "<p class=\"lead\">Осознал недавно, чем вайб-кодинг в его классическом виде похож на лудоманию и при чем тут дофамин<\/p>\n<h2>Что за вайб-кодинг такой<\/h2>\n<p>Давайте сначала начнем с определений. Не каждая разработка с ллмкой — вайб-кодинг, но каждый вайб-кодинг — разработка с помощью ллмки.<\/p>\n<p>Вайб-кодингом я буду называть программирование с помощью ллмки, в котором есть вот такие характеристики:<\/p>\n<ul>\n<li>Мало изначального планирования. Буквально короткое описание, вкинутое в ллмку и потом разберемся походу.<\/li>\n<li>Попытка сразу попасть в нужную конечную точку. Желательно за одну итерацию.<\/li>\n<li>Значительная часть кода написана ллмкой. Человек в целом не читает весь код, не проверяет его, только смотрит на результат. Архитектура придумана тоже ллмкой и в целом какая вышла, такая вышла.<\/li>\n<li>Быстрые итерации, горячая перезагрузка. Сообщение об ошибках в целом не читаются, копипаст в чат, обновление.<\/li>\n<li>Небольшой горизонт планирования. Ощущение щас фичу допилим, разберемся. Похоже на стрельбу трассирующими — и стреляем и одновременно целимся.<\/li>\n<li>Вайб-дебагинг — вместо попыток понять, разобраться, понять причину — промт «почини» × 5 раз. Да, и это иногда срабатывает.<\/li>\n<\/ul>\n<p>Я не говорю, что все это неправильно или плохо. Это просто то, что я бы назвал вайб-кодингом.<\/p>\n<p>Чтобы показать, что не каждая разработка с ллмкой — вайб-кодинг, давайте я попробую описать противоположный полюс. Я бы назвал это LLM assisted development.<\/p>\n<ul>\n<li>Много изначального планирования. К началу первого промта есть достаточно подробный PRD, есть какие-то макеты, схемы взаимодействия, есть выбор технологий, примерная архитектура и схемы данных. Хоть как-то продуманы краевые и хитрые сценарии. Возможно, на отдельные технологические части сделаны прототипы.<\/li>\n<li>Реализация и приемка по частям: планомерная реализация модуля за модулем, планирование именно этого модуля, разработка, приемка, тесты, фиксация. После этого переход к следующему.<\/li>\n<li>Написание части кода самостоятельно или значительное ревью написанного.<\/li>\n<li>Общее ощущение, что ведет человек, ллмка — лишь инструмент. Очень мощный, местами самостоятельный, но инструмент.<\/li>\n<\/ul>\n<p>Вайб-кодингом в силу понятных причин чаще заняты люди, кто сами не умеет программировать, а те, кто умеет, чаще склонны ко второму.<\/p>\n<p class=\"loud\">— Где уже тема поста, Лебовски! Я уже полторы страницы прочитал<\/p>\n<h2>Где здесь слот-машина<\/h2>\n<p>Вот мы подошли к главному. Я осознал, что вайб-кодинг обладает всеми теми же вещами, которые подсаживают слот-машины на дофамин. Я не биолог, проверяйте эту часть.<\/p>\n<p><b>Негарантированная награда<\/b><br \/>\nДофамин же вырабатывается не от самой награды, а от предвкушения награды. Если награда будет всегда, организму такое не нравится. Ему нравится, когда <i>иногда да<\/i>.<\/p>\n<p>Вайб-кодинг в чистом виде такой. Иногда промт сработает, иногда нет. Иногда ллмка уйдет в полную галюцинацию, но потом тем же самым промтом та же самая модель с очищенным и немного расширенным контекстом все за собой же починит.<\/p>\n<p><b>Сверхкороткий цикл<\/b><br \/>\nЦикл действие-реакция (промт-результат) очень короткий, поэтому за несколько минут можно пройти несколько таких циклов. Это очень высокая плотность событий, редко что может создать такой мощный стимул. Именно поэтому слот-машина больше затягивает, чем покер. Покерная партия длится существенно дольше.<\/p>\n<p>Вайб-дебагинг 5 промтов в минуту и копипаст ошибок из консоли — предел такого короткого цикла.<\/p>\n<p><b>Эффект почти-попадания (near-miss effect)<\/b><br \/>\nБывает, что проект совсем не заводится, сыпется на комплияции, а интерфейс взрывается. Но бывает и то, что называется near-miss effect — ну вот-вот, уже почти. Вроде работает, но как-то хитро глючит. В целом ок, но криво сверстано.<\/p>\n<p>Прямо как в слот машине — не все три слота разные, а «ну вот же, две вишенки совпали, а третья не докрутилась всего на один шажок». Конечно, после почти-попадания желание продолжить значительно выше.<\/p>\n<p><b>Всплеск нейромедиаторов при победе<\/b><br \/>\nКогда все в итоге завелось, приложение ЗА-РА-БО-ТА-ЛО вырабатывается огромное количество нейромедиаторов (как и при джекпоте). От адреналина аж пульс может подскочить.<\/p>\n<p><b>Некоторые эмоциональные качели<\/b><br \/>\nИногда ты сделаешь большую штуку за десять минут, а потом два часа будешь пытаться исправить досадный баг. В итоге качаешься между «Я молодец, ллм — лучшее, что есть в программировании» и «Я тупой, ллм ничего не может, зря я все это затеял».<\/p>\n<p><b>Сюрпризы и бонус<\/b><br \/>\nИногда ллмка доставляет и просто бонусы — хоба и отломала те части, которые раньше работали. Это тоже сильные эмоции и некоторые эмоциональные качели: ах ты сволочь ←→ о, я починил.<\/p>\n<p>Могу сказать по себе, что программирование в стиле вайб-кодинга невероятно затягивает. Особенно когда вот-вот уже почти. На это вот-вот уже почти можно сжечь огромное количество времени. Ой, может другая модель сможет. Ой, а давай переформулирую.<\/p>\n<p>Если кодить близко к полюсу максимального вайб-кодинга, то прямо физически начинает ощущаться вот это состояние ажитации — вероятно, именно его чувствуют люди перед слот-машиной.<\/p>\n<p>В целом, не этом все.<\/p>\n<h2>Как же быть<\/h2>\n<p><aside class=\"aside-margin-right\"><span class=\"related-excerpt\">Я не специалист в такой химии. Я мог бы с умным видом копипастнуть разбор Грока про норадреналин и анандамид. Но не буду. Спросите у ллмок<\/span><\/aside><\/p>\n<p>Мне кажется, что выход — программировать так близко к классическому програмированию, как можете. В программировании — состояние потока, фокус, длинные сессии, более медленный и стабильный темп. Уверен, что там совсем другая биохимия и другие нейромедиаторы.<\/p>\n<p><aside class=\"aside-margin-right\"><span class=\"related-excerpt\">«Станьте ежиками» — это из анекдота<\/span><\/aside><\/p>\n<p>Ну а как быть, если кто-то не умеет программировать. Что за «станьте ~ежиками~ программистами» такое. Я понимаю, что легко сказать «читайте написанный ллмкой код», но все умеют. Но так или иначе, у меня есть гипотеза, что если двигаться максимально близко к варианту LLM assisted development, то будет лучше.<\/p>\n<p>Что я бы попробовал:<\/p>\n<ol start=\"1\">\n<li>Начинайте с большого плана — на пару страниц даже для небольшого проекта.<br \/>\nСоберите в голове визуальный дизайн, подумайте про краевые случаи, заранее продумайте деплой. Соберите примеры кода, компонентов, референсы, ссылки на документацию. Опишите те вещи, которые обычно не описываете — адаптив или хоткеи. Вам все равно придется принимать все эти решения. <i>Вы можете принять их спокойно в начале или потом — в ажитации и перед слот-машиной.<\/i><\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Разрабатывайте по частям. Держите в голове общий план, общую картинку, но делайте по этапам, не позволяя ллмке унести вас в сторону лишь потому, что она предложила «Нужло ли адаптивровать для очков виртуальной реальности?». Не так важны сами этапы, сколько нужно ощущение, что вы контролируете ллмку, а не она вас.<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>Возможно через шаблоны ответов лучше убрать вот эти «Отличный вопрос!» и другие восхваления искусственного интеллекта.<\/li>\n<\/ol>\n<p>Способ с большим предварительным планом был единственным доступным еще пару лет назад. Ллмки не умели так хорошо следовать длинному плану, не умели так успешно вызывать тулы для обогащения своего контекста и не умели выполнять действия. Мы были <i>вынуждены<\/i> проектировать сами и могли лишь просить ллмки написать отдельные модули или даже вовсе отдельные функции. А сейчас болт, реплит, лавабл и фигмамейк продвигают идею «Готовое приложение за одно предложение».<\/p>\n<p class=\"loud\">Вместо вывода. Ллмки позволяют нам делать вещи, которые мы бы не смогли без них. Но не разтеребите ими себе мозг, как это делает тикток. Уверен, ничего хорошего в этом не будет.<\/p>\n",
            "date_published": "2025-12-06T01:41:56+03:00",
            "date_modified": "2025-12-08T03:13:09+03:00",
            "_date_published_rfc2822": "Sat, 06 Dec 2025 01:41:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "209",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        }
    ],
    "_e2_version": 3798,
    "_e2_ua_string": "E2 (v3798; Aegea)"
}