Skip to main content

avoid-ai-writing-russian

CI Выпуск Лицензия: MIT PyPI Python 3.12+ uv Модель на Hugging Face prek Апстрим

Детектор aiw-ru находит 14 примет ИИ-стиля в рекламном абзаце, ставит правке 0/100, проверяет сохранность чисел, показывает, что четыре модели расходятся во мнении о правке, и оценивает главу по фрагментам в духе «Антиплагиата»

Скилл для ИИ-агентов (Claude Code, Codex, Cursor и других), который находит и убирает из русских текстов приметы машинной генерации: канцелярит, кальки с английского, «не просто X, а Y», тире-связки, одинаковый ритм предложений. К нему прилагается детектор на Python (aiw-ru) и под-скилл antiplagiat, который оценивает текст по фрагментам в духе модуля ИИ-детекции системы «Антиплагиат».

Это русская адаптация avoid-ai-writing Конора Бронсдона. Устройство скилла взято оттуда, каталог примет переписан под русский язык, детектор написан заново. Подробности в разделе «Благодарности».

Содержание

Зачем

Английские «очеловечиватели» на русском почти бесполезны. Они ищут delve и tapestry, а русский текст модели выдаёт себя другим: «является», «осуществляется», «в рамках данной работы», «играет ключевую роль», «на ежедневной основе», цепочками вроде «обеспечение повышения эффективности проведения мониторинга» и прямыми кавычками там, где нужны «ёлочки». Половина этого — канцелярит, которым люди писали задолго до нейросетей; модели выучили его из госдокументов и рефератов и воспроизводят с удвоенной частотой. Другая половина — синтаксис, протащенный из английского черновика, на котором модель «думала».

Скилл помогает двум группам:

  • тем, кто хочет меньше ИИ-стиля в своих текстах: статьях, документации, постах, письмах;
  • тем, чей текст пойдёт на проверку в «Антиплагиат» и кому не нужны ложные срабатывания модуля ИИ-детекции на собственном тексте.

Пример

До (типичный ответ модели на просьбу написать абзац про ИИ в медицине):

В современном мире искусственный интеллект играет ключевую роль в развитии здравоохранения. Данная технология открывает новые возможности для диагностики и лечения заболеваний. Стоит отметить, что внедрение ИИ осуществляется в рамках комплексного подхода к цифровой трансформации отрасли. Кроме того, нейросетевые модели позволяют значительно повысить точность диагностики. Исследования показывают, что такие системы обеспечивают высокую эффективность при анализе медицинских изображений.

Детектор: 98/100, «сильный ИИ-стиль». В пяти предложениях он нашёл размытую ссылку на авторитет («Исследования показывают»), пять слов-маркеров, две оценки без чисел, пять случаев канцелярита, шаблонный переход и скопление слов второго уровня.

После правки скиллом:

ИИ в медицине пока применяют в основном для анализа изображений и помощи в диагностике. Насколько такие системы точнее врача, в исходном тексте не сказано. Нужны цифры и ссылка на исследование, иначе утверждение не проверить.

Проверка: один проход. Скилл убрал разбег, штампы и пустые оценки. Число и источник он не выдумал, а пометил как пробел: исходник их не давал. Это правило «никогда не добавляй» из исходного проекта. Для научного текста оно важнее всего остального.

Установка

Claude Code: плагин

claude plugin marketplace add ormeilu/avoid-ai-writing-russian
claude plugin install avoid-ai-writing-russian@avoid-ai-writing-russian

Плагин ставит оба скилла, avoid-ai-writing-russian и antiplagiat, вместе с детектором. Детектору нужен uv.

Claude Code, Codex и другие агенты: папка скилла

Клонируйте репозиторий и скопируйте папки скиллов туда, где агент их ищет. Детектор лежит в корне репозитория, а скиллы зовут его командой uv run --project ../.. aiw-ru …, поэтому удобнее ссылка, а не копия:

git clone https://github.com/ormeilu/avoid-ai-writing-russian.git ~/src/avoid-ai-writing-russian
ln -s ~/src/avoid-ai-writing-russian/skills/avoid-ai-writing-russian ~/.claude/skills/avoid-ai-writing-russian
ln -s ~/src/avoid-ai-writing-russian/skills/antiplagiat ~/.claude/skills/antiplagiat

