April 12

АРХИТЕКТУРА МЫШЛЕНИЯ ИИ: как заставить нейронку работать заметно стабильнее через планирование, рефлексию и правильный контур задач

всех приветствую, я postbless, я являюсь билдером, и хотел бы рассказать вам о архитектуре мышления ИИ, достаточно интересная тема, поэтому приступим.

Почему Нейросети вообще глючат?

Есть иллюзия, которая почти неизбежно возникает при работе с сильными моделями. Пока Claude , GPT или любой другой продвинутый ИИ уверенно пишет, объясняет и рассуждает, кажется, что перед нами почти законченный цифровой интеллект: собранный, логичный, последовательный. Но стоит дать ему задачу чуть сложнее, чуть длиннее, чуть более неоднозначную, и начинают вылезать странности. Он забывает вводные. Путает зависимости. Выдумывает несуществующие API. Уверенно советует то, что сломает проект. Иногда ошибается в вещах, которые джуну кажутся почти очевидными.

Отсюда и главный вопрос: почему даже самые мощные модели ошибаются в простых вещах?

Потому что они не думают как человек.
Они не всегда понимают задачу целиком, не умеют сами по себе нормально отделять важное от второстепенного и часто просто выбирают ответ, который выглядит наиболее вероятным. Если не задать модели понятный порядок работы, она начинает спешить: где-то додумывает, где-то упрощает, где-то выдает уверенный, но не самый точный ответ. Поэтому проблема обычно не в том, что модель “тупая”. Проблема в том, что ей не дали нормальную структуру: сначала понять задачу, потом составить план, потом сделать, потом проверить себя.

Именно в этом месте возникает ключевая мысль всей статьи: проблема ИИ не только в интеллекте модели, а в архитектуре ее работы.

Если говорить совсем просто, нейронка глючит не потому, что она обязательно слабая. Часто она глючит потому, что мы просим ее решать сложную задачу без этапа планирования, без промежуточной фиксации решений и без рефлексии. Мы ожидаем надежности от системы, которой не дали ни плана, ни ограничений.

Как говорил Andrew Ng, несмотря на весь хайп вокруг AI, современные модели все еще очень ограничены по сравнению с человеческим мышлением. И на практике это видно сразу: без нормальной структуры работы нейронка легко начинает ошибаться даже в простых вещах. А теперь что же делать чтобы этого избежать?


Раздел 1. Анатомия мыслительного процесса ИИ

LLM — это статистическое предсказание, а не логический блок

Самое важное, что нужно держать в голове: большая языковая модель не думает так, как думает мы, люди. Ее базовая механика — это предсказание следующего токена. Не следующей великой идеи, не следующего логического вывода, а именно следующего наиболее вероятного фрагмента текста с учетом всего контекста, который был до этого.
Если чуть глубже, это связано с тем, как вообще устроены LLM. Они обучаются не “думать” в человеческом смысле, а предсказывать следующий токен на основе предыдущего контекста. За счет архитектуры transformer модель хорошо улавливает связи внутри текста, паттерны рассуждений, стиль и структуру. Но это все еще не встроенная логика и не механизм проверки фактов. Поэтому нейронка может звучать очень убедительно, даже когда где-то ошибается. Это звучит почти обесценивающе, но на деле именно из этой простой механики и рождается впечатляющая сложность. Когда модель натренирована на гигантском массиве текстов, кода, документации, диалогов и рассуждений, предсказание следующего токена начинает вести себя как нечто, очень похожее на мышление. Но важно подчеркнуть: похожее — не значит реальное.

В этом и заключается корень большинства ошибок. Модель не знает, что такое истина в философском смысле. Она не понимает правильность как инженер понимает правильность архитектуры. Она лишь строит вероятностную траекторию ответа. Если траектория выглядит убедительно, это еще не делает ее надежной.

Есть хорошая формулировка, которую я прочитал в одной книге: убедительность и истинность — это разные свойства высказывания. Для LLM это особенно важно. Она часто умеет звучать разумнее, чем реально проверяет себя.

Отсюда первый практический вывод: не доверяйте красивому ответу только потому, что он красиво звучит.


Контекстное окно vs. внимание

Второй важный момент — это различие между контекстным окном и вниманием.

Многие думают так: если у Клода большое контекстное окно, значит, можно просто закинуть туда весь проект, все логи, всю документацию, пачку RFC, полрепозитория и ждать идеального понимания. На практике это работает хуже, чем хотелось бы.

