Skip to main content

Humanizer-ru — очеловечивание русского ИИ-текста

License: MIT GitHub stars Версия Regex checks Skills.sh

English version → README.en.md

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

Здесь 56 паттернов (25 базовых и 31 расширение) и 40 проверяемых regex-маркеров классов A и B; у 38 из них полная запись доказательств в реестре. Проверки гоняет CI. Каталог skills.sh сообщает об успешных проверках Gen Agent Trust Hub и Socket; про красную плашку Snyk — в разделе «Безопасность».

До:

🚀 Инновации: Мы добавили пакетную обработку, горячие клавиши и офлайн-режим. Это безусловно является свидетельством нашего стремления к качеству. Кроме того, эти функции обеспечивают бесшовный, интуитивно понятный и мощный пользовательский опыт — гарантируя эффективность. Эксперты считают, что это революция.

После:

Мы добавили пакетную обработку, горячие клавиши и офлайн-режим.

Скилл убирает штампы, но не дописывает факты за автора. В примере выше всё из варианта «После» уже было в исходнике.

Что ему давать

Дайте скиллу готовый фрагмент. Он найдёт следы генерации и по просьбе перепишет текст. SKILL.md — инструкция агента: её подгружают на задачу анализа или правки вместе с нужными справочниками из references/. PERSONA.md — другое: короткие правила живого тона для диалога, а не для проверки текста. Не кладите весь SKILL.md в системный промпт чат-клиента: это замедлит ответы, но не сделает разговор живее.

Одноимённые проекты — не путать

В GitHub есть другие репозитории с именем humanizer-ru, не связанные с этим проектом. Позиции у них разные:

Проект Фокус Позиция по детекторам
Vladimir-Human/humanizer-ru — этот проект Редактор русского текста: 56 паттернов, 40 regex-маркеров, слепые парные прогоны Снимает метки в тексте и файлах, которыми владеет пользователь (невидимые символы, статистические знаки, C2PA/EXIF/XMP; недетерминированные техники: без гарантии результата; пиксельный SynthID: вне покрытия, см. removal-matrix), снижает статистические следы машинной генерации в тексте, которым владеет пользователь; снятие меток — открытая возможность продукта. Обход детекторов не заявляется как гарантия: публикуются только относительные дельты детектируемости до/после с контролем ложных срабатываний. Не портить живое и не дописывать факты — правила без исключений.
smixs/humanizer-ru Скилл «humanizer & detector»: правка и проверка одним инструментом; в лидерборде участвует его детерминированный линтер —
ilyautov/humanizer-ru Скилл-гуманизатор: в описании заявлена подгонка под метрики GPTZero, DivEye, RuBERT, FAQ даёт технику обхода Техника обхода — в их FAQ
blader/humanizer Англоязычный скилл того же жанра, опубликован на три дня раньше —

Мы не связаны ни с одним из них. Декларация этого проекта: «снятие меток — открытая возможность продукта; обход детекторов не заявляется как гарантия»; рамка изложена в docs/FRAMEWORK.md, границы техник снятия — в references/removal-matrix.md.

Установка за 30 секунд

npx skills add https://github.com/vladimir-human/humanizer-ru --skill humanizer-ru

Если нужен не скилл для агента, а обычная команда в терминале — пакет ставится из PyPI:

pip install humanizer-ru

Попробовать до установки: онлайн-демо regex-слоя или demo/index.html офлайн — текст обрабатывается в браузере и не покидает машину. Демо показывает только детерминированный слой (поиск артефактов); переписывание делает агент со скиллом, а не браузер.

Установщик команды npx skills add предложит выбрать агентов: Claude Code, Codex, Cursor, Gemini CLI, OpenCode и другие среды с поддержкой формата Agent Skills. Сам скилл состоит из текстовых инструкций и не выполняет код при работе. Команда npx запускает сторонний Skills CLI; если хотите проверить каждый файл до установки, используйте раздел «Установка вручную».

Установка вручную

Скилл humanizer-ru ставится в Claude.ai и в локальный CLI Claude Code. Для команд — свой путь, через администратора организации (см. раздел 2).

0. Проверка перед установкой

