Что остаётся человеку, когда Клод пишет код?
Я дизайнер. За месяц вечеров я собрал сервис, который превращает часовое видео в документ: ссылка на лекцию или запись встречи — и через шесть минут у тебя очищенный текст выступления и выжимка с тезисами, каждый из которых привязан к секунде записи. Код писал Claude Code, экраны рисовал Claude Design, архитектуру держал Claude в чате; я не написал ни строки.
Сервис работает: digest.inforobot.space. Эта статья про один день в середине проекта, после которого я понял, чем на самом деле занимался весь месяц.
Что случилось 17 сентября
Внутри сервиса есть этап, который называется «чистка». Распознавание речи отдаёт сырой транскрипт — со всеми «э‑э», «вот», «так сказать», с обрывками фраз. Чистка убирает мусор и склеивает текст в абзацы, чтобы его можно было читать. Делает это языковая модель, и в инструкции ей прямо написано: ничего не сокращать, убирать только мусор.
Семнадцатого сентября я сравнивал двух провайдеров распознавания речи. Чтобы сравнение было честным, впервые посчитал простую вещь: сколько предложений сырого транскрипта доживает до очищенного.
Ответ: от 56 до 71 процента. Чистка девять дней подряд молча выбрасывала от 29 до 44 процентов предложений каждого транскрипта. Не паразитов — содержание. Из лекции про сюрреалистов исчезли «Элен Смит на Марсе» и «шахтёр, услышавший голос».
И ни одна проверка этого не заметила. Инструкция запрещала сокращать — модель сокращала. Валидатор проверял число абзацев и их длину — абзацы были на месте. Ошибок нет, предупреждений нет, в логах чисто. Система не падала. Она уверенно отдавала неправду.
Нашлось случайно — потому что я мерил другое, и без сравнения провайдеров не нашлось бы до сих пор.
Что собрали
Чтобы дальше было понятно, немного про сам сервис.
Video Digest берёт ссылку на видео — YouTube, VK Видео, Rutube — или загруженный файл, хоть диктофонную запись, и отдаёт документ: очищенный транскрипт, выжимку с тезисами и таймкодами, цитаты, проверенные по транскрипту, критику аргументации, глоссарий. Один документ с регулятором глубины, от трёх строк до полного текста, без вкладок «выжимка / транскрипт». Рядом плеер — нажал на таймкод, услышал оригинал — и экспорт в шесть форматов.
Под капотом: фронт на React за nginx, n8n как оркестратор с шестью флоу, медиа‑сервис на FastAPI с yt‑dlp и ffmpeg, Postgres, внешний сервис распознавания речи и модели OpenAI для текста. Всё — один docker compose на небольшом VPS; часовая лекция обходится примерно в 30 центов и шесть минут.

Роли были распределены с первого дня. Я — продакт и арт‑директор: что делаем, зачем, как выглядит, принято или нет. Claude в чате — архитектор: контракты, схема результата, решения с основаниями, задания для Claude Code. Claude Code — разработка: одна сессия — один шаг, показать до коммита. Claude Design — интерфейс. Все решения — сразу в журнал; на 13 октября в нём 249 записей, в репозитории 203 коммита.
Метод звучал надёжно: документы как источник правды, контракты раньше кода, маленькие шаги с приёмкой. И он работал — три части системы собирались независимо и состыковались без переделок, потому что контракт API был написан до реализации. Но у метода была дыра, и чистка провалилась в неё на девять дней, пока никто не считал предложения.
Тихая порча
Чистка оказалась не единственной ошибкой такого сорта — за месяц их было три, и у всех одна природа. Пустой транскрипт, на который провайдер распознавания ответил кодом 200, а не ошибкой. Параметры запроса к базе, которые нода Postgres в n8n тихо резала по запятым: «subtitles, no STT» уходило двумя параметрами. Чистка, которая отдаёт на треть меньше, чем получила. Ни в одном случае система не упала — все три раза она отдавала правдоподобный результат.
Тесты это не ловят по определению: тест проверяет то, что ты догадался проверить. Валидатор чистки проверял форму ответа и не проверял, что в ответе осталось содержание входа, — формально всё было честно.
Починили правилом удержания. Кусок транскрипта возвращается модели на исправление, если в очищенном тексте сохранилось меньше 92 процентов предложений входа или пропало хоть одно предложение длиннее десяти содержательных слов. Модели говорят, в пересказе: «ты вернула N из M предложений, каждое должно остаться». Если и вторая попытка не дотянула — текст принимается, но потеря записывается и показывается читателю полосой «Транскрипт мог быть сокращён» с указанием мест.