Контекстное окно — это объем информации, который модель может запоминать и использовать. Но внимание — это то, как она реально распределяет вычислительный фокус внутри этого объема. И вот с вниманием начинается самое интересное. Когда вы скармливаете модели слишком много разного рода материала, вы не усиливаете ее, а часто создаете шум. В результате она либо цепляется за нерелевантные куски, либо размазывает фокус, либо пропускает важные детали для нашего проекта.

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

Если вы работаете с кодом, Claude не нужно показывать весь репозиторий, чтобы поправить одну фичу в конкретном модуле. Ему нужны:

  • релевантные файлы;
  • интерфейсы, с которыми связан модуль;
  • тесты;
  • документация по текущему паттерну реализации;
  • ограничения задачи.

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

Промт как фундамент

Третья опора — системные инструкции. Именно они часто определяют, как Claude будет интерпретировать свою роль: как генератор кода, как критик, как осторожный помощник, как исполнитель, как ревьюер.

Промт — это не магическая формальность вверху диалога. Это фундаментальная рамка поведения нашей модели. Если в системной инструкции зашито, что модель должна сначала исследовать кодовую базу, не делать поспешных выводов, не выдумывать библиотеки и не редактировать файлы без необходимости, качество работы будет заметно выше, чем в режиме ну "кароче сделай мне штуку для хакатона, ты же умный, просто сделай".

Почему это важно? Потому что модель всегда старается угадать, какой тип поведения сейчас наиболее уместен. И промт задает ей высокоуровневую стратегию. По сути, это аналог рабочего темперамента внутри сессии.

Если говорить языком книг о менеджменте и сложных системах, то поведение агента определяется не только его способностями, но и устройством среды, в которой он принимает решения. Для Клода такой средой и является набор системных инструкций и локальных правил проекта.


Раздел 2. Этап планирования

Никакого кода без ТЗ

Запрос «напиши фичу» почти гарантированно ведет к багам. Не потому, что модель обязательно плохая, а потому, что фича без требований — это не задача, а туман.

Когда человек слышит «сделай фичу», он автоматически достраивает требования из опыта, контекста компании, архитектурных норм, ожиданий команды. Модель тоже будет что-то достраивать, но делает это статистически, а не организационно. Она заполняет пробелы наиболее правдоподобными решениями. А правдоподобное решение — это не всегда то, что вам нужно.

Поэтому перед любым действием модели нужен этап формализации. Пусть даже короткой. Но задача должна быть описана через:

  • цель;
  • ограничения;
  • критерии готовности;
  • риски;
  • затронутые части системы.

В инженерной работе это особенно критично. Если не задать рамку, ИИ начинает оптимизировать не то. Может быстро написать код, но не тот код. Может закрыть симптом, но не причину. Может сделать красиво, но вразрез с архитектурой проекта. Герберт Саймон говорил:
"решение почти всегда ограничено тем, как была сформулирована сама задача." Если по простому, то это означает какой вопрос ты задал, такой диапазон ответа ты и получишь.

Chain-of-Thought: заставить модель проговорить шаги

Один из самых полезных паттернов при работе с Claude — заставить его сначала проговорить план действий словами. Не код, а именно логику маршрута.

Идея Chain-of-Thought в прикладном смысле проста: модель работает лучше, когда ей дают право и обязанность развернуть промежуточное рассуждение. Это не столько магия, сколько способ снизить количество скачков через логические ступени.

Например, вместо:

Исправь баг в авторизации

лучше так:

Сначала объясни возможные причины бага, затем предложи пошаговый план проверки, потом определи наиболее вероятную причину и только после этого предлагай исправление.

Что это дает:

  • модель разделяет гипотезы и факты;
  • не прыгает сразу к первой правдоподобной правке;
  • демонстрирует ход мысли;
  • делает решение проверяемым.

Это особенно полезно в коде, потому что самый дорогой баг — не тот, который ИИ не заметил, а тот, который он уверенно починил так, что стало хуже.

Практика: TODO.md или spec.md

Одна из лучших привычек в работе с ИИ над проектом — вести внутри репозитория короткий файл, который играет роль рабочей карты задачи. Это может быть TODO.md, spec.md, task.md, implementation-plan.md — название не так важно. Важно, чтобы файл:

  • фиксировал, что именно надо сделать;
  • описывал границы изменений;
  • перечислял задействованные модули;
  • содержал чеклист шагов;
  • обновлялся по мере продвижения.

Это хорошо работает, потому что важные детали по задаче не теряются в переписке. Чат может разрастись, что-то забудется, что-то смешается с другими сообщениями. А spec.md дает модели понятную точку опоры: что именно нужно сделать, где границы задачи и на что вообще смотреть.