Скилл не выполняет код при активации: рабочая часть — только текстовые файлы разметки. В репозитории есть вспомогательные Python-скрипты (scripts/) для тестов и CI — они запускаются только вручную или в GitHub Actions. Правило одно для любых скиллов: сначала прочитать, потом ставить.

  1. Откройте SKILL.md и references/ прямо на GitHub и убедитесь, что содержимое вас устраивает.
  2. Ставьте только выпуски со страницы Releases (аннотированные теги вида vX.Y.Z), а не произвольное состояние ветки.
  3. После распаковки убедитесь, что внутри лишь текстовые файлы и манифесты: SKILL.md, оба README, CHANGELOG.md, PERSONA.md, обе SECURITY, PRIVACY_POLICY.md, LICENSE, gemini-extension.json, references/, scripts/, knowledge/ и каталоги плагин-манифестов (.claude-plugin/, .codex-plugin/, .cursor-plugin/, agents/, commands/) — ничего исполняемого при установке. Каталогов .github/, research/ и tests/ в архиве нет: валидаторам, которым нужны корпуса и фикстуры, требуется полный клон репозитория.

1. Claude.ai (Веб-интерфейс)

  1. Откройте страницу Releases этого репозитория, выберите свежий выпуск и скачайте приложенный к нему архив humanizer-ru.zip. Это собранный архив скилла — состав перечислен в шаге 0. Source code (zip), который GitHub добавляет к каждому выпуску, — полное дерево репозитория вместе с .github/, research/ и tests/; он нужен только тем, кто собирается запускать валидаторы.
  2. Зайдите в аккаунт Claude.ai и перейдите в Settings > Skills.
  3. Нажмите Upload skill и выберите скачанный архив.

Примечание. В humanizer-ru.zip файл SKILL.md лежит в корне архива, поэтому переупаковка не нужна. Она может понадобиться, только если вы взяли Source code (zip): там всё вложено в папку вида humanizer-ru-<номер версии>.

2. Организации (Enterprise & Team)

Администратор организации проверяет выпуск (см. шаг 0) и загружает его в общую библиотеку — скилл становится доступен всей команде.

3. API и локальные агенты (Claude Code)

Работаете через API (эндпоинт /v1/messages или аналоги) — передайте скилл параметром container.skills. Детали — в документации вашего клиента.

Локальная установка — с закреплением на теге выпуска, чтобы получить именно проверенное состояние:

mkdir -p ~/.claude/skills
git clone --branch v3.15.1 --depth 1 https://github.com/Vladimir-Human/humanizer-ru.git ~/.claude/skills/humanizer-ru

Или минимально — только карта скилла (без справочников references/; глубина проверки будет ниже):

mkdir -p ~/.claude/skills/humanizer-ru
cp SKILL.md ~/.claude/skills/humanizer-ru/

Если проверять каждый шаг вручную не нужно, быстрее поставить одной командой из каталога skills.sh — см. «Установка за 30 секунд» выше.

4. DeepSeek Harness (dsh)

dsh ищет скиллы в собственных каталогах. Проверено с dsh 0.1.0-rc.6 и 0.1.0-rc.8 (CI держит rc.8). Это developer preview: возможны несовместимые изменения, поэтому для другой версии сверяйтесь с её документацией.

Глобальная установка (все проекты и агенты профиля):

mkdir -p ~/.agents/skills
git clone --branch v3.15.1 --depth 1 https://github.com/Vladimir-Human/humanizer-ru.git ~/.agents/skills/humanizer-ru

Второй способ — бандл из подкаталога dsh/. Его ставит менеджер плагинов, профиль появляется при первом запуске, pnpm нужен на PATH:

dsh plugin --profile web add "github:Vladimir-Human/humanizer-ru#path:/dsh"

В бандле лежит копия SKILL.md, references/ и knowledge/; гейт check_bundle_sync.py держит её равной источнику. Снять бандл: dsh plugin --profile web remove humanizer-ru-dsh.

Команда установки (add) берёт ветку по умолчанию. Закрепить тег и подкаталог одной строкой не выходит: pnpm молча отбрасывает подкаталог, ставит репозиторий целиком обычной зависимостью и возвращает 0, а профиль остаётся без слоя. Проверено на dsh 0.1.0-rc.6.

Порядок поиска скилла в dsh (ближайший каталог побеждает): <проект>/.dsh/skills, <проект>/.agents/skills, ~/.dsh/skills, ~/.agents/skills. Каталог ~/.claude/skills dsh не сканирует: скилл, установленный туда по инструкции для Claude Code выше, в dsh не виден.

Использование

В Claude Code или другом агенте:

/humanize [вставьте текст]

Проверить без правки:

/audit [вставьте текст]

Или напрямую:

Очеловечь этот текст: [ваш текст]

CI-гейт для своих репозиториев

