diff --git a/agents/.agents/skills/ai-text-lint/SKILL.md b/agents/.agents/skills/ai-text-lint/SKILL.md index 75fe771..f6685f3 100644 --- a/agents/.agents/skills/ai-text-lint/SKILL.md +++ b/agents/.agents/skills/ai-text-lint/SKILL.md @@ -1,15 +1,15 @@ --- name: ai-text-lint -description: "Проверяет текст на признаки AI-генерации и выдаёт отчёт с конкретными находками. Используй этот скилл, когда пользователь просит проверить текст на AI-маркеры, \"почистить\" текст от признаков ИИ, проверить статью/письмо/резюме перед публикацией или отправкой, найти AI-паттерны, сделать текст более человечным, убрать следы ИИ. Также используй, когда пользователь упоминает: lint, линт, humanize, гуманизация, проверка стиля, AI-маркеры, признаки ИИ, ИИ-стиль. Скилл работает с русскими и английскими текстами." +description: "Ищет в тексте признаки AI-генерации (slop) и выдаёт отчёт с цитатами и severity, не переписывая текст. Используй, когда пользователь просит: проверить или пролинтовать статью, письмо, сообщение или резюме перед публикацией или отправкой; убрать AI-стиль, гуманизировать текст, вернуть ему авторский голос; быстро глянуть короткий текст на явные маркеры." --- # AI Text Lint -Скилл для проверки текста на типичные признаки AI-генерации. Работает как линтер: анализирует текст, находит конкретные проблемы, выдаёт отчёт. Не переписывает текст автоматически — решение о правках остаётся за пользователем. +Скилл для проверки текста на slop — типичные признаки AI-генерации. Работает как линтер: анализирует текст, находит конкретные проблемы, выдаёт отчёт. Не переписывает текст автоматически — решение о правках остаётся за пользователем. ## Принципы работы -1. **Только диагностика.** Скилл выдаёт отчёт, а не переписанный текст. Пользователь сам решает, что исправлять. +1. **Только диагностика.** Скилл выдаёт отчёт, а не переписанный текст. Пользователь сам решает, что исправлять — и по его просьбе можно помочь с конкретными находками точечно. Не согласен с находкой — объяснить, почему она отмечена, и принять его решение. 2. **Конкретика.** Каждая находка — точная цитата из текста + объяснение, почему это маркер + вариант замены или рекомендация. 3. **Контекстуальность.** Не все паттерны одинаково критичны. Em dash в статье на Хабре — мелочь. Em dash в Slack-сообщении — красный флаг. Severity зависит от контекста. 4. **Без паранойи.** Одиночное срабатывание — не приговор. Проблема в кластерах: три-четыре маркера в одном абзаце. @@ -34,7 +34,21 @@ description: "Проверяет текст на признаки AI-генер - Почему это маркер (коротко, одно предложение) - Что можно сделать (конкретная рекомендация или вариант замены) -### Шаг 3: Сформировать отчёт +**Готово, когда каждый паттерн каталога применён к тексту.** Не «прочитал и выписал, что бросилось в глаза», а прошёлся по всем ID из `references/patterns.md`. + +Применён не значит обязан сработать. Паттерн без срабатываний в отчёт не попадает, паттерн вне контекста (R\* на не-резюме, структурные — на трёх предложениях) отмечается неприменимым. Натягивать срабатывание, чтобы проход выглядел полным, хуже, чем пропустить: см. Принцип 4. + +### Шаг 3: Самоаудит поверх каталога + +Каталог закрытый, а slop изобретателен. Отложить список находок и перечитать текст с одним вопросом: **что ещё здесь выдаёт AI, помимо уже найденного?** + +Находка засчитывается, только если её **нельзя** записать ни под один ID каталога. Если фрагмент уже выписан на Шаге 2 — это не новая находка, а переформулировка старой. Такие находки нумеровать `X01`, `X02`, помечать «вне каталога» и включать в отчёт наравне с каталожными. + +**Ноль находок — нормальный и частый исход.** На тексте, который каталог покрыл хорошо, X-находок не должно быть вовсе. Вопрос Шага 3 поставлен открыто и не подразумевает, что ответ есть. + +Если самоаудит дал устойчивую находку (видно на разных текстах, формулируется как правило) — сказать об этом пользователю после отчёта: это кандидат в `references/patterns.md`. + +### Шаг 4: Сформировать отчёт Формат отчёта: @@ -61,20 +75,15 @@ description: "Проверяет текст на признаки AI-генер - 🟢 Low: N ### Общие рекомендации -[2-3 предложения о том, на что обратить внимание в первую очередь] +[2-3 предложения о том, на что обратить внимание в первую очередь. Только для article и только если находки есть: если все они на удаление, назвать хотя бы одно место, где тексту не хватает голоса — убрать маркеры это половина работы. Для message и resume голос не требуется, там этот пункт пропускается] ``` -### Шаг 4: Ответить на вопросы - -После отчёта пользователь может: -- Попросить исправить конкретные находки (тогда помочь точечно) -- Попросить перепроверить после правок -- Не согласиться с находкой (объяснить, почему скилл её отметил, но принять решение пользователя) - ### Режим quick scan Если пользователь просит быстро проверить (короткий текст, сообщение перед отправкой, «глянь быстро») — показать только 🔴 high находки, без 🟡 и 🟢. Формат: короткий список без развёрнутых объяснений. Полный отчёт — только по запросу. +В этом режиме исчерпывающий проход не нужен: Шаг 3 пропускается целиком, а на Шаге 2 достаточно паттернов с механической детекцией (P\*, L01, L02, L04, L05, S01, S03, T04, C01, C02) — они ловятся поиском по подстроке и дают почти весь 🔴 high на коротком тексте. + ## Важно - **Не быть AI-детектором.** Скилл не определяет, написан ли текст AI. Он ищет стилистические паттерны, которые _ассоциируются_ с AI-генерацией. Человек тоже может так писать. diff --git a/agents/.agents/skills/ai-text-lint/references/patterns.md b/agents/.agents/skills/ai-text-lint/references/patterns.md index 73cfb68..21722d2 100644 --- a/agents/.agents/skills/ai-text-lint/references/patterns.md +++ b/agents/.agents/skills/ai-text-lint/references/patterns.md @@ -7,6 +7,9 @@ - **Примеры** — конкретные срабатывания (RU/EN) - **Severity** — по контексту: article / message / resume - **Рекомендация** — что делать при срабатывании +- **Детекция** (не у всех) — как искать механически: подстрока, счёт, порог + +Паттерн может делиться на подпункты с буквенными ID (`T03a`, `T03b`): это отдельные срабатывания с общей причиной. В отчёт они идут раздельно, под своим буквенным ID. Severity наследуется от родителя, если у подпункта не оговорена своя. Severity: 🔴 high (явный маркер, бросается в глаза), 🟡 medium (подозрительно в скоплении), 🟢 low (мелочь, но в сумме вносит вклад). @@ -318,17 +321,18 @@ AI-модели же подставляют типографически кор | message | 🔴 high | | resume | 🟡 medium | -### S04: Однородная длина абзацев/пунктов +### S04: Однородный ритм (предложения, абзацы, пункты) -**Что:** Все абзацы примерно одной длины (3-4 предложения). Все bullet points одинаковой структуры и длины. -**Почему:** Человеческий текст имеет вариативную ритмику. Короткий абзац после длинного — нормально. У AI — ровная "решётка". +**Что:** Ровная "решётка" на любом уровне: предложения внутри абзаца одной длины, абзацы одной длины (3-4 предложения), все bullet points одинаковой структуры и длины. +**Почему:** Человеческий текст имеет вариативную ритмику. Короткое предложение после длинного, короткий абзац после длинного — нормально. У AI решётка ровная на всех уровнях сразу. **Примеры маркеров:** +- Три-четыре предложения подряд по 8-9 слов, все построенные одинаково - Пять bullet points, каждый ровно по два предложения - Четыре абзаца по 50-60 слов каждый -**Рекомендация:** Варьировать длину осознанно. Добавить один короткий пункт (одно предложение) и один длинный. +**Рекомендация:** Варьировать длину осознанно. Добавить один короткий пункт (одно предложение) и один длинный. Внутри абзаца — дать одному предложению развернуться, а следующее оборвать в три слова. **Подсказка по детекции:** Два аспекта однородности: -1. *Длина.* Посчитать слова в каждом пункте списка или абзаце. Если разброс длин менее 20% от среднего — это паттерн. Например, пять пунктов по 12, 11, 13, 12, 11 слов — подозрительно ровно. +1. *Длина.* Посчитать слова в единицах одного уровня: предложения внутри абзаца, абзацы, пункты списка. Если разброс длин менее 20% от среднего — это паттерн. Например, пять пунктов по 12, 11, 13, 12, 11 слов — подозрительно ровно. Абсолютная длина роли не играет, важен разброс: абзац из восьмисловных предложений так же однороден, как из двадцатисловных. 2. *Синтаксис.* AI часто строит предложения по одной схеме: подлежащее → сказуемое → дополнение, подлежащее → сказуемое → дополнение. Человек чередует порядок слов, начинает с обстоятельства, вставляет вводные конструкции, использует инверсию. | Контекст | Severity | @@ -421,14 +425,28 @@ AI-модели же подставляют типографически кор | message | 🟡 medium | | resume | 🔴 high | -### T03: Отсутствие личной позиции / стерильная нейтральность +### T03: Нет авторского голоса (стерильная нейтральность) -**Что:** Текст описывает предмет исключительно "со стороны", без мнения автора, личного опыта, субъективных оценок. +**Что:** Текст описывает предмет исключительно "со стороны", без мнения автора, личного опыта, субъективных оценок. Ровный, гладкий, ничей. **Почему:** AI по умолчанию стремится к нейтральности. Человек на Хабре скажет «мне этот подход не нравится, потому что...» или «мы обожглись на этом». -**Примеры маркеров:** -- «Данный подход имеет как преимущества, так и ограничения.» (без указания, какие конкретно и что автор думает) -- «Существуют различные мнения по этому вопросу.» -**Рекомендация:** Добавить конкретную позицию автора. Не обязательно резкую — но личную. + +Важно: убрать маркеры — половина работы. Текст, из которого вычистили em dash'и и «в современном мире», но не вернули голос, палится не хуже исходного, просто по-другому: он становится безлико-правильным. T03 — главный паттерн, где рекомендация не «убрать», а «добавить». + +**Что искать — три отдельных срабатывания:** + +**T03a. Перечисление вместо вывода.** Позиции разложены ровно, а что автор про это думает — не сказано. Граница с S06: S06 владеет самой симметричной подачей (секции, «с одной стороны / с другой стороны»), T03a — отсутствием вывода после неё. Симметрия с честным «мне ближе первое, вот почему» — это S06 без T03a. +- Маркер: «Существуют различные мнения по этому вопросу.» / «Оба варианта имеют право на жизнь.» +- С голосом: «Подход рабочий, но мы на нём дважды теряли данные при ребалансе.» + +**T03b. Нет первого лица там, где оно уместно.** Безличные конструкции и «рекомендуется» в тексте про собственный опыт. +- Маркер: «Рекомендуется использовать пул соединений.» +- С голосом: «Мы держим пул на 20, больше упирается в базу.» + +**T03c. Абстрактная оценка вместо конкретной.** Автор вроде бы высказался, но проверить или оспорить нечего. В резюме этот же случай идёт по R01, там своя severity. +- Маркер: «Это вызывает вопросы», «решение выглядит спорным», «требует внимания» +- С голосом: «Непонятно, что будет на 10к rps: мы не проверяли.» + +**Рекомендация:** Для каждой находки назвать, **что конкретно добавить**: чьё это мнение, какой случай из опыта, какая цифра, какой сломанный прод. Рекомендация вида «добавить позицию автора» бесполезна — она возвращает пользователю ту же абстракцию, которую скилл только что нашёл. Позиция не обязана быть резкой, но обязана быть личной и проверяемой. | Контекст | Severity | |----------|----------| @@ -436,6 +454,8 @@ AI-модели же подставляют типографически кор | message | 🟢 low | | resume | 🟢 low | +Исключение: **T03b в переписке — 🔴 high.** Голос в чате не нужен, поэтому T03a и T03c там 🟢 low, но безличное «рекомендуется» в сообщении коллеге — сильный маркер: живые люди в чате так не пишут. + ### T04: Вежливые обрамления **Что:** "Буду рад помочь", "Не стесняйтесь обращаться", "Надеюсь, это поможет", "Если возникнут вопросы..." — в конце каждого сообщения.