Это невероятно сильный прием. По сути, вы строите для ИИ внешнюю опору.

Например шаблон такого файла может выглядеть так:

Task: Refactor auth session refresh Goal Исправить race condition при одновременном обновлении токена. Constraints - Не ломать текущий API - Не менять контракт фронтенда - Сохранить обратную совместимость Files of Interest - src/auth/session.ts - src/auth/token-store.ts - tests/auth/session.test.ts Plan - [ ] Изучить текущую реализацию refresh - [ ] Найти точку race condition - [ ] Написать тест, воспроизводящий баг - [ ] Исправить логику - [ ] Обновить тесты - [ ] Сделать self-review

Даже такой простой файл уже сильно дисциплинирует работу модели.


Раздел 3. Этап реализации и контроля

Атомарные изменения или же маленькие изменения.

Одна из самых частых ошибок при работе с Claude Code — просить его сделать сразу большой, многослойный, архитектурно значимый кусок работы за один проход. Теоретически это возможно. Практически это почти всегда повышает риск.

Гораздо лучше работают атомарные изменения. То есть маленькие законченные шаги:

  • сначала подготовить тест;
  • потом изменить один модуль;
  • потом обновить интерфейс;
  • потом прогнать проверку;
  • потом сделать следующий шаг.

Почему это важно? Потому что в маленьком изменении легче понять:

  • что именно делает модель;
  • где она ошиблась;
  • какой эффект вызвала правка;
  • как откатиться;
  • как провести ревью.

Если мыслить инженерно, то надежность рождается из локальности изменений. Огромный патч сложнее проверять и человеку, и машине. Маленькие патчи проще объяснить, протестировать и встроить в проект.

Если вы работаете через git, этот же принцип естественно ведет к серии маленьких коммитов. Не обязательно буквально десять коммитов на каждую фичу, но логика верная: лучше история из последовательных, понятных шагов, чем один гигантский коммит, в котором спрятаны и рефакторинг, и багфикс, и новая логика.

TDD: сначала тест, потом код

Для Claude Code тестоориентированный подход — одна из лучших дисциплин.

Потому что тест заставляет модель не просто «что-то придумать», а зафиксировать наблюдаемое поведение системы. Это переводит задачу из режима свободной генерации в режим формальной проверки.

Правильный цикл выглядит так:

  1. Описать ожидаемое поведение.
  2. Попросить Claude написать тест, который это поведение проверяет.
  3. Убедиться, что тест падает.
  4. Только потом просить исправить код так, чтобы тест прошел.
  5. После этого прогнать смежные тесты.

Почему это работает? Потому что модель больше не гадает по описанию, а видит конкретный результат: тест либо проходит, либо нет.

Есть такая фраза: то, что нельзя проверить, слишком рано называть решением.
В работе с иишками это особенно верно.

Пример запроса для Клода:

Не исправляй код сразу. Сначала напиши минимальный тест, который воспроизводит баг. Убедись, что он падает. Затем предложи наименьшее исправление, которое сделает тест зеленым. После этого оцени, не задело ли изменение смежное поведение.

Раздел 4. Рефлексия: Миграционный надзор

Self-Correction

Самое ценное, что можно заставить делать модель после реализации, — это критиковать саму себя. Не в общих словах, а по понятным критериям.

Паттерн выглядит так:

Проверь свой предыдущий ответ на наличие логических несостыковок, архитектурных рисков, лишней сложности и неподтвержденных предположений. Затем предложи улучшенную версию.

Почему это работает? Потому что первая версия ответа почти всегда оптимизирована под правдоподобие, а вторая может быть оптимизирована под качество. ИИ, как ни странно, часто довольно неплохо находит слабые места в своем же решении, если перевести его в режим ревьюера.

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

  • логика;
  • безопасность;
  • производительность;
  • соответствие паттернам проекта;
  • избыточность;

Чем конкретнее критерии, тем полезнее рефлексия.

Review Mode

Очень мощный режим работы с Клодом — попросить его сначала выступить не как исполнитель, а как ревьюер собственного плана.

Например:

Сначала предложи план реализации. Потом отдельно раскритикуй его как senior engineer с точки зрения безопасности, производительности и поддержки в будущем. Только после этой критики предложи доработанный вариант.

В этот момент вы фактически создаете внутри одного инструмента две роли:

  • автора;
  • архитектурного надзора.

Это полезно, потому что у модели меняется рамка задачи. Она перестает просто продолжать свой же текст и начинает искать слабые места. А это уже очень близко к человеческой инженерной практике.

Борьба с галлюцинациями

