From 5d2d9e3d225c429303eb20197ffa921744bae2b7 Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Sun, 5 Apr 2026 16:49:48 +0300 Subject: [PATCH] =?UTF-8?q?feat(skills):=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=82=D1=82=D0=B5=D1=80=D0=BD=D1=8B=20=D0=B8=20qui?= =?UTF-8?q?ck=20scan=20=D0=B2=20ai-text-lint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - расширить покрытие AI-маркеров и добавить быстрый режим для коротких текстов. - Что: - добавлен режим quick scan (только 🔴 high, без развёрнутых объяснений). - новые паттерны: P05 (буква «ё»), L06 (hedging), S07 (двоеточие перед списком), T05 (sandwich pattern). - расширен словарь L01 (формирование, реализация, осуществлять, функционирование). - улучшена детекция S04 (добавлен синтаксический аспект однородности). - обновлены таблицы severity для всех контекстов. - Проверка: - /ai-text-lint на тестовом тексте с новыми паттернами. --- agents/.agents/skills/ai-text-lint/SKILL.md | 4 + .../ai-text-lint/references/patterns.md | 101 +++++++++++++++--- 2 files changed, 93 insertions(+), 12 deletions(-) diff --git a/agents/.agents/skills/ai-text-lint/SKILL.md b/agents/.agents/skills/ai-text-lint/SKILL.md index 8acc95c..d0a26dc 100644 --- a/agents/.agents/skills/ai-text-lint/SKILL.md +++ b/agents/.agents/skills/ai-text-lint/SKILL.md @@ -71,6 +71,10 @@ description: "Проверяет текст на признаки AI-генер - Попросить перепроверить после правок - Не согласиться с находкой (объяснить, почему скилл её отметил, но принять решение пользователя) +### Режим quick scan + +Если пользователь просит быстро проверить (короткий текст, сообщение перед отправкой, «глянь быстро») — показать только 🔴 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 599a9c2..2ce6114 100644 --- a/agents/.agents/skills/ai-text-lint/references/patterns.md +++ b/agents/.agents/skills/ai-text-lint/references/patterns.md @@ -96,6 +96,34 @@ AI-модели же подставляют типографически кор | message | 🟡 medium | | resume | 🔴 high | +### P05: Буква «ё» — второй em dash + +**Что:** Последовательное использование буквы «ё» в тексте: «идёт», «всё», «ещё», «берёт», «нёс», «подчёркивает». +**Почему:** Это один из самых надёжных маркеров наравне с P01. Клавиша «ё» расположена в неудобном месте (левый верхний угол, под `~`), и культура её использования в русскоязычном интернете слабая. Подавляющее большинство людей набирают «идет», «все», «еще» — и это нормально, языковая норма допускает оба варианта. AI-модели же обучены на отредактированных текстах (книги, Википедия, СМИ), где «ё» используется последовательно. Результат: если в тексте из мессенджера стабильно стоит «ё» — это красный флаг. + +**Исключения:** Некоторые люди принципиально пишут с «ё» (ёфикаторы). Текст, прошедший через корректора/редактора, тоже будет с «ё». Если автор — известный сторонник «ё», это не маркер. + +**Примеры маркеров:** +- «Проект идёт по плану, всё готово к деплою» (в Slack) +- «Ещё нужно разобраться с конфигурацией» (в Telegram) +**Как выглядит реальный человеческий текст:** +- «Проект идет по плану, все готово к деплою» +- «Еще нужно разобраться с конфигурацией» + +**Рекомендация:** В переписке заменить «ё» на «е» повсеместно. В статьях — допустимо, если автор осознанно ёфицирует, но в сочетании с другими маркерами усиливает подозрение. + +**Детекция:** Подсчитать количество «ё» в тексте. Порог: 3+ вхождения в коротком тексте (до 200 слов) или стабильное использование по всему тексту (ни одного «е» там, где должно быть «ё» — подозрительная последовательность). + +| Контекст | Severity | +|----------|----------| +| article | 🟡 medium | +| message | 🔴 high | +| resume | 🔴 high | + +--- + +## Категория: Лексика-маркер + ### L01: AI vocabulary (русский) **Что:** Слова и обороты, статистически чрезмерно используемые LLM в русском тексте. @@ -109,6 +137,8 @@ AI-модели же подставляют типографически кор - данный (вместо "этот"), текущий (вместо "нынешний/сейчашний") - неотъемлемая часть, играет важную роль - оптимизация, масштабирование (вне технического контекста) +- формирование (вместо "создание"), реализация (вместо "сделали/написали") +- осуществлять (вместо "делать"), функционирование (вместо "работа") **Список (tier 2 — подозрительные в скоплении):** - безусловно, несомненно, очевидно @@ -189,9 +219,25 @@ AI-модели же подставляют типографически кор | message | 🔴 high | | resume | 🟢 low | ---- +### L06: Hedging (перестраховочная лексика) -## Категория: Структурные паттерны +**Что:** Оговорки и смягчающие конструкции: «возможно», «вероятно», «в определённой степени», «в той или иной мере», «не исключено, что», «можно предположить», «как правило», «в большинстве случаев». +**Почему:** AI хеджирует рефлекторно — ставит оговорки там, где человек сказал бы прямо. Одна оговорка в абзаце — нормально. Три — сигнал, что текст сгенерирован моделью, которая боится быть неточной. +**Примеры маркеров:** +- «Вероятно, это связано с особенностями архитектуры» +- «В определённой степени это позволяет улучшить производительность» +- «Можно предположить, что данный подход окажется эффективным» +**Как выглядит человеческий текст:** +- «Это из-за архитектуры» +- «Это улучшает производительность» +- «Этот подход работает» +**Рекомендация:** Убрать оговорку, если автор уверен в утверждении. Если не уверен — написать почему, а не прятаться за «возможно». + +| Контекст | Severity | +|----------|----------| +| article | 🟡 medium | +| message | 🟡 medium | +| resume | 🔴 high | ### S01: Negative parallelism ("не X, а Y") @@ -249,7 +295,9 @@ AI-модели же подставляют типографически кор - Четыре абзаца по 50-60 слов каждый **Рекомендация:** Варьировать длину осознанно. Добавить один короткий пункт (одно предложение) и один длинный. -**Подсказка по детекции:** Посчитать слова в каждом пункте списка или абзаце. Если разброс длин менее 20% от среднего — это паттерн. Например, пять пунктов по 12, 11, 13, 12, 11 слов — подозрительно ровно. +**Подсказка по детекции:** Два аспекта однородности: +1. *Длина.* Посчитать слова в каждом пункте списка или абзаце. Если разброс длин менее 20% от среднего — это паттерн. Например, пять пунктов по 12, 11, 13, 12, 11 слов — подозрительно ровно. +2. *Синтаксис.* AI часто строит предложения по одной схеме: подлежащее → сказуемое → дополнение, подлежащее → сказуемое → дополнение. Человек чередует порядок слов, начинает с обстоятельства, вставляет вводные конструкции, использует инверсию. | Контекст | Severity | |----------|----------| @@ -287,9 +335,24 @@ AI-модели же подставляют типографически кор | message | 🟡 medium | | resume | 🟡 medium | ---- +### S07: Двоеточие перед каждым списком -## Категория: Тональные паттерны +**Что:** Вводная фраза с двоеточием перед каждым bullet-списком: «Основные преимущества:», «Ключевые особенности:», «Что мы сделали:». +**Почему:** AI рефлекторно ставит "заголовок:" перед каждым списком, даже когда список и так понятен из контекста. Человек часто начинает список без вводной фразы или встраивает его в предложение. +**Примеры маркеров:** +- «Основные преимущества ClickHouse:» + список +- «Что было сделано в рамках проекта:» + список +- «Ключевые технологии:» + список +**Как выглядит человеческий текст:** +- Список начинается после абзаца, без отдельной вводной строки +- Или встроен в предложение: «Мы использовали ClickHouse, Kafka и Airflow» +**Рекомендация:** Убрать вводную фразу, если из контекста и так ясно, о чём список. Или встроить перечисление в текст. + +| Контекст | Severity | +|----------|----------| +| article | 🟡 medium | +| message | 🟡 medium | +| resume | 🟡 medium | ### T01: Vague attribution (размытые ссылки на авторитет) @@ -352,9 +415,23 @@ AI-модели же подставляют типографически кор | message | 🔴 high | | resume | 🟡 medium | ---- +### T05: Sandwich pattern (похвала-оговорка-похвала) -## Категория: Паттерны, специфичные для резюме +**Что:** Структура, где критика или ограничение обёрнуты в два слоя позитива: «Отличный инструмент. Есть некоторые ограничения. Но в целом достойное решение.» +**Почему:** AI боится быть категоричным и рефлекторно смягчает любую критику обрамлением из похвалы. Человек, если ему что-то не нравится, скажет прямо: «Работает, но тормозит на больших объёмах — для нас это критично». +**Примеры маркеров:** +- «Kafka — мощный инструмент. Настройка может быть непростой. Тем не менее, для нашей задачи это лучший выбор.» +- «Хороший фреймворк с активным сообществом. Документация могла бы быть лучше. В целом — рекомендую.» +**Как выглядит человеческий текст:** +- «Kafka подходит, но настройка — боль. Будьте готовы потратить на это время.» +- «Документация слабая, приходится разбираться по исходникам. В остальном норм.» +**Рекомендация:** Убрать обрамляющие позитивные предложения, если они не несут информации. Критику подать прямо, с конкретикой. + +| Контекст | Severity | +|----------|----------| +| article | 🟡 medium | +| message | 🟡 medium | +| resume | 🟢 low | ### R01: Абстрактные impact-фразы без цифр @@ -445,12 +522,12 @@ AI-модели же подставляют типографически кор ### article (статьи, Хабр, документация) 🔴 high: P04 (эмодзи в заголовках), L03 (inflated significance), L04 (AI-зачины), S01 (negative parallelism), S05 (bold bullet headers), T01 (vague attribution), T03 (стерильная нейтральность) -🟡 medium: P01, P03, L01, L02, L05, S02, S03, S04, S06, T02, R01, C01, C02 +🟡 medium: P01, P03, P05, L01, L02, L05, L06, S02, S03, S04, S06, S07, T02, T05, R01, C01, C02 ### message (переписка) -🔴 high: P01 (длинное тире), L01 (AI vocabulary RU), L04 (AI-зачины), L05 (вводные приглашения), S01, S03 (compulsive summary), T04 (вежливые обрамления), C01 (conjunctive phrases) -🟡 medium: P02, P03, P04, L03, S02, T01, T02, C02 +🔴 high: P01 (длинное тире), P05 (буква ё), L01 (AI vocabulary RU), L04 (AI-зачины), L05 (вводные приглашения), S01, S03 (compulsive summary), T04 (вежливые обрамления), C01 (conjunctive phrases) +🟡 medium: P02, P03, P04, L03, L06, S02, S07, T01, T02, T05, C02 ### resume (резюме) -🔴 high: P01 (длинное тире), P04 (эмодзи), L01, L02, L03, S01, R01 (abstract impact), R02 (buzzword stacking), R03 (однородные bullets), T02 (причастные оценки), C02 (false range) -🟡 medium: P03, L04, S02, S03, S04, T04, C01 \ No newline at end of file +🔴 high: P01 (длинное тире), P04 (эмодзи), P05 (буква ё), L01, L02, L03, L06, S01, R01 (abstract impact), R02 (buzzword stacking), R03 (однородные bullets), T02 (причастные оценки), C02 (false range) +🟡 medium: P03, L04, S02, S03, S04, S07, T04, T05, C01 \ No newline at end of file