Главная страница TG News Попросили тут в комментах про техничку, и кажется мне это вы зря))…

Попросили тут в комментах про техничку, и кажется мне это вы зря))…

Попросили тут в комментах про техничку, и кажется мне это вы зря))

1. Тестирование и приёмка, неочевидное

Главный трюк — солёные маркеры блоков. У каждого сайта своя соль, при сборке каждый блок штампуется атрибутом с солёным id. Дальше проверка достаёт из собранного HTML текст именно этого блока и гоняет по нему шесть проверок: покрытие, присутствие, заглушка, тонкость, near-dup, диалект.

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

Второй трюк — атрибут data-stub. Фаза кода ставит однострочную заглушку и вешает этот атрибут. Фаза контента обязана переписать блок и атрибут снять. Остался data-stub = блок не переписан, приёмка не закроется. Это ловит бодрое «контент готов» при пустой странице.

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

Четвёртое, моё любимое — проверка дизайна на непохожесть. Считаю difflib-ratio каждого компонента против базового шаблона, предварительно сняв цвета. Компонент, которого в шаблоне нет, плюс компонент с ratio < 0.70 = переосмысленный. Ratio ≥ 0.95 = перекраска = футпринт сети. Приёмка требует минимум 4 переосмысленных компонента. Без этого агент делает один красивый герой, всё остальное тащит как есть, и «разный дизайн» сводится к палитре в одном файле.

Ещё по мелочи, но всё из боли:
— Находки аудита персистятся в findings.json со статусами. Фаза не закрывается, пока есть открытая находка любого приоритета, включая P2. Отклонить можно, но с обязательной причиной. Агент стабильно чинит P0-P1 и бросает P2, прозой «чини всё» это не лечится.
— Обязательный скелет силоса. Страницы без ключей (легалка, жалобы, платежи) агент любит вырезать под соусом «нет ключей, значит не нужно». Скрипт валит, если из карты пропала обязательная ось.
— Пре-деплой проверка контактной формы. Фиксированный путь /tg/send на всю сеть = футпринт, путь обязан быть свой на каждом сайте, из соли.
— Пост-деплой проверка живого урла: 200, каноникал, sitemap, robots с Disallow, ключ IndexNow реально отдаётся, служебный редирект отдаёт noindex. Монитор в Uptime Kuma создаётся только после зелёной проверки.

И то, до чего я дошёл позже всего: тесты на сам скилл. Контракт-тесты проверяют, что каждый пункт чеклиста существует в реестре и упомянут в своей фазе, что все упомянутые скрипты на месте, и главное — бюджет токенов. SKILL.md не больше 2100 слов, каждый reference не больше 1400, суммарно не больше 11500 (в прошлой версии было ~24700). Документация деградирует ровно так же, как код, и это ловится тестом.

Плюс отдельные тесты на то, что приёмка не закрывается: «не должна закрыться без подписей», «пустой evidence отвергается», «неизвестный id отвергается». Тестирую сам механизм невозможности халтуры.

2. Структура хранения

Прогресс билда живёт в .build-state.json в папке сайта: домен, страны, локали, соль, ключ indexnow, слаги разделов, стратегия i18n, статусы 10 фаз, пропуски с причиной, все подписи с их evidence, заметки. Единственный источник правды по прогрессу, поэтому билд идемпотентен и поднимается с любого места после падения.

Контракты лежат в docs/ сайта: page_mapping.csv (страница, путь, ключ, ось, локаль), intent_map.csv, page_blocks.json, block_briefs.json, provider_images.json, links.csv, токены дизайна, audits/findings.json, dropped_keywords.txt. В гит уезжают только контракты и код. Аудиты, скрины и исходники дизайна остаются локально.

Таксономия одна на всю сеть: матрица «блок × тип страницы → приоритет, формат, гео-охват», плюс типы страниц и чеклисты. Оркестратор эти файлы не читает вообще, там 1000+ строк. Их едят скрипты, а субагенту в промпт вставляется готовый срез.

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

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

Мелочь, которая сильно экономит: полные списки от субагентов наверх не возвращаются. Они пишутся в docs/_agent/<scope>.json, а в главный поток идёт только путь и число. Скиллы залочены с хешами источников, как пакеты.

