feat(skills): ai-text-lint ловит потерю голоса и делает самоаудит
- Зачем:
- линтер умел только вычитать маркеры, а текст без авторского голоса
палится не хуже текста с em dash'ами: после чистки оставался
безлико правильный результат.
- у прогона не было критерия завершения, поэтому проверка сводилась
к тому, что бросилось в глаза.
- Что:
- T03 развёрнут в три срабатывания (перечисление без вывода, безличные
конструкции, абстрактная оценка) с требованием назвать, что конкретно
добавить, вместо совета «добавить позицию автора».
- добавлен шаг самоаудита поверх закрытого каталога: находки X01, X02
с тестом «нельзя записать ни под один ID» и разрешением нулевого
результата.
- Шаг 2 получил критерий «каждый паттерн применён к тексту», quick scan
сведён к паттернам с механической детекцией.
- S04 стал единственным владельцем однородности ритма; удалены дубль
T03b, неоперационализируемый T03e, шаг «Ответить на вопросы» и девять
перефразировок одной ветки в description.
- Проверка:
- тестов на скиллы в репозитории нет, прогон ручной: вызвать скилл
на абзаце AI-прозы и на коротком сообщении в мессенджер.
- git show --stat HEAD: SKILL.md и references/patterns.md.
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
1 parent
cb600bcaa8
commit
061a8d062b
2 files changed
+52
-23
No files matched your search
@@ -1,15 +1,15 @@
|
|||||||
---
|
---
|
||||||
name: ai-text-lint
|
name: ai-text-lint
|
||||||
description: "Проверяет текст на признаки AI-генерации и выдаёт отчёт с конкретными находками. Используй этот скилл, когда пользователь просит проверить текст на AI-маркеры, \"почистить\" текст от признаков ИИ, проверить статью/письмо/резюме перед публикацией или отправкой, найти AI-паттерны, сделать текст более человечным, убрать следы ИИ. Также используй, когда пользователь упоминает: lint, линт, humanize, гуманизация, проверка стиля, AI-маркеры, признаки ИИ, ИИ-стиль. Скилл работает с русскими и английскими текстами."
|
description: "Ищет в тексте признаки AI-генерации (slop) и выдаёт отчёт с цитатами и severity, не переписывая текст. Используй, когда пользователь просит: проверить или пролинтовать статью, письмо, сообщение или резюме перед публикацией или отправкой; убрать AI-стиль, гуманизировать текст, вернуть ему авторский голос; быстро глянуть короткий текст на явные маркеры."
|
||||||
---
|
---
|
||||||
|
|
||||||
# AI Text Lint
|
# AI Text Lint
|
||||||
|
|
||||||
Скилл для проверки текста на типичные признаки AI-генерации. Работает как линтер: анализирует текст, находит конкретные проблемы, выдаёт отчёт. Не переписывает текст автоматически — решение о правках остаётся за пользователем.
|
Скилл для проверки текста на slop — типичные признаки AI-генерации. Работает как линтер: анализирует текст, находит конкретные проблемы, выдаёт отчёт. Не переписывает текст автоматически — решение о правках остаётся за пользователем.
|
||||||
|
|
||||||
## Принципы работы
|
## Принципы работы
|
||||||
|
|
||||||
1. **Только диагностика.** Скилл выдаёт отчёт, а не переписанный текст. Пользователь сам решает, что исправлять.
|
1. **Только диагностика.** Скилл выдаёт отчёт, а не переписанный текст. Пользователь сам решает, что исправлять — и по его просьбе можно помочь с конкретными находками точечно. Не согласен с находкой — объяснить, почему она отмечена, и принять его решение.
|
||||||
2. **Конкретика.** Каждая находка — точная цитата из текста + объяснение, почему это маркер + вариант замены или рекомендация.
|
2. **Конкретика.** Каждая находка — точная цитата из текста + объяснение, почему это маркер + вариант замены или рекомендация.
|
||||||
3. **Контекстуальность.** Не все паттерны одинаково критичны. Em dash в статье на Хабре — мелочь. Em dash в Slack-сообщении — красный флаг. Severity зависит от контекста.
|
3. **Контекстуальность.** Не все паттерны одинаково критичны. Em dash в статье на Хабре — мелочь. Em dash в Slack-сообщении — красный флаг. Severity зависит от контекста.
|
||||||
4. **Без паранойи.** Одиночное срабатывание — не приговор. Проблема в кластерах: три-четыре маркера в одном абзаце.
|
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
|
- 🟢 Low: N
|
||||||
|
|
||||||
### Общие рекомендации
|
### Общие рекомендации
|
||||||
[2-3 предложения о том, на что обратить внимание в первую очередь]
|
[2-3 предложения о том, на что обратить внимание в первую очередь. Только для article и только если находки есть: если все они на удаление, назвать хотя бы одно место, где тексту не хватает голоса — убрать маркеры это половина работы. Для message и resume голос не требуется, там этот пункт пропускается]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Шаг 4: Ответить на вопросы
|
|
||||||
|
|
||||||
После отчёта пользователь может:
|
|
||||||
- Попросить исправить конкретные находки (тогда помочь точечно)
|
|
||||||
- Попросить перепроверить после правок
|
|
||||||
- Не согласиться с находкой (объяснить, почему скилл её отметил, но принять решение пользователя)
|
|
||||||
|
|
||||||
### Режим quick scan
|
### Режим quick scan
|
||||||
|
|
||||||
Если пользователь просит быстро проверить (короткий текст, сообщение перед отправкой, «глянь быстро») — показать только 🔴 high находки, без 🟡 и 🟢. Формат: короткий список без развёрнутых объяснений. Полный отчёт — только по запросу.
|
Если пользователь просит быстро проверить (короткий текст, сообщение перед отправкой, «глянь быстро») — показать только 🔴 high находки, без 🟡 и 🟢. Формат: короткий список без развёрнутых объяснений. Полный отчёт — только по запросу.
|
||||||
|
|
||||||
|
В этом режиме исчерпывающий проход не нужен: Шаг 3 пропускается целиком, а на Шаге 2 достаточно паттернов с механической детекцией (P\*, L01, L02, L04, L05, S01, S03, T04, C01, C02) — они ловятся поиском по подстроке и дают почти весь 🔴 high на коротком тексте.
|
||||||
|
|
||||||
## Важно
|
## Важно
|
||||||
|
|
||||||
- **Не быть AI-детектором.** Скилл не определяет, написан ли текст AI. Он ищет стилистические паттерны, которые _ассоциируются_ с AI-генерацией. Человек тоже может так писать.
|
- **Не быть AI-детектором.** Скилл не определяет, написан ли текст AI. Он ищет стилистические паттерны, которые _ассоциируются_ с AI-генерацией. Человек тоже может так писать.
|
||||||
|
|||||||
@@ -7,6 +7,9 @@
|
|||||||
- **Примеры** — конкретные срабатывания (RU/EN)
|
- **Примеры** — конкретные срабатывания (RU/EN)
|
||||||
- **Severity** — по контексту: article / message / resume
|
- **Severity** — по контексту: article / message / resume
|
||||||
- **Рекомендация** — что делать при срабатывании
|
- **Рекомендация** — что делать при срабатывании
|
||||||
|
- **Детекция** (не у всех) — как искать механически: подстрока, счёт, порог
|
||||||
|
|
||||||
|
Паттерн может делиться на подпункты с буквенными ID (`T03a`, `T03b`): это отдельные срабатывания с общей причиной. В отчёт они идут раздельно, под своим буквенным ID. Severity наследуется от родителя, если у подпункта не оговорена своя.
|
||||||
|
|
||||||
Severity: 🔴 high (явный маркер, бросается в глаза), 🟡 medium (подозрительно в скоплении), 🟢 low (мелочь, но в сумме вносит вклад).
|
Severity: 🔴 high (явный маркер, бросается в глаза), 🟡 medium (подозрительно в скоплении), 🟢 low (мелочь, но в сумме вносит вклад).
|
||||||
|
|
||||||
@@ -318,17 +321,18 @@ AI-модели же подставляют типографически кор
|
|||||||
| message | 🔴 high |
|
| message | 🔴 high |
|
||||||
| resume | 🟡 medium |
|
| resume | 🟡 medium |
|
||||||
|
|
||||||
### S04: Однородная длина абзацев/пунктов
|
### S04: Однородный ритм (предложения, абзацы, пункты)
|
||||||
|
|
||||||
**Что:** Все абзацы примерно одной длины (3-4 предложения). Все bullet points одинаковой структуры и длины.
|
**Что:** Ровная "решётка" на любом уровне: предложения внутри абзаца одной длины, абзацы одной длины (3-4 предложения), все bullet points одинаковой структуры и длины.
|
||||||
**Почему:** Человеческий текст имеет вариативную ритмику. Короткий абзац после длинного — нормально. У AI — ровная "решётка".
|
**Почему:** Человеческий текст имеет вариативную ритмику. Короткое предложение после длинного, короткий абзац после длинного — нормально. У AI решётка ровная на всех уровнях сразу.
|
||||||
**Примеры маркеров:**
|
**Примеры маркеров:**
|
||||||
|
- Три-четыре предложения подряд по 8-9 слов, все построенные одинаково
|
||||||
- Пять bullet points, каждый ровно по два предложения
|
- Пять bullet points, каждый ровно по два предложения
|
||||||
- Четыре абзаца по 50-60 слов каждый
|
- Четыре абзаца по 50-60 слов каждый
|
||||||
**Рекомендация:** Варьировать длину осознанно. Добавить один короткий пункт (одно предложение) и один длинный.
|
**Рекомендация:** Варьировать длину осознанно. Добавить один короткий пункт (одно предложение) и один длинный. Внутри абзаца — дать одному предложению развернуться, а следующее оборвать в три слова.
|
||||||
|
|
||||||
**Подсказка по детекции:** Два аспекта однородности:
|
**Подсказка по детекции:** Два аспекта однородности:
|
||||||
1. *Длина.* Посчитать слова в каждом пункте списка или абзаце. Если разброс длин менее 20% от среднего — это паттерн. Например, пять пунктов по 12, 11, 13, 12, 11 слов — подозрительно ровно.
|
1. *Длина.* Посчитать слова в единицах одного уровня: предложения внутри абзаца, абзацы, пункты списка. Если разброс длин менее 20% от среднего — это паттерн. Например, пять пунктов по 12, 11, 13, 12, 11 слов — подозрительно ровно. Абсолютная длина роли не играет, важен разброс: абзац из восьмисловных предложений так же однороден, как из двадцатисловных.
|
||||||
2. *Синтаксис.* AI часто строит предложения по одной схеме: подлежащее → сказуемое → дополнение, подлежащее → сказуемое → дополнение. Человек чередует порядок слов, начинает с обстоятельства, вставляет вводные конструкции, использует инверсию.
|
2. *Синтаксис.* AI часто строит предложения по одной схеме: подлежащее → сказуемое → дополнение, подлежащее → сказуемое → дополнение. Человек чередует порядок слов, начинает с обстоятельства, вставляет вводные конструкции, использует инверсию.
|
||||||
|
|
||||||
| Контекст | Severity |
|
| Контекст | Severity |
|
||||||
@@ -421,14 +425,28 @@ AI-модели же подставляют типографически кор
|
|||||||
| message | 🟡 medium |
|
| message | 🟡 medium |
|
||||||
| resume | 🔴 high |
|
| resume | 🔴 high |
|
||||||
|
|
||||||
### T03: Отсутствие личной позиции / стерильная нейтральность
|
### T03: Нет авторского голоса (стерильная нейтральность)
|
||||||
|
|
||||||
**Что:** Текст описывает предмет исключительно "со стороны", без мнения автора, личного опыта, субъективных оценок.
|
**Что:** Текст описывает предмет исключительно "со стороны", без мнения автора, личного опыта, субъективных оценок. Ровный, гладкий, ничей.
|
||||||
**Почему:** AI по умолчанию стремится к нейтральности. Человек на Хабре скажет «мне этот подход не нравится, потому что...» или «мы обожглись на этом».
|
**Почему:** AI по умолчанию стремится к нейтральности. Человек на Хабре скажет «мне этот подход не нравится, потому что...» или «мы обожглись на этом».
|
||||||
**Примеры маркеров:**
|
|
||||||
- «Данный подход имеет как преимущества, так и ограничения.» (без указания, какие конкретно и что автор думает)
|
Важно: убрать маркеры — половина работы. Текст, из которого вычистили em dash'и и «в современном мире», но не вернули голос, палится не хуже исходного, просто по-другому: он становится безлико-правильным. T03 — главный паттерн, где рекомендация не «убрать», а «добавить».
|
||||||
- «Существуют различные мнения по этому вопросу.»
|
|
||||||
**Рекомендация:** Добавить конкретную позицию автора. Не обязательно резкую — но личную.
|
**Что искать — три отдельных срабатывания:**
|
||||||
|
|
||||||
|
**T03a. Перечисление вместо вывода.** Позиции разложены ровно, а что автор про это думает — не сказано. Граница с S06: S06 владеет самой симметричной подачей (секции, «с одной стороны / с другой стороны»), T03a — отсутствием вывода после неё. Симметрия с честным «мне ближе первое, вот почему» — это S06 без T03a.
|
||||||
|
- Маркер: «Существуют различные мнения по этому вопросу.» / «Оба варианта имеют право на жизнь.»
|
||||||
|
- С голосом: «Подход рабочий, но мы на нём дважды теряли данные при ребалансе.»
|
||||||
|
|
||||||
|
**T03b. Нет первого лица там, где оно уместно.** Безличные конструкции и «рекомендуется» в тексте про собственный опыт.
|
||||||
|
- Маркер: «Рекомендуется использовать пул соединений.»
|
||||||
|
- С голосом: «Мы держим пул на 20, больше упирается в базу.»
|
||||||
|
|
||||||
|
**T03c. Абстрактная оценка вместо конкретной.** Автор вроде бы высказался, но проверить или оспорить нечего. В резюме этот же случай идёт по R01, там своя severity.
|
||||||
|
- Маркер: «Это вызывает вопросы», «решение выглядит спорным», «требует внимания»
|
||||||
|
- С голосом: «Непонятно, что будет на 10к rps: мы не проверяли.»
|
||||||
|
|
||||||
|
**Рекомендация:** Для каждой находки назвать, **что конкретно добавить**: чьё это мнение, какой случай из опыта, какая цифра, какой сломанный прод. Рекомендация вида «добавить позицию автора» бесполезна — она возвращает пользователю ту же абстракцию, которую скилл только что нашёл. Позиция не обязана быть резкой, но обязана быть личной и проверяемой.
|
||||||
|
|
||||||
| Контекст | Severity |
|
| Контекст | Severity |
|
||||||
|----------|----------|
|
|----------|----------|
|
||||||
@@ -436,6 +454,8 @@ AI-модели же подставляют типографически кор
|
|||||||
| message | 🟢 low |
|
| message | 🟢 low |
|
||||||
| resume | 🟢 low |
|
| resume | 🟢 low |
|
||||||
|
|
||||||
|
Исключение: **T03b в переписке — 🔴 high.** Голос в чате не нужен, поэтому T03a и T03c там 🟢 low, но безличное «рекомендуется» в сообщении коллеге — сильный маркер: живые люди в чате так не пишут.
|
||||||
|
|
||||||
### T04: Вежливые обрамления
|
### T04: Вежливые обрамления
|
||||||
|
|
||||||
**Что:** "Буду рад помочь", "Не стесняйтесь обращаться", "Надеюсь, это поможет", "Если возникнут вопросы..." — в конце каждого сообщения.
|
**Что:** "Буду рад помочь", "Не стесняйтесь обращаться", "Надеюсь, это поможет", "Если возникнут вопросы..." — в конце каждого сообщения.
|
||||||
|
|||||||
Reference in new issue
Block a user