На той же лекции удержание выросло с 56 до 89 процентов, вернулись именно потерянные имена. Пять кусков из восьми и после повтора ниже порога в 92 процента — и это видно на странице. Причина — размер куска, промпт или сама модель — не починена до сих пор; измеритель работает, проблема записана. Правило не сделало чистку хорошей. Оно сделало её плохость видимой.
Урок записан в тот же день: на каждом стыке, где модель что‑то возвращает, считать вышедшее против вошедшего с первого дня.
Намерение как факт
Вторая дыра была в документах — в тех самых, которые мы назначили «источником правды».
Двадцать первого сентября черновик политики обработки данных утверждал, что внутренний nginx не пишет журнал запросов. Я проверил контейнер: 111 строк с адресами посетителей за пять минут. Директивы, выключающей журнал, во внутреннем конфиге не было вовсе, хотя черновик утверждал её с 17 сентября. Документ описывал намерение как факт.
Я начал считать такие случаи, и к дню деплоя их набралось девять:
-
«Перевод есть в API» — опция была в контракте, перевод не выполнялся ни разу.
-
«Распознавание повторяет запрос через 5 секунд при сбое» — на ответах 429 и 5xx повтор не срабатывал, только на обрывах связи.
-
«Событие пишется в базу» — изменение в флоу не было импортировано.
-
«Следы уйдут по срокам хранения» — строки задач не удалялись никогда.
-
«Журнал запросов выключен» — 111 строк с адресами за пять минут.
-
«Токен проверки на роботов одноразовый» — так обещала документация провайдера, а на локальной машине один токен приняли трижды.
-
«Сервер в такой‑то стране» — стоял в другой.
-
«Импорт флоу — рабочий шаг деплоя» — скрипт за месяц ни разу не запускался на Linux и упал прямо в окне деплоя: тело запроса не влезло в лимит аргумента командной строки, которого на macOS нет.
-
«Раскладка схемы чистая» — подписи вылезали из коробок; смотрели глазами, не мерили.
Ни один из девяти не был ошибкой кода. Каждый — разница между тем, что документ или отчёт говорил, и тем, что стояло на сервере. И каждый был написан уверенно, потому что автор — человек или модель — описывал то, что собирался сделать, как уже сделанное.
Правило, которое из этого выросло, простое и неудобное: утверждение о том, как система настроена, попадает в документ только вместе с ответом на вопрос «чем проверено». Для политики обработки данных это проверка на сервере. Для схемы — измерение. Документ остаётся источником правды, но каждое его утверждение сверяется с живой системой. Без второй половины первая опасна, потому что красивому документу верят — а проверять его уже никто не идёт.
Что осталось человеку
Я ждал, что главной моей работой будет принимать решения, и это оказалось верно только наполовину.
Решения были. Регулятор глубины появился из одного слова на приёмке трёх аккуратных макетов: «скучно». Аудиоплеер — из сценария с диктофонной записью, который инструменты не предлагали. Локальный контур — из того, что я работаю в страховой компании и знаю, какие данные нельзя выносить за периметр. Модель этих решений не предлагала: они из того, где я работаю и что видел.
Но больше времени ушло на другое — на недоверие. Каждый шаг заканчивался отчётом Claude Code: что сделано, что проверено. Отчёты приходили уверенными и подробными. Приёмка свелась к одному: найти в отчёте фразу, за которой нет проверки. «Журнал выключен» — а ты смотрел в контейнер? «Импорт работает» — а на Linux запускали? В девяти случаях за уверенной фразой ничего не стояло. Чтобы это поймать, не нужно уметь писать код. Нужна привычка спрашивать «чем проверено» и готовность пойти посмотреть самому, если ответа нет.
Ещё одна работа, которую инструменты не делают: границы. На ретро в середине сентября я посмотрел на коммиты по дням: 5, 6, 13, 19, 34, 8, 6, 3. Обвал после пика — смена характера работы: с «сделать» на «понять, почему модель ведёт себя так». Расследование без заранее названной границы съедает дни. После этого каждое расследование начиналось с фразы «если к такому‑то моменту не получится — останавливаемся и остаёмся на том, что есть». Инструмент сам не предложит остановиться, ему это не нужно — границу ставит тот, у кого вечера кончаются.

