refactor(skills): ai-text-lint переписан как оптика из пяти линз
- Зачем:
- каталог из 29 паттернов писался, когда модели были слабее; сейчас
потребители скилла — Opus 5 и GPT 5.6 Sol, которые знают эти правила
по умолчанию, и 578 строк платили контекстом за no-op.
- каталог закрыт: он стареет вместе со slop'ом и провоцирует checklist
theater вместо суждения.
- Что:
- references/patterns.md удалён, 29 ID сведены к пяти линзам:
Клавиатура, Голос, Решётка, Вода, Ассистент; скилл ужался с 661
строки до 145.
- severity 29x3 сжата в профили трёх сред: красные ячейки
группируются по среде, а не по паттерну, плюс «не X, а Y» везде.
- основным режимом стала правка, отчёт вынесен во вторую ветку;
Голос не правится молча и предъявляется первым, потому что требует
мнения, случая и цифр автора, которых у скилла нет.
- каталожную проверку заменил гейт человеческого дубля, плотность
переведена из гейта в интерпретацию вердикта.
- Проверка:
- слепой прогон новой версии на трёх входах: AI-проза для статьи,
AI-сообщение в мессенджер, живое человеческое сообщение.
- на человеческом тексте ноль ложных находок; десять дефектов
инструкции, найденных прогоном, исправлены до коммита.
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
1 parent
061a8d062b
commit
12a8d419ec
2 files changed
+109
-630
No files matched your search
@@ -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») ловятся теми же линзами, отдельного списка не нужно.
|
||||
- **Содержание не трогать.** Форма, не фактическая корректность.
|
||||
- **Последнее слово за автором.** Не согласен с находкой — объяснить, почему она отмечена, и принять решение автора.
|
||||
Reference in new issue
Block a user