Для Codex используйте ~/.codex/skills/ или ~/.agents/skills/, для Cursor — правила проекта. Агентам без поддержки SKILL.md можно передать текст SKILL.md и references/patterns.md как инструкцию.

Детектор

Скиллам нужен uv: при первом запуске он сам поставит Python 3.12 или новее и зависимости детектора (regex, rich, pydantic). Без uv скилл работает, но проверки будут только модельными, и он об этом скажет.

Отдельно от скиллов детектор ставится из PyPI:

uv tool install aiw-ru

Или запускается без установки: uvx aiw-ru scan статья.md. Подойдёт и pip install aiw-ru.

Только команда, без плагина

Скиллы лежат и в пакете. Если стоит только aiw-ru, их выводит сама команда:

aiw-ru skill
aiw-ru skill avoid-ai-writing-russian

Первая показывает список скиллов, вторая печатает SKILL.md для агента. Вызовы детектора в нём уже переписаны на aiw-ru …, а каталог примет выводит aiw-ru skill avoid-ai-writing-russian references/patterns.md. Агенту достаточно сказать: «выполни aiw-ru skill avoid-ai-writing-russian и работай по этому скиллу».

Необязательные модели

Кроме правил, у детектора есть несколько моделей, обученных на русской части корпуса LLMTrace. Каждая оценивает вероятность, что текст написала языковая модель:

  • трансформер: дообученный русский BERT в ONNX, около 30 МБ, работает на CPU без torch (карточка);
  • LightGBM на признаках детектора: около 10 МБ, легче и быстрее, но заметно менее точный (карточка);
  • ModernBERT: самый точный, но около 140 МБ и в несколько раз медленнее трансформера; ставится только по имени, aiw-ru models install modernbert (карточка);
  • mini-frida: по ROC AUC между ModernBERT и трансформером, около 130 МБ и в 3 раза медленнее трансформера, а при пороге 50 % чаще принимает людей за ИИ; ставится только по имени, aiw-ru models install mini-frida (карточка).

Вместе со скиллами модели не ставятся, агент предложит их сам и поставит, только если вы согласитесь. Вручную:

uv tool install "aiw-ru[ml]"
aiw-ru models install

Без имени ставятся трансформер и LightGBM, aiw-ru models install lightgbm ставит только лёгкую. Сравнить модели до скачивания можно командой aiw-ru models info: качество на корпусе, скорость, память и размер каждой; aiw-ru models info ИМЯ показывает одну модель подробно. Пакеты extra ml занимают около 200 МБ. Файлы моделей скачиваются в общий кэш ~/.cache/huggingface. Если стоят несколько, вероятность в scan, antiplagiat и classify даёт первая из установленных в порядке ModernBERT, трансформер, mini-frida, LightGBM: по доле людей, которых модель принимает за ИИ (4,3 %, 7,2 %, 9,5 % и 16,5 % на test). Другую модель выбирает --model. В карточках на Hugging Face результаты на LLMTrace по жанрам, длине текста и моделям-генераторам.

На macOS LightGBM нужна библиотека libomp: brew install libomp. Без неё aiw-ru models так и скажет. Для Mac на Intel у onnxruntime нет сборок, там работает только LightGBM.

Как пользоваться

Обычной фразой агенту:

  • «убери ИИ-стиль из этого абзаца»;
  • «просканируй glava2.md, ничего не правь»;
  • «почисти README.md на месте, профиль docs»;
  • «перепиши прямее для Telegram-канала»;
  • «подготовь главу к антиплагиату» (включается под-скилл).

Режимы: rewrite (по умолчанию, вернуть исправленный текст), detect (только найти), edit (править файл на месте точечными правками).

Профили контекста меняют строгость правил:

Профиль Для чего
vak диссертация, автореферат, статьи ВАК/РИНЦ, отчёты по НИР
docs документация, README, инструкции
blog статьи, эссе, Хабр (по умолчанию)
telegram посты в каналах и соцсетях
business-email деловые письма, КП, письма инвесторам
chat переписка и комментарии: только грубые приметы

Профили голоса (casual, professional, technical, warm, blunt) задают звучание правки. Голос проявляет то, что уже есть в тексте, но не придумывает автору мнений и опыта.