Репозиторий поставляет переиспользуемый composite action в каталоге action/. Он гоняет по вашим файлам ровно те же скрипты, что и CI этого проекта, — на Python со стандартной библиотекой, без внешних сервисов и без передачи текста куда-либо за пределы раннера GitHub Actions. Для работы нужен только permissions: contents: read (действие выполняет checkout и читает файлы).

Минимальный workflow в вашем репозитории, например .github/workflows/humanizer.yml:

name: humanizer-ru

on:
  push:
    paths: ['content/**/*.md', 'docs/**/*.md']
  pull_request:
    paths: ['content/**/*.md', 'docs/**/*.md']
  workflow_dispatch:

permissions:
  contents: read

jobs:
  humanizer:
    name: Следы машинной генерации
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - uses: Vladimir-Human/humanizer-ru/action@v3.15.1
        with:
          files: 'content/**/*.md docs/**/*.md'   # bash-глоб(ы)
          genre: neutral                          # для режима soft-threshold
          fail-on: class-a                        # или soft-threshold
          ref: ''                                 # checkout вашего репозитория (пусто — HEAD)

Входы action:

Вход По умолчанию Что делает
files **/*.md Файлы для проверки: один bash-глоб или несколько через пробел. Внутри действие включает globstar и nullglob, поэтому **/*.md заходит в подкаталоги.
genre neutral Жанр для мягких признаков: neutral, fiction, legal, academic, marketing, chat. Используется только при fail-on: soft-threshold.
fail-on class-a class-a — жёсткий regex-слой (check_markers.py --scan --class a: падает только класс A; контекстные маркеры класса B печатаются предупреждениями и вердикта не дают); soft-threshold — счётчик мягких признаков (scan_soft_signals.py --fail-multicat 3).
ref пусто Ref вашего репозитория для checkout. Пусто — текущий HEAD (для pull_request — merge-коммит по умолчанию).

Версия action закрепляется не входом ref, а строкой uses: Vladimir-Human/humanizer-ru/action@v3.15.1. Вход ref управляет тем, какое состояние проверяемого репозитория сканируется.

Ограничения и политика безопасности:

  • permissions: contents: read; действие ничего не публикует и не комментирует.
  • Текст не покидает раннер: скрипты из action/../scripts запускаются локально и не открывают сеть.
  • Внутри только python3 стандартной библиотеки и официальный actions/checkout (закреплён по SHA).

Что выбрать для гейта:

  • class-a — конвейерный минимум: ловите служебные ссылки и артефакты из интерфейсов (ppl-ai-file-upload, [citation:3], невидимые разделители и т.п.). Совпадение — повод снять маркер или проверить происхождение.
  • soft-threshold — лингвистическая сигнализация: --fail-multicat 3 роняет гейт, когда в тексте 3 и более мягких признаков из 2 и более категорий. Одного-двух не хватает: скрипт специально считает паттерны консервативно, вердикт об авторстве не выносит. Пороги действуют, пока не проверены на представительном корпусе; перебор порогов — в research/soft-threshold-sweep/.

Что делает

Прогоняет русский текст по 56 паттернам машинного письма (25 базовых и 31 расширение для русского) и 40 проверяемым regex-маркерам классов A и B, затем убирает следы. Опирается на Wikipedia:Signs of AI writing и Википедия:Признаки сгенерированности текста.

С версии 2.3 SKILL.md — это карта с деревом решений. Полное описание паттернов и проверок лежит в подключаемых файлах references/.

С версии 3.8 мягкий слой стал счётным. scripts/scan_soft_signals.py находит кандидатов по четырём категориям признаков, считает каждый паттерн один раз на текст и применяет пороги дерева решений; жанровые исключения берутся из references/false-positives.md. Скрипт печатает цитаты и рекомендацию объёма правки, вердикта об авторстве не даёт — Главное правило остаётся за агентом. Поведение на человеческом контрольном корпусе проверяемо: ни один из 26 человеческих текстов не копит сигналы в 2+ категориях (гейт --max-cats 1 в check_all); одиночные литературные тире и тройки классиков остаются в одной категории и гейт не роняют. На выводах русских моделей он находит кандидатов там, где regex-слой ничего не видит. Наружу идут только механические оси: снятие маркеров, чистота фактов, ложные правки (LEADERBOARD.md). Читаемость оценивает своя панель судей, но её числа мы держим при себе: панель односемейная, а позиционный шум описан в прогонах.

Доли «0 из N» публикуются с доверительным интервалом: 0 ложных срабатываний на 11 человеческих текстах — наблюдение 0/11, а не гарантированный ноль: Wilson 95% CI равен [0%; 25.9%]. Интервалы пересчитывает и сверяет scripts/check_confidence.py.

