← ИИ-чаты
КУЗНИЦА ВАЙМАН · ИИ-ЧАТЫ · МЕТОД
ИИ-чаты · Метод

Как ставить задачу ИИ-инженеру

«Должно работать — не принимается. Этап закрыт только запуском и логом»

⏱ 25 минут 💰 практика в чате 📱 с телефона
Акт приёмки: образец / ваш / сходится — таблица сравнения из разбора образца

Метрики вместо мненийакт приёмки: образец / ваш / сходится — а не «нравится или нет»

🧠 Перед стартом: этот урок — про постановку задачи, не про кнопки. Всё, что здесь, снято с реальной работы: промпты дословно, провалы — словами заказчика. Генераций не нужно: практика — в чате.
01

Роль вместо команды

Большинство пишет ИИ команду: «сделай X». Получает исполнителя, который сделал X и ждёт. Следующая команда, следующее ожидание, и вся голова проекта — у вас, а не у него. Первое, что меняет работу, — роль в первой строке.

Стартовый блок задачи · дословно
РОЛЬ И ГЛАВНОЕ ПРАВИЛО Ты — ведущий инженер этой задачи, а не исполнитель по одной команде. Ты сам планируешь, сам запускаешь, сам проверяешь результат запуском, сам исправляешь и только потом отчитываешься.

Роль сильнее команды. «Ведущий инженер» планирует, запускает и проверяет сам; «исполнитель» — ждёт, пока вы проверите за него.

02

Запреты и критерий закрытия этапа

Самая частая ложь ИИ-инженера — «должно работать». Не по злому умыслу: он не запускал. Запреты пишутся списком, а закрытие этапа определяется одной вещью — запуском и логом.

Блок запретов · дословно
Запрещено: - заканчивать этап без реального запуска кода и без вывода в лог; - писать «должно работать» — только «запустил, вот вывод, вот метрика»; - удалять или переписывать с нуля существующие наработки; - выдумывать API, названия таблиц, эндпоинты и параметры — всё сверяется с кодом или документацией; - терять контекст между этапами — для этого ведёшь файлы состояния. Обязательно после каждого этапа: обновить PROGRESS.md, показать diff, показать вывод тестов.

Ключевая формулировка: «должно работать» не принимается. Этап закрыт только запуском и логом. Тесты вида «assert True» — гнать обратно: модель пробует проскочить самую долгую часть заглушками.

03

Файлы состояния: память живет на диске, не в чате

Задание, отданное текстом в чат, живёт до первого сжатия контекста. Через N сообщений модель его подзабудет и вернётся к прежнему поведению. Лечится одним правилом: всё важное — файлом, и перечитывать перед каждым этапом.

Один проект
docs/memory/CONTEXT.md — что за проект, где что лежит, ключевые решения docs/memory/PROGRESS.md — этапы: TODO / IN PROGRESS / DONE + дата + что сделано docs/memory/DECISIONS.md — архитектурные решения и почему (ADR-стиль, коротко) docs/memory/OPEN_QUESTIONS.md — что требует моего ответа (не выдумывай — спрашивай)
Несколько параллельных чатов над одним проектом
/memory/INDEX.md — реестр всех направлений, по строке на чат /memory/<имя>/<имя>_CONTEXT.md — задача, где что лежит, решения и почему /memory/<имя>/<имя>_RULES.md — мои требования, правки и запреты, ДОСЛОВНО моими словами /memory/<имя>/<имя>_FAILS.md — где ты облажался: что я просил, что выдал, как было надо /memory/<имя>/<имя>_OPEN.md — недоделанное и то, что ждёт моего ответа /memory/<имя>/<имя>_MODE.md — правила работы

Правила для нескольких чатов: имена файлов уникальны на весь проект; чат сам заводит папку по теме и дописывает одну строку в INDEX.md, чужое не трогает; пересечение с чужой зоной не решает сам — строка в OPEN.md и вопрос вам.

Задание вместо сообщения в чате
Сохрани моё предыдущее сообщение как docs/memory/<TASK>.md в репозитории и дальше работай от файла — при каждом новом этапе перечитывай его и docs/memory/PROGRESS.md.
04

Правила против себя и боли дословно

Модель тупит не потому, что глупая, а потому что не знает, что именно «не так». Поверхностно описанная боль чинится наугад. Две вещи это исправляют: файл MODE.md с правилами, которые модель пишет сама про себя, и боли — вашими словами, не в её пересказе.