Скилл сохраняет цитаты, код, формулы, таблицы, ссылки на литературу и числа. Правку он заканчивает отчётом: сколько было проходов, какие проверки запускались, какие находки оставлены и почему.

Под-скилл antiplagiat

Включается, когда текст идёт на проверку. Порядок работы:

  1. Замер: оценка доли «ИИ-текста» по фрагментам и список рискованных абзацев с причинами.
  2. Чистка технических артефактов: невидимые символы и латинские буквы внутри русских слов. Из-за них система помечает документ как подозрительный, и это хуже любого процента.
  3. Правка подсвеченных фрагментов по правилам основного скилла, в первую очередь ритма и пунктуации: классификаторы смотрят на структуру сильнее, чем на слова.
  4. Повторный замер и проверка сохранности формул, чисел и ссылок.
  5. Калибровка детектора по вашим реальным отчётам. Если модель ещё не откалибрована, агент сам попросит прошлые отчёты «Антиплагиата»: с ними оценка ближе к тому, что система скажет именно о ваших текстах. Всё считается локально.

Скилл работает с вашим собственным текстом. Заимствования он помогает оформить как цитирования (кавычки и ссылка на источник), чтобы система засчитала их законно. Маскировать чужой текст перефразированием, синонимайзером или подменой символов он не будет: это выдача чужой работы за свою, а не спор с плохим детектором.

Детектор

aiw-ru scan статья.md --context vak
aiw-ru antiplagiat глава1.md
aiw-ru validate исходник.md правка.md
aiw-ru calibrate --doc глава1.md --marked глава1-подсвечено.txt
aiw-ru calibrate --doc глава2.md --share 34
aiw-ru classify статья.md

scan печатает оценку 0–100, статистику ритма и таблицу находок: уровень P0–P2, строка и столбец, примета, фрагмент и подсказка. Таблица подстраивается под ширину терминала, длинный текст переносится внутри ячейки. Цвет включается только в терминале; NO_COLOR=1 его выключает, FORCE_COLOR=1 включает принудительно. Параметр --json даёт машиночитаемый вывод, --jsonl проверяет пачку документов (по документу в строке, {"text": "…"}, ответ тоже по строке на документ), --fail-above N возвращает код 1, если оценка выше N (удобно в CI для документации). Под таблицей и в поле catalog JSON перечислены файлы каталога скилла с разделами, где описаны условия и исключения найденных примет: агенту хватает открыть их, а не весь каталог.

antiplagiat делит текст на фрагменты (абзацы, короткие склеиваются), описывает каждый семью признаками и переводит их в вероятность логистической моделью. Признаки: плотность примет, однообразие длины предложений, типичная для моделей длина предложения, канцелярит, бедная пунктуация, однообразные начала предложений, бедный словарь. Доля ИИ-текста считается по знакам, как в отчёте системы.

validate сравнивает исходник и правку. Код, формулы, URL, числа, ссылки [12] и [@key], таблицы, цитаты и структура заголовков должны остаться на месте, а находок должно стать не больше. Разрешённые правки нарушением не считаются: «ёлочки» вместо прямых кавычек, запятая вместо десятичной точки, удалённый utm_source=chatgpt.com.

Ещё validate сверяет факты (идея из humanizer-ru). Правка не должна снимать оговорки вроде «обычно», «примерно», «от 5000», «по-видимому» и добавлять имена, названия, аббревиатуры, числа словами и месяцы, которых нет в исходнике. Свести стопку оговорок к одной можно: «потенциально может» → «может» нарушением не считается. Снятое одиночное «может», новые слова-претензии («впервые», «всегда», «единственный») и мелкие числа словами («один», «оба») идут предупреждениями, в JSON это поле warnings. Код выхода они не меняют: без морфологии такие места не отличить от законной правки, их нужно сверить глазами.

calibrate дообучает модель antiplagiat на ваших отчётах. Лучше всего работает разметка фрагментов: текстовый файл с кусками, которые система подсветила как сгенерированные, по одному на абзац через пустую строку. Собирать его руками не обязательно: агент выпишет фрагменты сам из PDF отчёта или скриншотов. Если под рукой только итоговая цифра, передайте её через --share: так подстраивается общая строгость модели, но не веса признаков. Образцы накапливаются в .aiw-ru.json, и с каждым отчётом оценка точнее отражает поведение системы на ваших текстах. Отчёты, где система ничего не пометила, тоже пригодятся: это примеры человеческого текста. В файле калибровки только модель и числовые признаки фрагментов, самого текста там нет. В общий репозиторий его всё равно не коммитьте: antiplagiat читает .aiw-ru.json из текущей папки, и ваша калибровка исказит оценку соавторам (в этом репозитории файл уже в .gitignore). Текст есть в файлах с фрагментами из отчётов, их держите вне публичных репозиториев.