Архитектура

humanizer-ru/
├── SKILL.md                  # Карта, дерево решений, чек-лист
├── CHANGELOG.md              # Полная история версий
├── LEADERBOARD.md            # Механические оси: прогоны детекторов
├── PERSONA.md                # Компактные правила живого диалога
├── README.md / README.en.md  # Описание проекта (рус/англ)
├── SECURITY.md / SECURITY.en.md
├── CITATION.cff                # Карточка цитирования
├── LICENSE                     # MIT
├── dsh/                        # Бандл для DeepSeek Harness (вендор SKILL.md + references/ + knowledge/)
├── GOVERNANCE.md              # Роли, права выпуска, dormant-политика
├── CODE_OF_CONDUCT.md / CONTRIBUTING.md
├── PRIVACY_POLICY.md           # Короткая политика приватности
├── AGENTS.md                    # Карта репозитория для агентов-редакторов
├── gemini-extension.json        # Манифест Gemini CLI
├── .claude-plugin/              # Манифест Claude
├── .codex-plugin/               # Манифест Codex
├── .cursor-plugin/              # Манифест Cursor
├── agents/                      # Декларация агента OpenAI
├── commands/                    # Слэш-команды /humanize и /audit
├── knowledge/                   # Журнал фидбека владельца
├── docs/
│   └── FRAMEWORK.md            # Публичная методология проверяемости
├── scripts/
│   ├── check_markers.py          # Прогон regex-маркеров, режим --scan
│   ├── check_removal_parity.py  # Паритет «снятие ↔ детектор» новых способностей снятия
│   ├── check_self_prose.py      # Самоприменение: витринная проза ниже порога мягкого слоя
│   ├── check_spec.py             # Валидатор спецификации Agent Skills
│   ├── check_fixture_sources.py  # Валидатор реестра источников
│   ├── check_link_rot.py         # Гейт линк-рота реестра доказательств
│   ├── check_outward.py          # Валидатор черновиков исходящих текстов
│   ├── count_style_markers.py    # Счётчик стилевых нарушений
│   ├── check_docs.py             # Согласованность документации
│   ├── check_examples.py         # Гейт честности примеров До/После
│   ├── check_readme_parity.py    # Паритет и правдивость витрины RU/EN
│   ├── check_own_style.py        # Порог мягких признаков на свою прозу
│   ├── check_reference_maps.py   # Карты разбитых справочников
│   ├── check_budget.py           # Бюджет контекста по спецификации
│   ├── check_corpus.py           # Регрессия корпусов валидации
│   ├── check_adversarial.py      # Гейт adversarial-FP корпуса
│   ├── check_perf.py             # Скорость выражений на большом входе
│   ├── check_release.py          # Сборка и проверка релизного архива
│   ├── check_bundle_sync.py      # Синхронность вендора бандла dsh/
│   ├── check_pkg_sync.py         # Синхронность PyPI-пакета с корневыми скриптами
│   ├── export_markers.py         # Генератор machine-readable реестра markers.v1.json
│   ├── check_markers_export.py   # Гейт синхронности markers.v1.json
│   ├── filemarks/                # Слой A/B и метаданные файлов (inspect/clean)
│   ├── scan_soft_signals.py      # Счётчик мягких признаков
│   ├── check_json_output.py     # UTF-8 машиночитаемого stdout
│   ├── check_confidence.py       # Wilson CI для долей лидерборда
│   ├── threshold_sweep.py        # Свип порогов мягкого слоя
│   └── check_all.py              # Весь релизный чек-лист одной командой
├── eval/
│   ├── run_eval.py               # Нейтральный корпус для любого скилла
│   ├── blind_eval.py             # Слепая парная оценка эффекта
│   ├── HOW-TO-RUN.md             # Протокол прогона и границы метрик
│   ├── README.md                 # Карта eval и словарь метрик
│   ├── manifest.v1.json          # Схема нейтрального корпуса
│   ├── detect_eval.py            # Детектор-харнес «до/после»
│   ├── detectors/                # Адаптеры детекторов (контракт 0..1)
│   ├── run_triggers.py           # Гейт триггеров запуска скилла
│   ├── scenarios/                # Сценарные прогоны «не портить живое»
│   ├── ainl_calibration.py       # Калибровка на AINL-корпусе
│   ├── detect-results/           # JSON детекторных прогонов оси
│   ├── runs/                     # Парные прогоны (12 записей; см. runs/README.md)
│   └── results/                  # Отчёты прогонов целиком, включая
│                                 #   метрики не в пользу скилла
├── .github/workflows/        # CI: 9 конвейеров — regex-check, self-scan,
│                             #     link-check, no-anglicisms, validators,
│                             #     docs-check, release-check, dsh-install, demo-pages
├── references/               # 12 справочников; два разбиты на части (17 файлов)
├── research/                 # Протоколы, реестр, аудит и BACKLOG.md
└── tests/fixtures/           # Проверочные образцы