MODE.md · дословно
- независимые куски раздаёшь субагентам параллельно, не по очереди; - Grok CLI на сервере — дёргаешь через bash как исследователя на внешний поиск; - всё от Grok проверяешь по первоисточникам, без ссылки — [НЕПОДТВЕРЖДЕНО], в работу не идёт; - этап не закрыт без запуска и вывода в лог, «должно работать» не принимается; - перед правкой рабочих файлов делаешь копию, с нуля ничего не переписываешь; - миграции только additive, без DROP и RENAME, прогон на копии базы; - непонятно — в OPEN.md и спрашиваешь списком, не выдумываешь. Дополни MODE.md тем, что сам за собой заметил в этом чате: где сбивался, терял мои правки, отвечал не по делу. Запиши как правила против себя.

Так это выглядит вживую. Ниже — правила, которые ИИ-инженер записал на себя за четыре дня работы над этими самыми уроками, после того как второй агент (Grok) трижды не подписал приёмку. Не образец — журнал:

- выдуманная цифра в примере («низа 45 %») — ложь по закону чисел: пример = замер или ничего; - «одной правкой» нельзя писать, пока правка не сделана и не замерена; - показывать ВСЕ треки и кадры запуска, не лучший: ревьюер сверит с json и найдёт спрятанный; - убрал число — убери и оценку: слово «тяжёлый» без цифры — тот же обман; - любая случайность в замере (GrabCut) — фиксировать зерно; проверка ревьюера: три прогона на одном файле; - правило урока обязано сходиться с тем, что отдаёт наш инструмент, иначе урок спорит с продуктом; - ревьюер видит картинки и запускает наш код, mp3 не слышит — сказал прямо и пошёл через спектрограммы.
Боли — дословно
1. Найди в истории нашего чата все мои жалобы на поведение и выпиши их списком в PAIN_POINTS.md — дословно, с моими формулировками. 2. По каждой боли определи техническую причину: что именно теряется — факт, стиль, предыдущая правка, весь контекст? На каком шаге? 3. Собери 10 реальных примеров, где ассистент ответил не так, как надо. Для каждого: что я просил, что он выдал, каким должен быть правильный ответ.
05

Этап 0: инвентаризация до любых правок

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

Этап 0 · дословно
Сделай ветку feature/<имя>. Основную не трогай. Найди и опиши в INVENTORY.md: 1. Где в коде реализовано <то, что трогаем> — файлы, роуты, классы. 2. Как сейчас формируется <ключевой артефакт>, где хранится. 3. Что уже есть по теме: таблицы, поля, история. 4. Полный список <компонентов>: где что лежит, что получает на вход. 5. Как сейчас работает <критичный механизм>. 6. Что уже написано по кэшу, лимитам, экономии. По каждому пункту — вердикт: оставить / доработать / заменить. Ничего не удаляешь без моего подтверждения.
06

Главная находка: модель не проверяет свою работу

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

Как устроеноЗачем
Два агента разных семейств на одной кодовой базе, общаются через файлы на дискеу них разные слепые зоны
Первый пишет — второй рвёт на части по жёсткому чек-листу и запускает самнезависимая проверка запуском
Первый обязан закрыть каждое замечание; цикл не заканчивается, пока второй не подписалпроскочить физически нельзя — подпись ставит не автор
Спорные куски оба реализуют параллельно в разных ветках; победитель — по метрикамне по мнению
Судья в golden-тестах — тоже второй агентавтор не проверяет собственную домашку

История этой находки: сначала второго агента описали как «поисковик». Заказчик — словами заказчика, без крепкого слова: «Так Grok не только поиск. Ты пишешь детскую ерунду, а не задачу». Переработка дала главный принцип: второй агент нужен не для поиска, а как ревьюер.

Правило верификации
Любой факт от внешнего агента без рабочей ссылки на первоисточник (официальная дока, репозиторий, changelog) помечается [НЕПОДТВЕРЖДЕНО] и в архитектуру не идёт.
07

Метрики вместо мнений

Дословно
Прогоняй автоматически, считай метрики: - recall фактов (доля подтянутых нужных), цель ≥ 90%; - соответствие стилю (оценка отдельным вызовом модели-судьи по чек-листу), цель ≥ 8/10; - средние токены на запрос до и после — экономия обязана быть, а не рост; - латентность ответа. Цикл: прогнал → метрика ниже цели → сам нашёл причину → правишь → прогнал снова. Ко мне приходишь с таблицей «было / стало», а не с вопросом «что делать».