skill печатает скиллы для агента, у которого нет плагина: без аргументов список, с именем SKILL.md, с именем и путём файл скилла (references/vocabulary.md).

classify отвечает вероятностью от необязательной модели (--model выбирает какой; models info сравнивает их до скачивания). Без установленной модели команда подскажет, как её поставить. Если модель есть, scan и antiplagiat показывают эту вероятность рядом со своей оценкой, а в JSON она лежит в поле classifier вместе с порогом. Вероятность, которая ближе 15 пунктов к порогу, помечена «близко к порогу» (nearThreshold в JSON): модель не уверена. classify --all показывает вероятности всех установленных моделей рядом и пишет, расходятся ли они. Вероятность модели — такой же сигнал, как находки правил: модели уверенно ошибаются на коротких текстах и в жанрах, которых мало в корпусе. Скилл сверяет её с находками и не правит текст ради цифры.

Из Python:

from aiw_ru import analyze

result = analyze(text, "academic")
print(result.score, len(result.issues))

Результаты — модели pydantic: result.to_dict() даёт тот же JSON, что и aiw-ru scan --json, без поля catalog.

Что ловит каталог

Полный каталог лежит в skills/avoid-ai-writing-russian/references/, по файлу на тему. Агент не читает его целиком: он ищет кандидатов по краткому каталогу в SKILL.md и открывает файл темы, только когда правит находку из неё. Коротко:

Группа Примеры
Следы чат-бота «Надеюсь, это поможет», «Отличный вопрос!», «как языковая модель»
Словарь уровня 1 «является», «играет ключевую роль», «уникальный», «открывает новые возможности», «в современном мире»
Канцелярит (1Б) «осуществляется», «данный», «в рамках», «в целях», «посредством» — совет по стилю, не довод об авторстве
Кальки «адресовать проблему», «это про», «на ежедневной основе», «имеет смысл», «в моменте»
Синтаксис «не просто X, а Y», цепочки родительного падежа, пассив без деятеля, навязчивые тройки
Авторитет и значимость «исследования показывают», «эксперты считают», «знаменует новую эру», оценки без чисел
Соцсети «И вот тут начинается самое интересное», «Сохраняйте, пригодится», «Встречайте:»
Типографика тире-связки, дефис вместо тире, прямые и английские кавычки, десятичная точка, Title Case
Ритм одинаковая длина предложений и абзацев, бедный словарь, одинаковые начала
Технические отпечатки невидимые символы, подмена букв, [Вставьте источник], oaicite, utm_source=chatgpt.com

Ограничения

  • Приметы — это сигналы, а не доказательство авторства. Их выдают и люди, особенно в научном и канцелярском регистре. Не используйте детектор как единственное основание для решений об академической нечестности, найме или публикации.
  • Как классификатор детектор слабый, и это видно по цифрам. На русской части тестового набора LLMTrace оценку «много примет» и выше получили 5,9 % из 21 417 человеческих текстов (у новостей 13 %) и 16,7 % из 14 064 сгенерированных. Больше половины сгенерированных текстов детектор счёл чистыми. Он показывает, что править в тексте, а не кто его написал.
  • Модель antiplagiat — приближение. Классификатор системы «Антиплагиат» закрыт. Веса по умолчанию подобраны вручную на небольших примерах, а не обучены на корпусе. Калибровка подстраивает веса под то, как система ведёт себя на ваших текстах, но точную цифру отчёта не гарантирует.
  • Морфология упрощена: основы со звёздочкой вместо полноценного морфологического анализатора. Редкие формы могут проскочить, омонимы могут дать ложное срабатывание.
  • Регулярные выражения не видят смысла. Правила, которые требуют суждения (ложный деятель, бег на месте, выдуманный контраст), есть только в скилле, детектор их не ищет.

Разработка