Одна из самых неприятных особенностей ИИ — уверенное изобретение того, чего нет. Небольшая деталь, несуществующая библиотека, выдуманная функция, устаревший API, «известный паттерн», который на самом деле никем не используется. Все это особенно опасно в коде, потому что звучит правдоподобно.

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

  • npm info package-name
  • поиск по официальной документации
  • чтение package.json
  • поиск по локальному коду
  • проверка импорта в проекте
  • web-поиск по официальным источникам

Правильный промпт здесь выглядит так:

Если ты ссылаешься на библиотеку, команду, API или фреймворк, сначала проверь, что это реально существует и совместимо с нашим стеком. Если подтверждения нет, не подавай это как факт.

Это очень важный сдвиг. Вы приучаете модель не просто отвечать, а помечать уровень уверенности и отделять подтвержденное от предположительного.

Как говорил Талеб: самая опасная ошибка — не незнание, а незнание, замаскированное под уверенность.


Раздел 5. Реализация в Claude Code

1. Инициализация: запуск из корня проекта

Начинать сессию нужно из корня проекта. Это кажется банальностью, но на практике от этого зависит, увидит ли модель структуру репозитория, конфиги, тесты, package-файлы, документацию и сопутствующие артефакты.

Правильный старт задает правильную картину. Наш клодик должен понимать:

  • где находится проект;
  • какой стек используется;
  • как устроены директории;
  • где лежат тесты;
  • где конфигурация сборки;
  • есть ли локальные правила или инструкции.

2. The Feedback Loop

Самый надежный цикл работы с Claude Code выглядит так:

Запрос -> Черновик плана -> Ваше одобрение -> Исполнение -> Тесты -> Рефлексия

Это, по сути, и есть архитектура мышления ИИ в прикладном виде.

Почему этот цикл так хорош:

  • вы не даете модели сразу перепрыгнуть в код;
  • сначала видите ход мысли;
  • можете остановить неверное направление до реализации;
  • заставляете связывать код с тестируемым результатом;
  • добавляете этап архитектурной самопроверки.

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

3. /stats и контроль контекста

Любая длинная сессия с ИИ деградирует, если не следить за объемом и качеством контекста. Даже сильная модель начинает хуже держать нить, если диалог разрастается, в нем появляется много промежуточных утверждений, старых версий решений, противоречащих указаний и лишнего шума.

Поэтому полезно следить за состоянием сессии: сколько контекста уже занято, насколько диалог разрос, не пора ли открыть новый чат, вынеся важное в spec.md

Здесь действует правило мышления: память хороша, пока она организована; неорганизованная память превращается в шум.

Если вы видите, что контекст разросся, лучше сделать так:

  • зафиксировать текущее состояние в коротком файле;
  • перезапустить работу в чистом чате
  • заново дать инфу
  • продолжить с ясного плана.

Что в итоге реально снижает количество глюков

Если собрать все в одну практическую систему, получится довольно простая, но мощная схема.

Нейронка работает заметно надежнее, когда:

  • ей дают четкое ТЗ вместо расплывчатого пожелания;
  • ее заставляют сначала планировать, а не сразу кодить;
  • контекст отбирается, а не сваливается в нее целиком;
  • изменения делаются атомарно;
  • тест выступает как внешний критерий истины;
  • после реализации включается режим рефлексии;
  • длинная сессия периодически очищается и структурируется.

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

И вот это, пожалуй, центральная мысль моей статьи. Качество ИИ рождается не только из мощности модели. Оно рождается из дисциплины контекста, этапа планирования, внешних проверок и правильно организованной рефлексии.


Вывод

Главная ошибка в работе с нейросетями — ждать, что одна мощная модель сама обеспечит точность, логику, последовательность и архитектурную аккуратность. На практике такого почти не бывает. Даже сильные модели ошибаются в простом, потому что их базовый режим — вероятностное продолжение с опорой на контекст.

Поэтому надежная работа с Claude Code или любой другой LLM строится не вокруг одного идеального промпта, а вокруг архитектуры мышления. Сначала постановка задачи. Потом план. Потом реализация по шагам. Потом тесты. Потом рефлексия. Потом проверка спорных мест. Это и есть тот каркас, который превращает нейронку из впечатляющего собеседника в реально полезный инструмент.

А на это все, всем спасибо за прочтение данной статьи, я очень старался над ней, поэтому буду рад вашему фидбеку

TGKKK
https://t.me/funtrona
https://t.me/funtrona
https://t.me/funtrona

Twitter
https://x.com/p0stbless
https://x.com/p0stbless
https://x.com/p0stbless