Тот же принцип, что в уроках про трек, кадр и ролик: не «понравилось», а число до и после. Модель приходит с таблицей, а не с вопросом. Вот две строки из наших реальных циклов, чтобы «было / стало» не висело в воздухе:

МетрикаБылоСталоЧто правили
Время ответа чата (журнал 19.09)медиана 49 с, p90 127 спервое слово 4,6–10 срезервные модели гонкой из разных семейств, а не очередью; потолки ожидания
Яркость трека против образца (урок «Трек под референс», 22.09)2052 Гц (образец 2932)2229 Гцодна ось: верх отдельной пачкой, тёмное — в EXCLUDE; закрыл ли — сказало число, не ощущение

Цели вроде «recall ≥ 90 %» ставятся под конкретный набор проверочных случаев и судью с чек-листом; без них число — мнение в форме числа.

08

Необратимое ограничивается заранее

РискОграничение
Миграции базы откатить сложнее, чем кодтолько additive: новые таблицы и поля; никаких DROP, RENAME, смены типов; прогон сначала на копии базы
Память уводит ответ в сторону («спросил про код — получил про музыку»)порог релевантности; потолок токенов на слой; правило: память используется, только если меняет суть ответа, и никогда не упоминается вслух
Дешёвая модель на извлечении фактов галлюцинируетновые факты первую неделю пишутся в лог, но в промпт не идут
Параллельные исполнители путают контексткаждому — самодостаточное задание без перекрёстных ссылок
Классификатор блокирует чистый запроспричина в файлах репозитория или двусмысленной лексике — изолировать инфраструктуру, переформулировать
08+

Провалы постановки — словами заказчика

Как было написаноРеакцияПравило
«Проверка Vision по режимам (как делали для GPT Image 2)»«Не пиши „как делали". Пиши задачу — отдельный чат, он там замучается искать»исполнитель в другой сессии не видит, что «делали»: каждая задача самодостаточна — контекст модуля, режимы, вход, выход, что сломано
Три задачи разом—«Три задачи, начни с первой. Сейчас сделай только Задачу 1» — все видны, выполняется одна
Описание системы заказчика по двум фрагментам«Слабо — там больше 30 пунктов, ты чаты наши не почитал»пересказ чужой системы — только после узких поисков по точным терминам; заказчик знает её до пункта и видит упрощение сразу
Один и тот же якорь во всех шаблонах«Опять камера Sony — всё? Не знаешь, что написать?»рабочий приём, стоящий везде, — штамп; проверять и шаблоны, и описания на повтор
Порядок действий исполнителя · дословно
Сначала найди и выведи: файл и функцию сборки промпта, функцию vision-анализа, точку вызова генератора. Потом — лог по ошибке. Дальше предложи фикс и согласуй со мной перед тем, как править.

Найти → показать → предложить → согласовать → править. Без согласования исполнитель чинит то, что не сломано.

Постановка по реальной ошибке · дословно
- Подними лог по генерации #1909 и покажи настоящий текст ошибки — то, что реально упало в коде или пришло в ответе от модели, а не сообщение для пользователя. - Определи шаг, на котором обрывается цепочка: vision-анализ → сборка промпта → вызов генератора → получение результата. - Покажи, чем путь «Зеркало + Vision» отличается от пути «Фантазия», и где именно ломается. - Исправь. При сбое vision-анализа не отдавать мусор и не падать молча, а возвращать понятное сообщение «⏳ сервер перегружен, повторите через минуту, ваймы не списаны».

Четыре приёма в одной постановке: сообщение пользователю ≠ ошибка (искать реальный текст в логах) · цепочка расписана по звеньям · сравнение с работающим путём · отдельное требование к поведению при сбое: не мусор и не молчание.

08++

Три живучих бага, которые надо искать намеренно

БагКак выглядитКак ловить
Заглушка вместо анализаvision «подключён», а в генератор месяцами уходит одна фраза «Professional cinematic portrait, high quality» — никто не падает, результат просто чуть хужепроверять не «подключён ли», а что именно уходит в генератор: логировать финальный промпт перед вызовом
Фильтр по префиксублок-лист вида «awaiting_*» молча глушит всё новое с тем же префиксом — промокод, имя, любой вводблок-лист по конкретным флагам, а не по шаблону имени
Деньги при сбоеисключение — и списание осталосьсхема: списание → успех → результат; ниже порога → полный возврат; исключение → возврат в except; факт возврата виден в каждом сообщении об ошибке
09