uv sync --group dev --group train
uv run prek install --hook-type pre-commit --hook-type commit-msg --hook-type pre-push
uv run pytest
uv run prek run --all-files

uv sync --group dev --group train ставит детектор, инструменты разработки (группа dev) и зависимости для обучения модели (группа train); без групп ставится только детектор, как у пользователя скилла. Хуки prek прогоняют ruff, ty, самопроверку документации детектором и синхронность версий. Тесты покрывают разбор текста, каждое правило детектора, корпус живых и шаблонных текстов шести жанров, CLI, скрипты выпуска и сами скиллы: шапки SKILL.md, ссылки, связь разделов каталога с типами находок детектора, примеры из каталога.

Поведение скилла на живом агенте проверяет uv run python evals/run.py: двенадцать случаев (защищённые цитаты, попытка внедрить инструкцию в текст, ловушка на выдуманные числа, режим только поиска и другие) с автоматической оценкой ответа. В CI этот прогон не входит.

Хуки prek перед коммитом проверяют гигиену файлов, секреты, формат, типы, невидимые символы и сообщение коммита (на русском); перед отправкой запускают тесты. Правила участия — в CONTRIBUTING.md, история изменений — в CHANGELOG.md.

Выпуски

uv run python scripts/release.py patch
git push --follow-tags

Скрипт переносит раздел «Не выпущено» из CHANGELOG в новую версию, обновляет версию в pyproject.toml, манифестах, скиллах и CITATION.cff, делает коммит и тег. По тегу GitHub Actions публикует пакет на PyPI через доверенную публикацию (без токенов в секретах) и создаёт выпуск с архивом скиллов, контрольными суммами и заметками из CHANGELOG.

Как сослаться

Если проект пригодился в исследовании, данные для ссылки лежат в CITATION.cff; GitHub показывает их кнопкой «Cite this repository».

Благодарности

Огромное спасибо Конору Бронсдону за avoid-ai-writing. Без этого проекта русской версии не было бы. Оттуда взяты режимы работы, договор о правке, уровни серьёзности, трёхуровневый словарь, профили контекста и голоса, самоисключение для текстов о приметах и правило «никогда не добавляй». Отдельно спасибо за то, что исходный проект честно называет свои находки сигналами, а не доказательствами, и держит это правило во всех решениях.

Спасибо авторам и участникам, на чьи находки опирается исходный проект и, через него, этот: blader/humanizer, brandonwise/humanizer, Aboudjem/humanizer-skill, isatimur/de-slop, welttowelt/stop-slop-refined, LLM cliché highlighter Саймона Уиллисона и tropes.fyi.

Русская часть многим обязана традиции борьбы с канцеляритом, которая старше нейросетей на полвека: Корнею Чуковскому, придумавшему само слово «канцелярит» в книге «Живой как жизнь», Норе Галь с её «Словом живым и мёртвым» и Максиму Ильяхову и Людмиле Сарычевой с книгой «Пиши, сокращай».

Лицензия

MIT. Copyright (c) 2026 Conor Bronsdon — исходный проект; Copyright (c) 2026 Ilya Lubenets — русская адаптация. Подробности о происхождении частей — в NOTICE.md.

Release files for aiw-ru 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aiw-ru 2.0.0
File Size Uploaded
aiw_ru-2.0.0.tar.gz 171.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aiw-ru 2.0.0
File Interpreter ABI Platform
aiw_ru-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 342.6 kB

Release files / aiw_ru-2.0.0.tar.gz

Download URL aiw_ru-2.0.0.tar.gz
Size 171.2 kB
Tags Source
SHA-256 checksum
How to use checksums
07c46282de7db6fdd60716fa4f79ba30d29750991cb1af8f1ef39724d759b73b
BLAKE2b-256 checksum
How to use checksums
b35bfd32462b4f20854a71edec0f0152145bab95e12ca98b3f16a81176ca13c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / aiw_ru-2.0.0-py3-none-any.whl

Download URL aiw_ru-2.0.0-py3-none-any.whl
Size 171.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
be6dd09bfe5c1f7fcf05faf828a4a0f583ab81fcac1679d3eaa111faa118f159
BLAKE2b-256 checksum
How to use checksums
f2b6ece04745c5296e36a5522f6b10c2898d380b0d4eb3a8b8a672346466f257
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page