Полный чек-лист — одна команда: python scripts/check_all.py — 58 гейтов полного чек-листа (54 в --quick). Юнит-тесты — python -m unittest discover -s tests.

Содержательные паттерны

Шкала критичности: высокая — мгновенно выдаёт ИИ · средняя — сильный сигнал · низкая — слабый сигнал

# Паттерн Критичность
1 Усреднение — конкретика заменяется общими эпитетами «выдающийся», «титан» высокая
2 Раздувание значимости — «ключевой момент в истории отрасли» средняя
3 Перечисление СМИ — «цитировали NYT, BBC, Forbes» без контекста средняя
4 Деепричастные хвосты — «символизируя... отражая...» средняя
5 Рекламный язык — «жемчужина региона», «идеальное место» средняя
6 Размытые эксперты — «эксперты считают» без источника высокая
7 Вызовы и перспективы — «несмотря на трудности, продолжает процветать» низкая
8 Канцелярит — «осуществлять деятельность» средняя
9 Текст о тексте — описание статьи вместо предмета средняя
9a Академические клише-заполнители — «актуальность темы обусловлена», «целью работы является» средняя
6a Именованная псевдоатрибуция эпохи RAG — «критик подчеркнул непреходящее влияние» без опоры на источник средняя
6b Неодушевлённый субъект с глаголом намерения — «в исследовании рассматривается», «текст не стремится» средняя
6c Пустые открытия — «не секрет, что», «как известно» перед трюизмом средняя
6d Анонсы вместо дела — «в этой статье мы рассмотрим», «вы узнаете» средняя
6e Псевдоглубина — «вот что все упускают», «настоящий вопрос в том» средняя

Языковые паттерны

# Паттерн Критичность
10 Машинная лексика — «безусловно, синергия, ландшафт, погрузиться» высокая
11 Избегание «есть» — «представляет собой» вместо «это» средняя
12 «Не только..., но и» — отрицательные параллелизмы средняя
13 Правило трёх — принудительные тройки высокая
14 Погоня за синонимами — «герой... протагонист... персонаж» низкая
15 Ложные диапазоны — «от Большого взрыва до тёмной материи» средняя
15a Нелогичные деепричастные обороты — «используя метод, результаты улучшаются» средняя
15b Каскад смягчений — «возможно, в некоторых случаях, в зависимости от» средняя
15c Связки-переходы и заключительные обороты-затычки — «Однако стоит отметить...», «В заключение хочется отметить...» средняя
15d Резкая смена стилистики внутри одного текста низкая
15e Семантический сдвиг через английское поле — «основание науки», «адресовать проблему» средняя
15f Отсутствие идиоматики — длинный текст без единого живого оборота низкая
15g Пунктуационные кальки с английского — «Мир, где…», «Представь: …» средняя
15h Мат-знаки в прозе — «=», «±», «≥» вместо слов средняя
15i Повтор глагола в соседних предложениях — «говорит… говорит» средняя
15j Модальная неопределённость — «может стать», «призван решить» вместо факта средняя
15k Формулы-афоризмы — «X — новая валюта Y» средняя
15l Фальшивая доверительность — «честно?», «вот в чём штука» средняя
15m Двоеточия-подводки — «самое интересное:» средняя
15n Псевдо-сократика — «Зачем? Потому что.» средняя

Структурные и стилевые паттерны

# Паттерн Критичность
16 Избыток тире и жирного шрифта высокая
17 Эмодзи-списки — 🚀 Скорость: ... высокая
18 Кавычки — «лапки» вместо «ёлочек» средняя
19 Избыточные таблицы — таблица на 2–3 строки вместо текста высокая
20 Следы Markdown — **жирный**, #заголовки в обычном тексте высокая
21 Нарушение иерархии заголовков — прыжок с H1 на H3 высокая
21a Каждое Слово Заголовка С Прописной — «Ранняя Жизнь и Образование» высокая
21b Раздел-пересказ в конце текста — «Вкратце», «Подводя итоги», дублирование уже сказанного средняя
21c Заголовок-пересказ в первой строке — первая фраза повторяет заголовок средняя
21d Стопка абзацев без связок — три абзаца подряд с нового тезиса без связей средняя