Практика: соберите свой стартовый блок

Честно про инструмент. Всё, что выше про запуск кода, diff, тесты, ветки и второго агента, — про ИИ-инженера на вашем сервере или в вашем репозитории. Наш чат на сайте умеет другое: думать, планировать, читать первоисточники в сети, писать файлы в проект чата. Поэтому практика здесь — задача без кода: план, разбор, таблица. Критерий закрытия для неё — не «запуск и лог», а «первый ответ начинается с плана и открытых вопросов, ничего не выдумано, каждый факт с источником; файлы состояния — если работаете в проекте чата».

Возьмите любую свою задачу — план запуска карточки товара, разбор таблицы, сравнение двух подходов — и поставьте её так, как ставят ведущему инженеру. Кнопка ниже откроет чат с уже вставленным стартовым блоком в варианте для этого чата: роль, запреты про источники и выдумки, план после каждого этапа, файлы состояния — если работаете в проекте чата, иначе PROGRESS в начале ответа. Серверный вариант — с запуском кода, diff и тестами — это боксы в шагах 01–03, его вставляйте своему ИИ-инженеру на сервере. Чего в блоке нет — MODE.md и этапа 0, их допишете сами. В поле — весь блок с самого начала, роль первой строкой; допишите последнюю строку — задачу. Отправка блока спишет доли вайма по счётчику под полем.

  1. Впишите задачу одной-двумя фразами. Отправьте.
  2. Проверьте первый ответ: он должен начаться с плана и открытых вопросов, а не с готового решения (в проекте чата — ещё и с файлов состояния).
  3. Дождитесь первого этапа. Есть источник у каждого факта и обновлённый план? Нет — верните: «этап не закрыт без ссылки и плана».
  4. Попросите MODE.md: «дополни правилами против себя — где сбивался в этом чате».

Как отличить плохой первый ответ от хорошего. Плохой: сразу готовое решение или «готово, должно работать» — без плана, без файлов. Хороший: «План: 1… 2… 3. Открытые вопросы к вам: … PROGRESS буду держать в начале ответа» (в проекте чата — «заведу CONTEXT.md и PROGRESS.md») — и только потом первый шаг.

Понял?

Сверьте по пунктам. Отмечайте только то, что действительно поняли, — это не галочки для отчёта, а проверка, что шаг реально вышел.

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

10

Проверка

ИИ-инженер отчитался: «Сделал, должно работать». Что делать?
Задание отдали в чат, через неделю модель вернулась к старому поведению. Причина?
Второй агент в связке нужен прежде всего для…
ПРО

Тонкости, которые видно на втором месяце работы

Модель обещает golden-тесты и приносит заглушки

Golden-сценарии на реальных диалогах — самая долгая часть, и модель пробует проскочить её тестами «assert True». Правило: тест без реального входа и ожидаемого выхода — не тест. Гнать обратно с формулировкой «покажи вход, выход, метрику».

Правила заказчика в пересказе модели

Модель любит переформулировать ваши требования «покрасивее» — и теряет смысл. RULES.md ведётся дословно вашими словами, включая грубые. Пересказ — это уже интерпретация, а интерпретация — это уже ошибка.

Несколько чатов лезут в одну зону

Чат не решает пересечение сам. Строка в OPEN.md «пересечение с <направление>: <что именно>» и вопрос вам. Иначе два чата чинят одно место по-разному, и побеждает тот, кто записал последним.

Ветка и флаг — до первой правки

Отдельная ветка, фичефлаг с откатом, миграции только additive — это ставится до того, как модель написала первую строку. После — поздно: откатывать базу дороже, чем код.

Когда роль не помогает

Если модель с ролью «ведущий инженер» всё равно ждёт команд — у неё нет файлов состояния и критерия закрытия. Роль без запретов и без PROGRESS.md — просто вежливость.

11

Итог

  • Роль сильнее команды; этап закрыт запуском и логом, а не заявлением.
  • Память проекта — в файлах на диске; требования — дословно вашими словами.
  • Модель не проверяет свою работу: ревьюер — агент другого семейства; метрики вместо мнений.

Это те же законы, что и в уроках про трек, кадр и ролик: опора, которую можно показать, и проверка числом, а не настроением.