И долги. Журнал решений охотно принимал долги и не выпускал их. Два архитектурных долга были записаны 9 сентября с цифрами и не сделаны месяц — потому что у долга не было ни срока, ни условия, при котором он блокирует новую функцию. Это тоже оказалось моей работой: сказать «до публикации — только то, что про деньги, персональные данные или ложь на странице; остальное — после».
День деплоя
Деплой релиза шёл по чеклисту с предпроверкой. Предпроверка нашла то, чего чеклист не ждал: ключ проверки на роботов не попадал в сборку фронта — защита вышла бы пустой и в режиме наблюдения выглядела бы как «всё хорошо». Уже в самом окне выяснилось, что скрипт импорта никогда не запускался на Linux. Код здесь ни при чём: оба расхождения — между документом и сервером, как и девять до них.
Шесть отклонений от гайда в тот же день ушли в гайд. Первая живая задача после деплоя — 52-минутная запись чужой планёрки с YouTube — прошла за шесть минут и 26 центов.

Что можно забрать себе
Если вы собираете что‑то с ИИ‑инструментами — сервис, внутренний инструмент, пайплайн с моделями, — вот что я сделал бы с первого дня.
Считайте вышедшее против вошедшего на каждом стыке, где модель что‑то возвращает. Форму ответа проверит схема; считать нужно содержание — сколько предложений входа дожило до выхода. Тест проверяет то, о чём вы догадались, а этот счётчик ловит потерю, которой вы не ждали.
Проверяйте результат, код ответа ничего не обещает. «200» означает, что провайдер доволен собой: пустой транскрипт за оплаченные десять минут тоже приходит с кодом 200.
Для каждого утверждения в документе спрашивайте «чем проверено». Особенно для фраз «выключено», «удаляется», «работает» и «повторяет». Проверка — на живой системе, репозиторий знает только намерение.
Называйте границу расследования до его начала. «Если к вечеру не выйдет — остаёмся на старом» стоит одной строки и экономит дни.
Показывайте недостатки пользователю, если не можете их убрать. Полоса «Транскрипт мог быть сокращён» лучше молчаливого «всё хорошо» и дешевле полной починки.
Что это стоило
Несколько долларов на API за разработку, включая часовые прогоны. Подписки на инструменты. Первая рабочая версия — шесть дней по 4–5 часов, путь до публичного сервиса — месяц вечеров. В деньгах это дёшево. Дорого во внимании — единственной валюте, которой у человека в этой схеме становится больше. Код пишется быстрее, чем читается. Отчёты приходят чаще, чем проверяются. Если принимать всё на веру, сервис будет готов через неделю и будет уверенно отдавать неправду.
Сервис открыт: digest.inforobot.space. Ограничения написаны на странице: 90 минут, 200 мегабайт, дневной бюджет, после которого он скажет: «Сегодня сервис исчерпал дневной лимит. Попробуйте завтра.» Что происходит с вашими данными — на странице политики, и каждое её утверждение сверено с кодом, а то, что проверяется только на сервере, проверено на сервере. Пятый случай научил.
Пишу про практики работы с AI в Telegram‑канале «Я и мой друг робот» — про мульти‑агентные системы, визуализацию данных и реальные автоматизации: https://t.me/mewithrobot
Автор: VitTurov

