diff --git a/agents/.agents/skills/ai-text-lint/SKILL.md b/agents/.agents/skills/ai-text-lint/SKILL.md index f6685f3..9159075 100644 --- a/agents/.agents/skills/ai-text-lint/SKILL.md +++ b/agents/.agents/skills/ai-text-lint/SKILL.md @@ -1,91 +1,145 @@ --- name: ai-text-lint -description: "Ищет в тексте признаки AI-генерации (slop) и выдаёт отчёт с цитатами и severity, не переписывая текст. Используй, когда пользователь просит: проверить или пролинтовать статью, письмо, сообщение или резюме перед публикацией или отправкой; убрать AI-стиль, гуманизировать текст, вернуть ему авторский голос; быстро глянуть короткий текст на явные маркеры." +description: "Оптика для вычитки текста на slop — признаки AI-генерации. По умолчанию правит текст, по запросу выдаёт отчёт с находками. Используй, когда пользователь просит: применить скилл и внести правки, вычистить AI-стиль, гуманизировать текст, вернуть авторский голос; проверить или пролинтовать статью, письмо, сообщение или резюме перед публикацией; быстро глянуть короткий текст на явные маркеры." --- # AI Text Lint -Скилл для проверки текста на slop — типичные признаки AI-генерации. Работает как линтер: анализирует текст, находит конкретные проблемы, выдаёт отчёт. Не переписывает текст автоматически — решение о правках остаётся за пользователем. +Оптика для вычитки готового текста. Скилл вызывается вручную и намеренно: держать эти линзы в голове во время письма — значит тратить внимание на форму вместо смысла. Сначала текст пишется, потом прогоняется. -## Принципы работы +## Рамка -1. **Только диагностика.** Скилл выдаёт отчёт, а не переписанный текст. Пользователь сам решает, что исправлять — и по его просьбе можно помочь с конкретными находками точечно. Не согласен с находкой — объяснить, почему она отмечена, и принять его решение. -2. **Конкретика.** Каждая находка — точная цитата из текста + объяснение, почему это маркер + вариант замены или рекомендация. -3. **Контекстуальность.** Не все паттерны одинаково критичны. Em dash в статье на Хабре — мелочь. Em dash в Slack-сообщении — красный флаг. Severity зависит от контекста. -4. **Без паранойи.** Одиночное срабатывание — не приговор. Проблема в кластерах: три-четыре маркера в одном абзаце. +Один вопрос порождает всё остальное: -## Workflow +> Похоже, что этот текст **набрал руками** вот **этот человек** вот в **эту среду**? -### Шаг 1: Определить контекст +Пять линз — пять способов, которыми ответ бывает «нет». -Спросить пользователя (если не очевидно из разговора), для чего текст: -- **article** — статья, блог-пост, документация (Хабр, README, техническая проза) -- **message** — переписка с коллегами (Slack, Telegram, email) -- **resume** — резюме, сопроводительное письмо +## Линзы -Контекст влияет на severity паттернов. Severity для каждого паттерна указана в таблице внутри его описания в `references/patterns.md` (колонки article / message / resume). +### Клавиатура — набрал ли это человек руками? -### Шаг 2: Прогнать текст +Стоимость набора. Символ, который требует лишнего движения и ничего не даёт взамен, человек не ставит: em dash (Alt+0151), «ё» в дальнем углу, ёлочки, неразрывный пробел, троеточие одним символом, безупречно расставленные запятые в чате. Модель ставит всё это по умолчанию, потому что училась на отредактированных текстах. -Используя базу паттернов из `references/patterns.md` (в папке этого скилла), пройтись по тексту и для каждой находки зафиксировать: -- Какой паттерн сработал (ID и название) -- Точная цитата из текста (выделить проблемный фрагмент) -- Severity в данном контексте (🔴 high / 🟡 medium / 🟢 low) -- Почему это маркер (коротко, одно предложение) -- Что можно сделать (конкретная рекомендация или вариант замены) +Линза генеративна: она порождает не список символов, а вопрос «сколько усилий стоило это набрать». Новый типографский изыск попадёт под неё без обновления скилла. -**Готово, когда каждый паттерн каталога применён к тексту.** Не «прочитал и выписал, что бросилось в глаза», а прошёлся по всем ID из `references/patterns.md`. +Среда решает всё. В Telegram и Slack автозамены нет, поэтому em dash там — чужой след. В статье текст прошёл через редактор с автозаменой, поэтому **в article клавиатура не находка вообще**, кроме случая, когда точно известно, что текст набирался в plain-text. -Применён не значит обязан сработать. Паттерн без срабатываний в отчёт не попадает, паттерн вне контекста (R\* на не-резюме, структурные — на трёх предложениях) отмечается неприменимым. Натягивать срабатывание, чтобы проход выглядел полным, хуже, чем пропустить: см. Принцип 4. +### Голос — этот ли человек говорит? -### Шаг 3: Самоаудит поверх каталога +Есть ли в тексте автор. Признаки отсутствия: предмет описан со стороны, позиция не занята, критика обёрнута в два слоя позитива, плюсы и минусы разложены симметрично и вывода не следует, ссылка на авторитет размыта («эксперты считают»), оценка навешена хвостовым оборотом («...значительно упростив оркестрацию») вместо отдельной мысли, слеш вместо выбора («удалённо/гибрид»). Отдельный случай — безличность там, где уместно «я» или «мы»: «рекомендуется использовать пул соединений» вместо «мы держим пул на 20, больше упирается в базу». -Каталог закрытый, а slop изобретателен. Отложить список находок и перечитать текст с одним вопросом: **что ещё здесь выдаёт AI, помимо уже найденного?** +**Голос — единственная линза, которая правится добавлением, а не вычитанием.** Добавить нужно то, чего у скилла нет: мнение автора, случай из его практики, его цифру, его сломанный прод. Поэтому Голос никогда не чинится молча — см. «Режим правки». -Находка засчитывается, только если её **нельзя** записать ни под один ID каталога. Если фрагмент уже выписан на Шаге 2 — это не новая находка, а переформулировка старой. Такие находки нумеровать `X01`, `X02`, помечать «вне каталога» и включать в отчёт наравне с каталожными. +### Решётка — рука так ровно не кладёт -**Ноль находок — нормальный и частый исход.** На тексте, который каталог покрыл хорошо, X-находок не должно быть вовсе. Вопрос Шага 3 поставлен открыто и не подразумевает, что ответ есть. +Неестественно ровная сетка на любом уровне: предложения внутри абзаца, абзацы, пункты списка, разделы. Живой текст рваный: где-то проваливается в детали, где-то проскакивает тему одной строкой. -Если самоаудит дал устойчивую находку (видно на разных текстах, формулируется как правило) — сказать об этом пользователю после отчёта: это кандидат в `references/patterns.md`. +Одна цифра, чтобы линза не была вкусовщиной: считать длину однородных единиц **в словах**, брать **размах** (максимум минус минимум) и делить на среднее. Меньше 20% — решётка. Пять пунктов по 12, 11, 13, 12, 11 слов дают размах 17% — ровно подозрительно. Абсолютная длина роли не играет, важен разброс. -### Шаг 4: Сформировать отчёт +Второй слой — синтаксическая решётка: подряд идущие предложения по одной схеме, одинаковые зачины, буллеты «**жирный заголовок** — расшифровка» без единого исключения, форсированные триады («быстро, надёжно, удобно») там, где естественная группа — две вещи или четыре. -Формат отчёта: +### Вода — прибавилось ли информации? + +Тест: убрать фразу и посмотреть, изменилось ли что-нибудь. Не изменилось — вода. Ловит канцелярит («является», «данный», «в рамках», «осуществлять»), раздувание важности, impact-фразы без цифр, стопки баззвордов, связки-пустышки («кроме того», «вместе с тем», «стоит отметить»), ложные диапазоны («от стартапов до корпораций»), хеджирование в три слоя. + +Одна конструкция заслуживает имени, потому что срабатывает почти безошибочно и в любой среде: **«не X, а Y»**, «не просто X, но и Y». Обещает контраст, доставляет пустоту. + +### Ассистент — не чат-бот ли это отвечает? + +Артефакты интерфейса помощника, протёкшие в авторский текст: церемония на входе («В современном мире...», «Давайте разберёмся»), церемония на выходе («Надеюсь, это поможет», «Буду рад помочь»), подведение итогов там, где никто не просил, декоративные эмодзи в заголовках и буллетах, вступительное двоеточие перед каждым списком. + +Самая механическая из пяти, ловится почти поиском по подстроке. + +## Калибровка по средам + +Severity — свойство среды, а не находки. Одна и та же клавиатура: в статье не считается, в чате красный флаг. + +**article** (статья, блог-пост, README) — вес на **Голосе** и **Воде**. +🔴 нет позиции автора · размытая ссылка на авторитет · раздувание важности · «В современном мире» · эмодзи в заголовках · буллеты «жирный заголовок + расшифровка» + +**message** (Slack, Telegram, email коллеге) — вес на **Клавиатуре** и **Ассистенте**. Голос почти не считается: в чате нужна краткость, а не позиция. +🔴 em dash · сплошная «ё» · плотный канцелярит · «давайте разберёмся» · «буду рад помочь» · итоги в конце сообщения · связки «кроме того / вместе с тем» · безличное «рекомендуется» + +**resume** (резюме, сопроводительное) — вес на **Воде** и **Решётке**. +🔴 impact-фраза без цифр · стопка баззвордов · однородные буллеты в опыте · причастные хвосты («...значительно упростив») · хеджирование · em dash · «ё» + +**Везде 🔴:** «не X, а Y» / «не просто X, но и Y». + +Красные списки — это калибровка, которую из общих соображений не вывести. Остальное взвешивать самому: насколько уверенное срабатывание и насколько мешает в этой среде. Механического правила понижения нет — уверенная находка по неглавной линзе спокойно бывает важнее вялой по главной. + +Находка часто попадает сразу в две линзы («данный подход имеет как преимущества, так и ограничения» — это и Голос, и Вода). Назвать обе, вес ставить по той, что сильнее в этой среде. + +## Гейт: человеческий дубль + +Линзы открыты, поэтому находку легко выдумать. Гейт один и он обязателен: + +> Находка засчитывается, только если получается написать правдоподобный человеческий вариант этого фрагмента, **заметно отличающийся** от исходного. + +Не получается — находки нет, есть вкусовщина. Гейт бесплатный: дубль сразу становится правкой или рекомендацией. + +**Плотность — не гейт, а интерпретация.** Одиночное срабатывание в живом тексте нормально, человек тоже так пишет. Кластер (три и больше маркера в абзаце, или одна линза ровным слоем по всему тексту) означает, что текст генерился, а не писался. Плотность влияет на вердикт и на то, насколько настойчиво предлагать правки, но не отменяет отдельную находку: одинокое «не просто X, а Y» остаётся красным. + +## Как применять + +**Шаг 1. Определить среду** — article / message / resume. Если не ясно из разговора, спросить: от среды зависит вся калибровка. + +**Шаг 2. Пройти пятью линзами.** Готово, когда приложены все пять. Каждое срабатывание провести через гейт до того, как оно куда-то попадёт. + +**Шаг 3.** Дальше — по тому, что просили. + +### Режим правки (по умолчанию) + +«Примени скилл», «вычисти», «поправь» — значит внести правки, а не отчитаться. + +Четыре линзы правятся молча: **Клавиатура**, **Решётка**, **Вода**, **Ассистент**. Все четыре вычитают — убрать символ, разорвать ровность, выкинуть пустое. Ошибиться тут дёшево, и правка обратима. + +**Голос не правится молча никогда.** Починить его — значит дописать мнение, случай или цифру, которых у скилла нет. Выдуманный инцидент в чужом тексте хуже любого slop'а. + +Отдать результат строго в этом порядке: + +1. **Голос — первым и всегда явно, даже когда находок нет.** Нет находок — одна строка «Голос: чисто». Есть — предъявить вопросом, по одному на находку: «второй абзац ничей: что ты про это на самом деле думаешь?», «тут просится цифра — какая была?». +2. Поправленный текст. +3. Что изменено — компактным списком по линзам, без цитат: «Клавиатура: 6 em dash → дефис, убрана „ё“. Вода: выкинуто „является ключевым фактором“, „кроме того“ ×2». + +Порядок именно такой, потому что Голос — единственное, что требует действия от автора, а остальное уже сделано. В конце вывода, под простынёй правок, он теряется, и самая ценная линза пропадает молча. + +**Правка не закончена, пока про Голос не сказано что-то одно: вопросы или «чисто».** Пропуск этой строки читается как «проверено, всё хорошо», хотя означает «забыли». + +Границы правки: меняется форма, не смысл. Термины, числа, факты, ссылки — неприкосновенны. Авторские особенности (короткие рубленые фразы, мат, необычная пунктуация как приём) — это голос, а не slop, их не выравнивать. + +### Режим отчёта (когда просят диагностику) + +«Проверь», «что тут не так», «прогони и покажи находки» — значит не трогать текст. ``` ## Результаты проверки -**Контекст:** [article / message / resume] -**Общая оценка:** [краткий вердикт — сколько находок, общее впечатление] +**Среда:** [article / message / resume] +**Вердикт:** [одно предложение: сколько находок, какая линза доминирует, кластер или разрозненно] -### Находки +1. 🔴 **Голос** — [в чём проблема, полстроки] + > [цитата, проблемный фрагмент **жирным**] + Человек бы написал: [дубль] -1. 🔴 **[ID паттерна]: [Название]** - > [цитата из текста, проблемный фрагмент выделен **жирным**] - - Почему: [объяснение] - Рекомендация: [что сделать] - -2. 🟡 **[ID паттерна]: [Название]** - ... - -### Статистика -- 🔴 High: N -- 🟡 Medium: N -- 🟢 Low: N - -### Общие рекомендации -[2-3 предложения о том, на что обратить внимание в первую очередь. Только для article и только если находки есть: если все они на удаление, назвать хотя бы одно место, где тексту не хватает голоса — убрать маркеры это половина работы. Для message и resume голос не требуется, там этот пункт пропускается] +2. 🟡 **Вода / Решётка** — ... ``` -### Режим quick scan +Порядок: по убыванию severity, внутри — по порядку в тексте. 🟢 включать, если их немного; при десятке мелочей свернуть в одну строку «плюс по мелочи: ...». -Если пользователь просит быстро проверить (короткий текст, сообщение перед отправкой, «глянь быстро») — показать только 🔴 high находки, без 🟡 и 🟢. Формат: короткий список без развёрнутых объяснений. Полный отчёт — только по запросу. +Находок нет — сказать это и перечислить, что проверялось: на чистом тексте автору важно видеть, что линзы приложены, а не что скилл поленился. -В этом режиме исчерпывающий проход не нужен: Шаг 3 пропускается целиком, а на Шаге 2 достаточно паттернов с механической детекцией (P\*, L01, L02, L04, L05, S01, S03, T04, C01, C02) — они ловятся поиском по подстроке и дают почти весь 🔴 high на коротком тексте. +### Quick scan + +Только по явной просьбе («глянь быстро», «на бегу»). Короткий текст сам по себе в этот режим не отправляет. + +Линзы **Клавиатура** и **Ассистент**, только 🔴, списком без объяснений. На коротком сообщении они дают почти все находки и стоят один проход глазами. + +Голос сюда не входит. Если быстрый скан просят на статье — сказать одной строкой, что Голос не смотрелся: в article это главная линза, и молчаливый пропуск создаёт ложное ощущение чистоты. ## Важно -- **Не быть AI-детектором.** Скилл не определяет, написан ли текст AI. Он ищет стилистические паттерны, которые _ассоциируются_ с AI-генерацией. Человек тоже может так писать. -- **Русский язык — приоритет.** База паттернов заточена под русскоязычный текст. Английские паттерны включены для смешанных текстов (технические статьи с англицизмами). -- **Не трогать содержание.** Скилл проверяет стиль и форму, не фактическую корректность. +- **Это не AI-детектор.** Скилл не определяет, писал ли текст AI. Он находит стилистику, которая _ассоциируется_ с генерацией. Живой человек пишет так же — особенно аккуратный человек после редактора. +- **Русский приоритетнее.** Линзы настроены на русский. В смешанной технической прозе английские маркеры («delve», «leverage», «testament to») ловятся теми же линзами, отдельного списка не нужно. +- **Содержание не трогать.** Форма, не фактическая корректность. +- **Последнее слово за автором.** Не согласен с находкой — объяснить, почему она отмечена, и принять решение автора. diff --git a/agents/.agents/skills/ai-text-lint/references/patterns.md b/agents/.agents/skills/ai-text-lint/references/patterns.md deleted file mode 100644 index 21722d2..0000000 --- a/agents/.agents/skills/ai-text-lint/references/patterns.md +++ /dev/null @@ -1,575 +0,0 @@ -# База паттернов AI Text Lint - -Каждый паттерн имеет: -- **ID** — уникальный идентификатор -- **Название** — краткое описание -- **Описание** — что именно ищем и почему это маркер -- **Примеры** — конкретные срабатывания (RU/EN) -- **Severity** — по контексту: article / message / resume -- **Рекомендация** — что делать при срабатывании -- **Детекция** (не у всех) — как искать механически: подстрока, счёт, порог - -Паттерн может делиться на подпункты с буквенными ID (`T03a`, `T03b`): это отдельные срабатывания с общей причиной. В отчёт они идут раздельно, под своим буквенным ID. Severity наследуется от родителя, если у подпункта не оговорена своя. - -Severity: 🔴 high (явный маркер, бросается в глаза), 🟡 medium (подозрительно в скоплении), 🟢 low (мелочь, но в сумме вносит вклад). - ---- - -## Категория: Пунктуация и типографика - -### P01: Длинное тире (em dash) — главный маркер AI-текста на русском - -**Что:** Наличие символа `—` (U+2014, em dash) в любом тексте, который подразумевает ручной набор. -**Почему:** Это один из самых надёжных и высокочастотных признаков AI-генерации. На стандартной клавиатуре (и PC, и Mac) символ em dash отсутствует как отдельная клавиша. Его набор требует специальных комбинаций (Alt+0151, Ctrl+Shift+U 2014 и т.д.), которые подавляющее большинство людей не знает и не использует. В реальной переписке и даже в статьях люди набирают: -- знак минус с клавиатуры (`-`) -- дефис (`-`) -- иногда двойной дефис (`--`) -- или вообще перестраивают предложение без тире - -AI-модели же подставляют типографически корректное `—` автоматически, потому что обучены на отредактированных текстах. Результат: каждое `—` в тексте, который якобы набран руками — красный флаг. - -**Исключения:** Текст, прошедший через редактор с автозаменой (Word, Google Docs, некоторые CMS) может содержать em dash, вставленный автозаменой из ` - ` (пробел-дефис-пробел). Но в мессенджерах (Telegram, Slack) и plain-text средах автозамены нет. - -**Примеры маркеров:** -- «Проект идёт хорошо — осталось два спринта» (в чате — откуда тут em dash?) -- «Это не баг — это фича» (в Telegram) -- «ClickHouse — отличный выбор для аналитики» (в Slack) -**Как выглядит реальный человеческий текст:** -- «Проект идёт хорошо - осталось два спринта» -- «Это не баг, это фича» -- «ClickHouse отличный выбор для аналитики» - -**Рекомендация:** Заменить все `—` на `-` (минус/дефис) в переписке. В статьях и резюме — заменить бОльшую часть на `-`, запятые или скобки. Допустимо оставить 1-2 на длинный текст, если контекст предполагает редакторскую обработку. - -**Детекция:** Искать символ U+2014 в тексте. Каждое вхождение — отдельная находка. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🔴 high | -| resume | 🔴 high | - -### P02: Избыточная правильная пунктуация - -**Что:** Все запятые на местах, точки в конце каждого предложения, идеальные кавычки — в контексте, где люди так не пишут. -**Почему:** В реальной переписке люди часто опускают точку в последнем предложении, пропускают запятые в длинных перечислениях, не ставят точку после "ок" или "спасибо". -**Примеры маркеров:** -- «Хорошо, я посмотрю это после обеда. Напишу, когда будет готово.» — слишком аккуратно для чата -- Сравни с реальным: «Хорошо, посмотрю после обеда. Напишу когда будет готово» -**Рекомендация:** В переписке — ослабить пунктуацию до естественного уровня. Убрать точку в конце последнего предложения. Допустить 1-2 "пропущенные" запятые в неформальном контексте. - -| Контекст | Severity | -|----------|----------| -| article | 🟢 low | -| message | 🟡 medium | -| resume | 🟢 low | - -### P03: Em dash вместо скобок или запятых - -**Что:** Использование em dash для вводных конструкций, где человек поставил бы запятые или скобки. -**Почему:** LLM-ы систематически предпочитают em dash для parenthetical clauses, создавая характерный "punchy" стиль. -**Примеры маркеров:** -- «ClickHouse — при правильной настройке — даёт отличную производительность» -- Человек напишет: «ClickHouse (при правильной настройке) даёт отличную производительность» -**Рекомендация:** Заменить на запятые или скобки. Одно-два тире в длинной статье — нормально. Три и больше — паттерн. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🔴 high | -| resume | 🟡 medium | - -### P04: Эмодзи в заголовках и списках - -**Что:** Тематические эмодзи перед заголовками (## 🚀 Деплой), в пунктах списков (✅ Настроить CI, 📊 Метрики) или как "иллюстрации" к разделам. -**Почему:** Фирменный стиль ChatGPT-генерированных README и документации. Человек использует эмодзи реактивно (в реакциях, в конце сообщения как эмоцию), а не "иллюстративно" — подбирая тематическую иконку к каждому пункту. -**Примеры маркеров:** -- `## 🚀 Быстрый старт` -- `## 📦 Установка` -- `- ✅ Поддержка кластеризации` -- `- 📊 Мониторинг в реальном времени` -**Как выглядит человеческий текст:** -- `## Быстрый старт` -- `- Поддержка кластеризации` -**Рекомендация:** Убрать эмодзи из заголовков и списков. Оставить только если это осознанный стиль проекта (и то — подумать дважды). - -| Контекст | Severity | -|----------|----------| -| article | 🔴 high | -| message | 🟡 medium | -| resume | 🔴 high | - -### P05: Буква «ё» — второй em dash - -**Что:** Последовательное использование буквы «ё» в тексте: «идёт», «всё», «ещё», «берёт», «нёс», «подчёркивает». -**Почему:** Это один из самых надёжных маркеров наравне с P01. Клавиша «ё» расположена в неудобном месте (левый верхний угол, под `~`), и культура её использования в русскоязычном интернете слабая. Подавляющее большинство людей набирают «идет», «все», «еще» — и это нормально, языковая норма допускает оба варианта. AI-модели же обучены на отредактированных текстах (книги, Википедия, СМИ), где «ё» используется последовательно. Результат: если в тексте из мессенджера стабильно стоит «ё» — это красный флаг. - -**Исключения:** Некоторые люди принципиально пишут с «ё» (ёфикаторы). Текст, прошедший через корректора/редактора, тоже будет с «ё». Если автор — известный сторонник «ё», это не маркер. - -**Примеры маркеров:** -- «Проект идёт по плану, всё готово к деплою» (в Slack) -- «Ещё нужно разобраться с конфигурацией» (в Telegram) -**Как выглядит реальный человеческий текст:** -- «Проект идет по плану, все готово к деплою» -- «Еще нужно разобраться с конфигурацией» - -**Рекомендация:** В переписке заменить «ё» на «е» повсеместно. В статьях — допустимо, если автор осознанно ёфицирует, но в сочетании с другими маркерами усиливает подозрение. - -**Детекция:** Подсчитать количество «ё» в тексте. Порог: 3+ вхождения в коротком тексте (до 200 слов) или стабильное использование по всему тексту (ни одного «е» там, где должно быть «ё» — подозрительная последовательность). - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🔴 high | -| resume | 🔴 high | - -### P06: Слеш как разделитель («REST/gRPC», «удаленно/гибрид») - -**Что:** Косая черта `/` для разделения однородных понятий или альтернатив: «backend/frontend», «удаленно/гибрид/офис», «MergeTree/ReplacingMergeTree», «Kubernetes/Helm», «SQL/ETL-скрипты». Особенно в скоплении — когда слешей в тексте много. -**Почему:** Люди в обычной прозе разделяют через «и», «или», запятую или скобки: «REST и gRPC», «удаленно или гибрид». Слеш требует переключения регистра мысли на «компактную запись» и в живом наборе встречается редко. AI-модели же ставят `/` рефлекторно как нейтральный компактный разделитель — он экономит токены и выглядит «аккуратно». Результат: текст, усыпанный слешами, читается как сгенерированный, особенно в резюме, где их плотность выдаёт шаблонную сборку списка навыков. - -**Исключения (не маркер):** устоявшиеся написания, которые и люди пишут через слеш — `CI/CD`, `A/B-тест`, `и/или`, `вкл/выкл`; даты (`12/05`), дроби и единицы (`км/ч`, `руб/мес`); пути и URL; обозначения вида `вход/выход` как термин. Маркер — это слеш на месте, где естественнее «и» / «или» / запятая, и особенно скопление таких слешей. - -**Примеры маркеров:** -- «Опыт работы с Kafka/RabbitMQ/NATS» (в резюме) -- «Настраивал мониторинг/алертинг/логирование» -- «Data Engineer / Backend Data Engineer / ETL Developer» -- «Формат: удаленно/гибрид/офис» -**Как выглядит человеческий текст:** -- «Опыт работы с Kafka, RabbitMQ и NATS» -- «Настраивал мониторинг, алерты и логирование» -- «Data Engineer, Backend Data Engineer, ETL Developer» -- «Формат: удаленно, гибрид, офис» - -**Рекомендация:** Заменить `/` на «и», «или», запятую или скобки по смыслу. «REST/gRPC» → «REST и gRPC». «удаленно/гибрид» → «удаленно или гибрид». Парные технологии — через «и» или запятую. Устоявшиеся `CI/CD`, `и/или` оставить. - -**Детекция:** Искать символ `/` вне URL, путей, дат и устоявшихся терминов. Одиночное вхождение — 🟢, скопление (3+ на абзац или сплошные слеши в списке навыков резюме) — паттерн. - -| Контекст | Severity | -|----------|----------| -| article | 🟢 low | -| message | 🟡 medium | -| resume | 🟡 medium | - ---- - -## Категория: Лексика-маркер - -### L01: AI vocabulary (русский) - -**Что:** Слова и обороты, статистически чрезмерно используемые LLM в русском тексте. -**Почему:** Эти слова не запрещены, но их плотность в AI-тексте в разы выше, чем в человеческом. Один — ничего. Три в одном абзаце — сигнал. - -**Список (tier 1 — самые частые):** -- ключевой, комплексный, значительный, существенный -- эффективно, целесообразно, в рамках, в контексте -- является, представляет собой -- обеспечивает, способствует, позволяет -- данный (вместо "этот"), текущий (вместо "нынешний/сейчашний") -- неотъемлемая часть, играет важную роль -- оптимизация, масштабирование (вне технического контекста) -- формирование (вместо "создание"), реализация (вместо "сделали/написали") -- осуществлять (вместо "делать"), функционирование (вместо "работа") - -**Список (tier 2 — подозрительные в скоплении):** -- безусловно, несомненно, очевидно -- вместе с тем, помимо этого, кроме того -- стоит отметить, важно подчеркнуть, следует учитывать -- широкий спектр, целый ряд, многообразие -- актуальный, востребованный, перспективный - -**Рекомендация:** Заменить на простые синонимы. "Является ключевым" → "это важно для". "Обеспечивает эффективное" → "помогает" / "ускоряет". "В рамках проекта" → "в проекте". "Данный подход" → "этот подход" / вообще убрать. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🔴 high | -| resume | 🔴 high | - -### L02: AI vocabulary (английский) - -**Что:** Английские слова-маркеры в технических текстах со смешанным языком. -**Список (tier 1):** delve, crucial, pivotal, foster, landscape, testament, enhance, intricate, tapestry, underscore, leverage, streamline, holistic, robust, seamless, comprehensive. -**Список (tier 2):** navigate, harness, cutting-edge, groundbreaking, game-changer, empower, unlock, spearhead. -**Рекомендация:** Заменить на конкретные термины. "Robust solution" → "отказоустойчивое решение" / "решение, прошедшее нагрузочное тестирование". "Leverage Kafka" → "использовать Kafka". - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🟡 medium | -| resume | 🔴 high | - -### L03: Inflated significance (раздувание важности) - -**Что:** Фразы, которые подчёркивают значимость темы общими словами без конкретики. -**Почему:** LLM систематически "надувает" важность предмета, добавляя высокопарные оценки. -**Примеры маркеров:** -- «знаменует собой важный этап в развитии» -- «является переломным моментом для отрасли» -- «открывает новые горизонты» -- «вносит значительный вклад» -- «трудно переоценить значение» -**Рекомендация:** Убрать целиком или заменить конкретным фактом. Вместо «знаменует важный этап» — что конкретно изменилось и для кого. - -| Контекст | Severity | -|----------|----------| -| article | 🔴 high | -| message | 🟡 medium | -| resume | 🔴 high | - -### L04: AI-зачины ("В современном мире...") - -**Что:** Вводные фразы вида «В современном мире», «В мире, где...», «В эпоху цифровой трансформации», «В условиях стремительного развития технологий». -**Почему:** Классический AI-зачин для статей и эссе. Создаёт ложное ощущение масштаба. Человек, который разбирается в теме, начинает с сути, а не с философского отступления о состоянии мира. -**Примеры маркеров:** -- «В современном мире данные стали новой нефтью» -- «В эпоху больших данных особенно важно...» -- «В условиях растущей конкуренции компании вынуждены...» -- «В мире, где каждая секунда на счету...» -**Рекомендация:** Удалить первое предложение целиком. Начать со второго — почти всегда текст от этого только выигрывает. - -| Контекст | Severity | -|----------|----------| -| article | 🔴 high | -| message | 🔴 high | -| resume | 🟡 medium | - -### L05: Вводные приглашения ("Давайте разберёмся") - -**Что:** Фразы-приглашения перед основным контентом: «Давайте разберёмся», «Давайте рассмотрим», «Let's dive in», «Let's explore», «Рассмотрим подробнее». -**Почему:** AI использует эти фразы как переход от введения к основному тексту. Человек на Хабре просто начинает объяснять, без церемоний. -**Примеры маркеров:** -- «Давайте разберёмся, как это работает» -- «Рассмотрим основные преимущества подробнее» -- «Let's dive into the details» -**Рекомендация:** Убрать. Начать объяснение напрямую. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🔴 high | -| resume | 🟢 low | - -### L06: Hedging (перестраховочная лексика) - -**Что:** Оговорки и смягчающие конструкции: «возможно», «вероятно», «в определённой степени», «в той или иной мере», «не исключено, что», «можно предположить», «как правило», «в большинстве случаев». -**Почему:** AI хеджирует рефлекторно — ставит оговорки там, где человек сказал бы прямо. Одна оговорка в абзаце — нормально. Три — сигнал, что текст сгенерирован моделью, которая боится быть неточной. -**Примеры маркеров:** -- «Вероятно, это связано с особенностями архитектуры» -- «В определённой степени это позволяет улучшить производительность» -- «Можно предположить, что данный подход окажется эффективным» -**Как выглядит человеческий текст:** -- «Это из-за архитектуры» -- «Это улучшает производительность» -- «Этот подход работает» -**Рекомендация:** Убрать оговорку, если автор уверен в утверждении. Если не уверен — написать почему, а не прятаться за «возможно». - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🟡 medium | -| resume | 🔴 high | - ---- - -## Категория: Структура и форматирование - -### S01: Negative parallelism ("не X, а Y") - -**Что:** Конструкция «Это не просто X — это Y», «It's not about X, it's about Y». -**Почему:** Один из самых узнаваемых AI-паттернов. Создаёт ложный драматический контраст. -**Примеры маркеров:** -- «Это не просто инструмент — это философия разработки» -- «Речь не только об автоматизации, но и о трансформации» -- «Это не столько технология, сколько новый подход к мышлению» -**Рекомендация:** Убрать контраст. Сказать прямо, что это такое, без ложной дихотомии. - -| Контекст | Severity | -|----------|----------| -| article | 🔴 high | -| message | 🔴 high | -| resume | 🔴 high | - -### S02: Rule of three - -**Что:** Перечисление ровно трёх пунктов, особенно когда они идут через запятую с усилением. -**Почему:** LLM-ы обучены на огромном объёме persuasive writing, где rule of three — стандартный приём. В AI-тексте это происходит слишком часто и слишком ритмично. -**Примеры маркеров:** -- «быстрый, надёжный и масштабируемый» -- «простота, гибкость и производительность» -- «анализировать, оптимизировать и внедрять» -**Рекомендация:** Если перечисление реально содержит три пункта — ок. Если третий добавлен "для красоты" — убрать. Или сделать два, или четыре-пять. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🟡 medium | -| resume | 🟡 medium | - -### S03: Compulsive summary (компульсивное подведение итогов) - -**Что:** "Таким образом", "Подводя итог", "В заключение", "В целом" — особенно когда текст короткий и итог не требуется. -**Почему:** LLM рефлекторно подводит итог даже в двух абзацах. Человек в коротком тексте просто заканчивает. -**Примеры маркеров:** -- «Таким образом, ClickHouse отлично подходит для этой задачи.» (после двух предложений) -- «В целом, данный подход показал свою эффективность.» -**Рекомендация:** Убрать вводное слово. Если последнее предложение и без него звучит как итог — убрать его целиком. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🔴 high | -| resume | 🟡 medium | - -### S04: Однородный ритм (предложения, абзацы, пункты) - -**Что:** Ровная "решётка" на любом уровне: предложения внутри абзаца одной длины, абзацы одной длины (3-4 предложения), все bullet points одинаковой структуры и длины. -**Почему:** Человеческий текст имеет вариативную ритмику. Короткое предложение после длинного, короткий абзац после длинного — нормально. У AI решётка ровная на всех уровнях сразу. -**Примеры маркеров:** -- Три-четыре предложения подряд по 8-9 слов, все построенные одинаково -- Пять bullet points, каждый ровно по два предложения -- Четыре абзаца по 50-60 слов каждый -**Рекомендация:** Варьировать длину осознанно. Добавить один короткий пункт (одно предложение) и один длинный. Внутри абзаца — дать одному предложению развернуться, а следующее оборвать в три слова. - -**Подсказка по детекции:** Два аспекта однородности: -1. *Длина.* Посчитать слова в единицах одного уровня: предложения внутри абзаца, абзацы, пункты списка. Если разброс длин менее 20% от среднего — это паттерн. Например, пять пунктов по 12, 11, 13, 12, 11 слов — подозрительно ровно. Абсолютная длина роли не играет, важен разброс: абзац из восьмисловных предложений так же однороден, как из двадцатисловных. -2. *Синтаксис.* AI часто строит предложения по одной схеме: подлежащее → сказуемое → дополнение, подлежащее → сказуемое → дополнение. Человек чередует порядок слов, начинает с обстоятельства, вставляет вводные конструкции, использует инверсию. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🟢 low | -| resume | 🟡 medium | - -### S05: Bullet points с жирным заголовком + расшифровка - -**Что:** Списки, где каждый пункт — **Жирное слово/фраза**: а потом то же самое другими словами. -**Почему:** Фирменный стиль ChatGPT. На Хабре и в документации так не пишут. -**Примеры маркеров:** -- **Масштабируемость**: Система легко масштабируется горизонтально и вертикально. -- **Отказоустойчивость**: Обеспечивается высокий уровень отказоустойчивости. -**Рекомендация:** Либо убрать жирные "заголовки" и писать обычными пунктами, либо убрать расшифровку, если заголовок и так ясен. - -| Контекст | Severity | -|----------|----------| -| article | 🔴 high | -| message | 🟡 medium | -| resume | 🟡 medium | - -### S06: Balanced pros/cons ("Преимущества / Недостатки") - -**Что:** Структура с симметричными секциями плюсов и минусов, часто с одинаковым количеством пунктов в каждой. -**Почему:** AI обожает "сбалансированную" подачу — 4 преимущества, 4 недостатка, аккуратно разложенные по полочкам. Человек обычно пишет асимметрично: «мне понравилось X и Y, но бесит Z» — в потоке текста, а не в табличке. -**Примеры маркеров:** -- Секция "Преимущества" с 4 пунктами, затем секция "Недостатки" с 4 пунктами -- «С одной стороны... С другой стороны...» как организующая структура всего текста -**Рекомендация:** Если сравнение нужно — сделать его асимметричным. Написать в потоке текста, а не раскладывать по секциям. Или честно сказать: «плюсов больше, минус один, но существенный». - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🟢 low | -| resume | 🟢 low | - -### S07: Двоеточие перед каждым списком - -**Что:** Вводная фраза с двоеточием перед каждым bullet-списком: «Основные преимущества:», «Ключевые особенности:», «Что мы сделали:». -**Почему:** AI рефлекторно ставит "заголовок:" перед каждым списком, даже когда список и так понятен из контекста. Человек часто начинает список без вводной фразы или встраивает его в предложение. -**Примеры маркеров:** -- «Основные преимущества ClickHouse:» + список -- «Что было сделано в рамках проекта:» + список -- «Ключевые технологии:» + список -**Как выглядит человеческий текст:** -- Список начинается после абзаца, без отдельной вводной строки -- Или встроен в предложение: «Мы использовали ClickHouse, Kafka и Airflow» -**Рекомендация:** Убрать вводную фразу, если из контекста и так ясно, о чём список. Или встроить перечисление в текст. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🟡 medium | -| resume | 🟡 medium | - ---- - -## Категория: Тон и авторская позиция - -### T01: Vague attribution (размытые ссылки на авторитет) - -**Что:** «Эксперты отмечают», «По мнению специалистов», «Согласно исследованиям», «Многие разработчики считают» — без указания, кто именно. -**Почему:** AI не может сослаться на конкретный источник и подставляет weasel words. -**Примеры маркеров:** -- «Эксперты в области Big Data отмечают растущую популярность...» -- «Согласно последним исследованиям, эффективность выросла на...» -**Рекомендация:** Либо дать конкретную ссылку/имя, либо убрать апелляцию к авторитету. «Мы замерили — эффективность выросла» лучше, чем «эксперты отмечают». - -| Контекст | Severity | -|----------|----------| -| article | 🔴 high | -| message | 🟡 medium | -| resume | 🟡 medium | - -### T02: Superficial -ing / причастные оценки - -**Что:** Завершающие причастные обороты, которые добавляют поверхностную оценку: «...обеспечивая гибкость», «...повышая эффективность», «...демонстрируя зрелость подхода». -**Почему:** LLM добавляет "хвостовые" оценочные обороты как рефлекс. Человек либо скажет это отдельным предложением, либо не скажет вообще. -**Примеры маркеров:** -- «Мы перешли на Airflow, значительно упростив оркестрацию.» -- «Компания внедрила CI/CD, ускорив доставку фич в продакшен.» -- «...reflecting the continued relevance of the framework.» -**Рекомендация:** Убрать причастный оборот. Если мысль важна — вынести в отдельное предложение с конкретикой. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🟡 medium | -| resume | 🔴 high | - -### T03: Нет авторского голоса (стерильная нейтральность) - -**Что:** Текст описывает предмет исключительно "со стороны", без мнения автора, личного опыта, субъективных оценок. Ровный, гладкий, ничей. -**Почему:** AI по умолчанию стремится к нейтральности. Человек на Хабре скажет «мне этот подход не нравится, потому что...» или «мы обожглись на этом». - -Важно: убрать маркеры — половина работы. Текст, из которого вычистили em dash'и и «в современном мире», но не вернули голос, палится не хуже исходного, просто по-другому: он становится безлико-правильным. T03 — главный паттерн, где рекомендация не «убрать», а «добавить». - -**Что искать — три отдельных срабатывания:** - -**T03a. Перечисление вместо вывода.** Позиции разложены ровно, а что автор про это думает — не сказано. Граница с S06: S06 владеет самой симметричной подачей (секции, «с одной стороны / с другой стороны»), T03a — отсутствием вывода после неё. Симметрия с честным «мне ближе первое, вот почему» — это S06 без T03a. -- Маркер: «Существуют различные мнения по этому вопросу.» / «Оба варианта имеют право на жизнь.» -- С голосом: «Подход рабочий, но мы на нём дважды теряли данные при ребалансе.» - -**T03b. Нет первого лица там, где оно уместно.** Безличные конструкции и «рекомендуется» в тексте про собственный опыт. -- Маркер: «Рекомендуется использовать пул соединений.» -- С голосом: «Мы держим пул на 20, больше упирается в базу.» - -**T03c. Абстрактная оценка вместо конкретной.** Автор вроде бы высказался, но проверить или оспорить нечего. В резюме этот же случай идёт по R01, там своя severity. -- Маркер: «Это вызывает вопросы», «решение выглядит спорным», «требует внимания» -- С голосом: «Непонятно, что будет на 10к rps: мы не проверяли.» - -**Рекомендация:** Для каждой находки назвать, **что конкретно добавить**: чьё это мнение, какой случай из опыта, какая цифра, какой сломанный прод. Рекомендация вида «добавить позицию автора» бесполезна — она возвращает пользователю ту же абстракцию, которую скилл только что нашёл. Позиция не обязана быть резкой, но обязана быть личной и проверяемой. - -| Контекст | Severity | -|----------|----------| -| article | 🔴 high | -| message | 🟢 low | -| resume | 🟢 low | - -Исключение: **T03b в переписке — 🔴 high.** Голос в чате не нужен, поэтому T03a и T03c там 🟢 low, но безличное «рекомендуется» в сообщении коллеге — сильный маркер: живые люди в чате так не пишут. - -### T04: Вежливые обрамления - -**Что:** "Буду рад помочь", "Не стесняйтесь обращаться", "Надеюсь, это поможет", "Если возникнут вопросы..." — в конце каждого сообщения. -**Почему:** Фирменный chatbot-стиль. В реальной переписке коллеги так не пишут (разве что в первом письме новому человеку). -**Примеры маркеров:** -- «Если нужна помощь — обращайся, буду рад помочь!» -- «Надеюсь, информация окажется полезной.» -**Рекомендация:** Убрать. В переписке с коллегами — просто закончить по делу. - -| Контекст | Severity | -|----------|----------| -| article | 🟢 low | -| message | 🔴 high | -| resume | 🟡 medium | - -### T05: Sandwich pattern (похвала-оговорка-похвала) - -**Что:** Структура, где критика или ограничение обёрнуты в два слоя позитива: «Отличный инструмент. Есть некоторые ограничения. Но в целом достойное решение.» -**Почему:** AI боится быть категоричным и рефлекторно смягчает любую критику обрамлением из похвалы. Человек, если ему что-то не нравится, скажет прямо: «Работает, но тормозит на больших объёмах — для нас это критично». -**Примеры маркеров:** -- «Kafka — мощный инструмент. Настройка может быть непростой. Тем не менее, для нашей задачи это лучший выбор.» -- «Хороший фреймворк с активным сообществом. Документация могла бы быть лучше. В целом — рекомендую.» -**Как выглядит человеческий текст:** -- «Kafka подходит, но настройка — боль. Будьте готовы потратить на это время.» -- «Документация слабая, приходится разбираться по исходникам. В остальном норм.» -**Рекомендация:** Убрать обрамляющие позитивные предложения, если они не несут информации. Критику подать прямо, с конкретикой. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🟡 medium | -| resume | 🟢 low | - ---- - -## Категория: Резюме-специфичные паттерны - -### R01: Абстрактные impact-фразы без цифр - -**Что:** «Значительно повысил эффективность», «Оптимизировал бизнес-процессы», «Внёс существенный вклад в развитие». -**Почему:** AI не знает реальных цифр и подставляет generic impact-фразы. Рекрутер сразу видит отсутствие конкретики. -**Примеры маркеров:** -- «Существенно сократил время обработки данных» -- «Повысил качество аналитических процессов» -**Рекомендация:** Добавить цифры, названия систем, объёмы. «Сократил время ETL с 4 часов до 40 минут за счёт перевода на ClickHouse MergeTree». - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🟢 low | -| resume | 🔴 high | - -### R02: Buzzword stacking - -**Что:** Нагромождение модных терминов без привязки к конкретной работе. -**Почему:** AI генерирует "красиво звучащие" наборы компетенций, которые не привязаны к реальным проектам. -**Примеры маркеров:** -- «Кросс-функциональное взаимодействие, стратегическое планирование, непрерывное совершенствование» -- «Agile-трансформация, цифровая зрелость, data-driven подход» -**Рекомендация:** Каждый buzzword привязать к конкретному проекту или убрать. Не более одного buzzword на bullet point. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🟢 low | -| resume | 🔴 high | - -### R03: Однородная структура bullet points в опыте - -**Что:** Каждый пункт начинается с глагола в прошедшем времени, одинаковой длины, одинаковой конструкции. -**Почему:** AI генерирует "правильные" bullet points по шаблону. Реальное резюме, написанное человеком, имеет разную структуру пунктов. -**Примеры маркеров:** -- «Разработал систему мониторинга...» -- «Реализовал интеграцию с...» -- «Оптимизировал процесс...» -- «Внедрил автоматизацию...» -(все по 8-12 слов, все глагол + объект + контекст) -**Рекомендация:** Варьировать структуру. Добавить пункт с результатом ("Скорость выросла в 3 раза"). Добавить пункт с контекстом ("Проект для Ростелеком, команда 5 человек"). Разная длина пунктов. - -| Контекст | Severity | -|----------|----------| -| article | 🟢 low | -| message | 🟢 low | -| resume | 🔴 high | - ---- - -## Категория: Переходные слова и связки - -### C01: Избыточные conjunctive phrases - -**Что:** «Более того», «Кроме того», «Помимо этого», «Вместе с тем», «Moreover», «Furthermore», «Additionally» — слишком часто. -**Почему:** AI использует формальные связки между каждым абзацем. Человек чаще начинает новый абзац без связки или использует неформальные переходы. -**Примеры маркеров:** -- Три абзаца подряд, начинающихся с «Кроме того», «Более того», «Помимо этого» -**Рекомендация:** Убрать 2 из 3. Начать абзац с сути, без вводного оборота. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🔴 high | -| resume | 🟡 medium | - -### C02: False range ("от X до Y") - -**Что:** «От небольших стартапов до крупных корпораций», «От технической экспертизы до креативного мышления», «From intimate gatherings to global movements». -**Почему:** Конструкция подразумевает спектр, но на деле это просто две слабо связанные вещи, одетые в "красивую" рамку. -**Примеры маркеров:** -- «Опыт работы от MVP-проектов до enterprise-решений» -- «Навыки от написания кода до управления командами» -**Рекомендация:** Сказать прямо: «Работал и с MVP, и с enterprise-проектами» или перечислить конкретные проекты. - -| Контекст | Severity | -|----------|----------| -| article | 🟡 medium | -| message | 🟡 medium | -| resume | 🔴 high |