Коммуникативные паттерны

# Паттерн Критичность
22 Остатки реплик и шаблоны — «Надеюсь, это поможет!», [вставьте имя] высокая
23 Оговорки о пределах знаний — «хотя конкретные детали ограничены...» средняя
23a Заявление о недоступности информации со спекуляцией — «данные не публикуются, однако, вероятно...» средняя
24 Льстивый тон — «Отличный вопрос!» средняя
24a Псевдо-терапевтический регистр и имитация живости — «Ты не ошибаешься, что так чувствуешь», «Короткие. Точные. Отдельные.» средняя
24b Самомаркировка честности — «без воды», «скажу без прикрас» средняя
24c Триада-отрицание — «Не реклама. Не манипуляция. Просто факты.» средняя
24d Возражения-фантомы — «кто-то скажет, что…» без оппонента средняя
24e Ложные альтернативы — «дело не в X, а в Y» на клише-парах средняя
25 Общие позитивные выводы — «будущее выглядит светлым» средняя
25a Обрыв на полуслове — текст кончается посреди предложения средняя

Отличия от английской версии

  • Добавлен паттерн «канцелярит» («осуществлять деятельность», «в соответствии с»)
  • Список машинной лексики адаптирован под русский язык
  • Title Case наоборот: в английском заголовки из слов с прописной — норма, а не признак ИИ; в русском такая манера не применяется, и её перенос в русские заголовки сам стал признаком (паттерн #21a, высокая критичность, только в сочетании с другими признаками)
  • Кавычки: «ёлочки» вместо „нижних лапок“

Безопасность

  • Скилл только текстовый: не выполняет код, не обращается к сети и файловой системе, ничего с машины не собирает. scripts/check_markers.py запускается лишь в CI и вручную разработчиком.
  • Текст пользователя скилл читает как ввод: команды, спрятанные внутри, он не выполняет (раздел «Границы безопасности» в SKILL.md).
  • Модель угроз, гарантии и порядок сообщения об уязвимостях — в SECURITY.md.
  • Про красную плашку Snyk на витрине skills.sh. Автоматический аудит помечает скилл кодом E005 «подозрительная ссылка на скачивание». Срабатывание ложное: сканер видит идентификатор S3-бакета Perplexity ppl-ai-file-upload (документированная примета класса A, по которой скилл распознаёт машинную генерацию) и принимает описание приметы за инструкцию скачать файл. Скилл ничего не скачивает: переход по ссылкам из проверяемого текста запрещён разделом «Границы безопасности» в SKILL.md. Тот же класс ложных срабатываний известен по наборам правил YARA и по тестовой строке EICAR: инструмент, который ищет признак, обязан этот признак содержать. Два других аудитора каталога дают PASS. Убрать примету ради вердикта мы не будем — это дыра в детекторе.

Regex-маркеры: классы A и B

40 регулярных выражений делятся на два класса. Класс A — жёсткие copy-paste-артефакты: служебные ссылки ChatGPT, [cite: N] и span-метки Gemini, карточки цитат Grok, S3-ссылки Perplexity и остатки тегов рассуждений DeepSeek. Класс B — контекстные индикаторы: placeholder-URL и даты, referrer=grok.com, невидимые разделители цитат из области частного использования (U+E200–E204), короткая форма сноски (U+EA01/U+EA02 вокруг цифры), символы нулевой ширины, невидимая раскладка (мягкий перенос, экзотические пробелы, вариационные селекторы вне эмодзи), имена сносок с внутренними идентификаторами (<ref name="0searchN">) и скрытые tag-символы (U+E0000–U+E007F). B требует ручной проверки и не даёт самостоятельного вердикта.

У каждого маркера три фикстуры: прямая, отрицательная и граничная. Маркеры с доказательной цепочкой дополнительно проверяются по research/fixtures/marker-sources.json. Политика обновлений разделяет устойчивое ядро (правила и границы ложных срабатываний) и быстрый слой (модельные артефакты): быстрый слой меняем только с образцами и источником, класс A/B при этом сохраняется.

Полная запись доказательств — неизменяемая ссылка на источник, дата обращения, дословный образец, класс доказательства и fixture — есть у 38 из 40 маркеров. Остальные закрыты только фикстурами.

Маркер Источник Регулярное выражение
:contentReference[oaicite:N]{index=N} OpenAI ChatGPT :contentReference\[oaicite:\d+\]\{index=\d+\}
oaicite:7 (усечённая форма метки) OpenAI ChatGPT oaicite:\d+
oai_citation:N‡ OpenAI ChatGPT oai_citation:\d+‡
attributableIndex в JSON Внутреннее поле разметки JSON-ответов при использовании инструментов \battributableIndex\b
turn0search0 OpenAI веб-поиск turn\d+search\d+
turn0fetch0 OpenAI загрузка страниц turn\d+fetch\d+
<ref name="0search12"> Контекстный след внутреннего инструмента в имени вики-сноски <ref\b[^>]*\bname=["']\d+(?:search|fetch|file|image|news|video|ref)\d+["']
?utm_source=chatgpt.com OpenAI ChatGPT [?&]utm_source=chatgpt\.com
?utm_source=openai OpenAI API [?&]utm_source=openai
attached_file:// OpenAI ChatGPT attached_file:\/\/
grok_card:// xAI Grok grok_card:\/\/
vertexaisearch.cloud.google.com/grounding-api-redirect Google Gemini vertexaisearch\.cloud\.google\.com/grounding-api-redirect
[^N^] Microsoft Copilot \[\^\d+\^\]
【N†source】 OpenAI Assistants 【\d+(?::\d+)?†source】
citeturn0file0 OpenAI ChatGPT (поток) citeturn\d+[a-z]+\d+
turn0file2, fileciteturn0file2turn0file6 OpenAI file_search turn\d+file\d+
\]\(sandbox:/mnt/data/...\) OpenAI ChatGPT (анализ данных) \]\(sandbox:/mnt/data/
Невидимые символы U+E200–E204 OpenAI ChatGPT (служебные разделители цитат) [\ue200-\ue204]
Короткая форма сноски: цифра в U+EA01/U+EA02 (новое в v3.2) OpenAI ChatGPT [\uea01\uea02]
<think>…</think> DeepSeek и другие рассуждающие модели (?m)^\s*</?think>|</think>\s*$
Сцепка ISO+3ISO+3 OpenAI ChatGPT (ошибка отрисовки сносок) [A-Za-z\u0410-\u042f\u0430-\u044f\u0401\u0451)]\+\d+(?=[A-Z\u0410-\u042f\u0401][A-Za-z\u0410-\u042f\u0430-\u044f\u0401\u0451&.\-]*(?: [A-Z\u0410-\u042f\u0401][A-Za-z\u0410-\u042f\u0430-\u044f\u0401\u0451&.\-]*){0,3}\+\d)
[cite_start] Google Gemini (анализ PDF) \[cite_start\]
[cite: 8], [Cite: 12], [cite: 19, 20, 21] Google Gemini (ссылка на фрагменты источника; расширено в v3.2) \[[Cc]ite:\s?\d+(?:,\s?\d+)*\]
[span_N] start_span / end_span (новое в v3.5) Google Gemini (внутренние границы фрагментов) \[span_\d+\][\[(](?:start_span|end_span)[\])]
:::writing{variant="document" id="68427"} Writing-разметка интерфейса; атрибуция версии не подтверждена evidence registry :::\w+\{variant
turn0image0, turn0news0, turn0video0, turn0ref0 OpenAI ChatGPT (мультимедиа-инструменты) turn\d+(?:image|news|video|ref)\d+
?utm_source=copilot.com Microsoft Copilot [?&]utm_source=copilot\.com
?referrer=grok.com xAI Grok [?&]referrer=grok\.com
<grok-card ... data-type="citation_card"> xAI Grok (XML-тег карточки) <grok-card\b[^>]*\bcitation_card\b
grok_render_citation_card_json={...} xAI Grok (JSON карточек) grok_render_citation_card_json
【85†L261-269】, 【854†L119-L123】 DeepSeek и производные (ссылки на строки) 【\d+†L\d+(?:-L?\d+)?】
[attached_file:N], [web:N] Perplexity (скобочная форма ссылок, осень 2025) \[(?:attached_file|web):\d+\]
[citation:3] Perplexity и другие поисковые ИИ \[citation:\d+\]
citegenerated-reference-identifier ChatGPT (сгенерированный идентификатор) citegenerated-reference-identifier
INSERT_SOURCE_URL, URL_HERE, PASTE_*_URL_HERE Placeholder-URL из шаблонных ответов \b(?:INSERT_SOURCE_URL(?:_\d+)?|URL_HERE|PASTE_\w+_URL_HERE)\b
2025-XX-XX, 2022-11-XX Placeholder-даты из шаблонных ответов (чаще всего «дата обращения») \b(?:19|20)\d{2}-(?:0[1-9]|1[0-2]|[Xx]{2})-[Xx]{2}\b
ppl-ai-file-upload в URL (новое в v3.5) Perplexity (ссылки на Amazon S3-bucket) ppl-ai-file-upload
Символы нулевой ширины U+200B–U+200D, биди-контролы U+202A–U+202E/U+2066–U+2069, невидимые операторы U+2060–U+2064, межстрочные аннотации U+FFF9–U+FFFB, BOM U+FEFF (класс B, v3.11) Скрытая разметка в тексте из интерфейсов; U+200D внутри эмодзи-последовательностей исключён guard-ом [\u200b\u200c\u200e\u200f\u202a-\u202e\u2060-\u2064\u2066-\u2069\ufeff\ufff9-\ufffb]|(?<![\U0001f000-\U0001faff\u2600-\u27bf\ufe0f\U0001f1e6-\U0001f1ff])\u200d(?![\U0001f000-\U0001faff\u2600-\u27bf\ufe0f\U0001f1e6-\U0001f1ff])
Невидимая раскладка: мягкий перенос U+00AD, пробелы U+1680/U+205F/U+3000, вариационные селекторы вне эмодзи (класс B, v3.11) Невидимые метки раскладки; наборные пробелы U+2000–U+200A исключены как легитимные в оцифрованных классиках \u00ad|[\u1680\u205f\u3000]|(?<![\U0001f000-\U0001faff\u2600-\u27bf\U0001f1e6-\U0001f1ff])[\ufe00-\ufe0f](?![\U0001f000-\U0001faff\u2600-\u27bf\U0001f1e6-\U0001f1ff])
Скрытая ASCII-нагрузка в блоке Tags U+E0000–U+E007F (класс B, v3.15) Стеганографические водяные знаки (SteganoPrompt, arXiv:2605.16336): chr(0xE0000+ord(c)), переживает копипаст; флаги-эмодзи исключены guard-ом (?<![\U0001f3f4\U0001f3f3\ufe0f\U000e0000-\U000e007f])[\U000e0000-\U000e007f]

Полный список с дословными образцами — в references/test-fixtures.md.

Подлог источников (новое в v2.3)

Отдельный класс проверок для текстов со ссылками: 404, DOI ведёт на чужую статью, несуществующий ISBN, автор умер до даты публикации, книжная ссылка без номера страниц. См. references/source-fabrication.md.

Границы ложного срабатывания (новое в v2.3)

Длинное тире у Цветаевой и Бродского, изогнутые кавычки от автозамены macOS, правило трёх в риторической прозе, канцелярит в юридическом документе — это не признаки ИИ. Скилл намеренно не исправляет такие случаи. См. references/false-positives.md.

Отпечатки моделей (новое в v2.3)

references/llm-fingerprints.md не ведёт каталог актуальных версий моделей. Он описывает уровни доказательств, воспроизводимые артефакты и локальные наблюдения с явными ограничениями атрибуции. Версию или доступность модели нельзя выводить из стилистического признака без первичного датированного источника. Там же собраны ручные мягкие сигналы русских моделей — GigaChat, Алисы и YandexGPT: они помечены как наблюдения без корпусного подтверждения, регулярных выражений для них нет.

Источники

История изменений

Актуальная версия — на значке в начале страницы. Полную историю изменений смотрите в CHANGELOG.md и на странице GitHub Releases.

Лицензия

MIT

Metadata

Release files for humanizer-ru 3.15.1

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

Source distribution (sdist)

Source distribution for humanizer-ru 3.15.1
File Size Uploaded
humanizer_ru-3.15.1.tar.gz 99.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for humanizer-ru 3.15.1
File Interpreter ABI Platform
humanizer_ru-3.15.1-py3-none-any.whl Python 3 none any Details

Total release size: 157.8 kB

Release files / humanizer_ru-3.15.1.tar.gz

Download URL humanizer_ru-3.15.1.tar.gz
Size 99.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7fe69085488bac23ba85c497f0ec80c72a4f0942f1fd4ad73b0504cd481d765d
BLAKE2b-256 checksum
How to use checksums
13a57a41554bb51fbe1d88a153f1354e9a9f1efa134b0f33a51accf2c75e0a0a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.9

Release files / humanizer_ru-3.15.1-py3-none-any.whl

Download URL humanizer_ru-3.15.1-py3-none-any.whl
Size 57.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ef0a93523396f54ce60760469f149b64b2dba674a328759a1080cbc67663d4a4
BLAKE2b-256 checksum
How to use checksums
aa4201a30e6c07f9b679894efd599cb7d93528cdf4783042280921b6adc933d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.9
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