Сейчас в репе 100+ сайтов, все по одной схеме.

3. Модели

Тиринг жёсткий, три типа агентов:

— Haiku — механика без суждения: фетчи, прогон проверок, манифесты, слаги, инвентарь. Правило — один батч-скрипт за вызов, пейсинг и ретраи живут внутри скрипта. Как только даёшь ему «рассуждать по элементу», он начинает перебирать страницы ходами, и вся экономия исчезает.
— Sonnet — рабочая лошадь, процентов 80 объёма: гео-ресёрч, schema, скаффолд Astro, не-money копия (игры, листинги, хабы, адаптация локалей), пост-фактум аудиты.
— Opus — только там, где есть вкус: money-проза бренд-обзоров, дизайн-система с нуля, конверсия, синтез находок аудитов.

Правило по умолчанию: сомневаешься между sonnet и opus — бери sonnet. General-purpose запрещён совсем, он утекает на opus.

Главная статья расходов — это cache-read, то есть контекст, умноженный на количество ходов. Сама генерация на этом фоне копейки. Поэтому тяжёлые фазы уезжают в субагента с чистым контекстом и возвращают максимум 8 строк статуса. Возврат без exit_code не принимается вообще.

4. Отмазки и галлюцинации

Вот тут самое весёлое. Реальные, все словил лично:

— «Матрицу не нашёл, сделаю свой список блоков». Придумывает набор из головы, страница внешне нормальная, а половины блоков нет. Ловится покрытием.
— «Блоков многовато, урежу до разумного». Тот же механизм ловит.
— Подпись одним словом: «сделано», «ок», «проверено». Поэтому evidence обязан быть командой с её выводом или числом.
— Галочка из прошлой итерации выдаётся за факт. Артефакт с тех пор трижды поменялся, а отметка стоит. Поэтому закрытие фазы перегоняет все скрипты заново.
— «Сам поведу тяжёлую фазу, так контролируемее». Итог — главный контекст на 400-750 тысяч токенов, который потом перечитывается сотни ходов.
— Тащит компонент или токены из соседнего сайта сети. Двойной вред: битые зависимости плюс одинаковый дизайн.
— Переводит es-CL копипастом с es-AR. Ловится проверкой диалекта.
— «Текст напишу сам, быстрее». Выходит пресно и коротко, ловится на тонкости и near-dup.
— Рандомизирует id пиксель-кампании «ради анти-футпринта». Атрибуция улетает в 404. Анти-футпринт — это обфускация, id остаётся зарегистрированный.
— Служебный урл отдаёт 500 на серверный curl (это антифрод трекера, так и должно быть), агент считает это дефектом и лезет чинить рабочий сайт.
— Ютуб затроттлил — подменяет кадры стоком или генерит AI. Запрещено явно, ловится глазами на скрининге.
— И вечное: «build не идёт, но в целом готово».

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

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

Кому какой пункт развернуть подробнее — спрашивайте, распишу))))

Чо, как вам статья?

Материалы по теме

Google усложняет установку APK на Android 🤖 Google начала разворачивать новый Advanced…
Google усложняет установку APK на Android 🤖Google начала разворачивать новый Advanced Flow, о котором я ранее рассказывал в новостях, для установки приложений от неверифицированных разработчиков. И процесс специально сделали максимально неудобным.…
По поводу апдейта, который идёт сейчас. На своих сайтах, помимо вылетевших, заметил…
По поводу апдейта, который идёт сейчас.На своих сайтах, помимо вылетевших, заметил следующее:1. То, что болталось без ссылок в топ-50–100, резко встало в топ-10–20.2. Некоторые сайты с небольшим ссылочным встали в топ-10, но по другим гео со схожей…
Масштабирования и лимитов АИшек пост… ▶️3️⃣4️⃣ Давайте простыми словами о том, как…
Масштабирования и лимитов АИшек пост... ▶️3️⃣4️⃣Давайте простыми словами о том, как начать экономить токены при выполнении однотипных задач.Я заметила, что многие работают с АИ-агентом в формате: сейчас ты мне сделаешь это, а завтра уже сделаешь то.…

Вставить свои 5 копеек:

Awesome image
Awesome image Awesome image Awesome image Awesome image
Awesome image