Humanizer-RU
Скилл для редактирования русскоязычных LLM-текстов. Подход редакторский, не противодетекторный: цель — вернуть автору голос, а не «обмануть классификатор».
В традиции Норы Галь, инфостиля и Розенталя. Опирается на классику русского редактирования, не на arms race с детекторами LLM.
Что внутри
Скилл устроен как три слоя:
- Фразовый слой — каталог из 50+ правил в 9 тематических группах: контентные паттерны, языковые, стилевые, типография, коммуникация, морфология (падежи, виды, согласования), расширенная идиоматика (4 класса калек), филлеры, идеальная грамотность как маркер.
- Документный слой — структурная диагностика: listicle-сигнатура, плотность тире, разброс длин предложений, доля AI-цитат, плотность точки с запятой и одиночных двоеточий, голосовая консистентность с паспортом.
- Голосовой паспорт — мета-уровень: сохраняемый артефакт
.humanizer/voice.jsonс предпочтениями автора, эволюционирующий между сессиями.
Дополнительные механизмы:
- Светофорная разметка абзацев (🟢 не трогать / 🟡 точечно / 🔴 переписать) на основе паспорта.
- Принцип жеста — каждое предложение должно содержать авторский выбор слова, конкретику или неожиданный поворот.
- Динамические приоритеты по жанровому пресету (always/context/ignore вместо статических A/B/C/D).
- Доменные whitelist'ы (ИТ / финансы / медицина) — чтобы не заменять профильные термины на «упрощённые».
Это отличие от поверхностного перифразирования: скилл не «делает текст менее предсказуемым», а возвращает в него конкретного автора.
См. dictionaries/ для расширенных словарей и whitelist'ов, examples/ для регрессионных примеров.
Команды и режимы
/humanizer-ru базовый прогон по последнему паспорту или дефолтам
/humanizer-ru --sample калибровка по образцу автора (приложить 2-3 абзаца)
/humanizer-ru --interview калибровка через короткое интервью (если образца нет)
/humanizer-ru --preset=<имя> использовать жанровый пресет (habr / telegram / email / vc / linkedin / docs)
/humanizer-ru --audit только диагностика, без правок
/humanizer-ru --rough опт-ин на намеренные микро-неровности (для соцсетей)
/humanizer-ru --reflect <финал> обновить паспорт по финальной версии (post-hoc feedback)
/humanizer-ru --add-sample добавить образец в существующий паспорт
Флаги комбинируются: --preset=habr --sample = калибровка по образцу + дефолты Habr поверх.
Слой 3 — Голосовой паспорт
Зачем это вообще
LLM по умолчанию пишет «усреднённого человека». Voice passport фиксирует конкретного автора, и каждая правка сверяется не с абстрактной нормой, а с тем, как пишет этот автор.
Паспорт хранится в .humanizer/voice.json в рабочей директории пользователя. Если файла нет — скилл предлагает калибровку. Если есть — использует и при необходимости эволюционирует.
Схема .humanizer/voice.json
{
"version": 1,
"created": "2026-04-27",
"updated": "2026-04-27",
"usage_count": 0,
"calibration_mode": "sample",
"address": "ты",
"formality": 6,
"typography": {
"dash": "–",
"dash_padding": "spaces",
"quotes": "«ёлочки»",
"yo_letter": "consistent",
"nbsp": "minimal"
},
"rhythm": {
"sentence_length_avg": 15,
"sentence_length_min": 3,
"sentence_length_max": 35,
"sentence_variance": "high",
"paragraph_length_avg": 4
},
"voice_features": {
"irony": "occasional",
"person": "first",
"rhetorical_questions": true,
"personal_anecdotes": true,
"hedging": "minimal"
},
"preferred_phrases": ["по-человечески", "в общем"],
"banned_phrases": ["являются", "в современном мире"],
"channel_default": "habr",
"context_exceptions": [],
"history": [
{
"date": "2026-04-27",
"session_id": "s1",
"event": "calibrated_from_sample",
"details": "initial calibration from 2-paragraph sample"
}
]
}
Поля паспорта
| Поле | Значения | Что значит |
|---|---|---|
address | ты, Вы, depends_on_channel | Обращение к читателю |
formality | 1-10 | Уровень формальности (1 = чат с другом, 10 = официальный документ) |
typography.dash | —, –, - | Тип тире |
typography.dash_padding | spaces, none, mixed | Пробелы вокруг тире |
typography.quotes | «ёлочки», „лапки", "прямые", mixed | Тип кавычек |
typography.yo_letter | consistent, never, ad_hoc | Использование Ё |
typography.nbsp | strict, minimal, none | Неразрывные пробелы |
rhythm.sentence_length_avg | число | Средняя длина в словах |
rhythm.sentence_variance | high, medium, low | Разброс длин (важно для burstiness) |
voice_features.irony | frequent, occasional, none | Допустима ли ирония |
voice_features.person | first, we, impersonal | Голос: я / мы / безличный |
voice_features.hedging | minimal, moderate, heavy | Степень оговорок |
preferred_phrases | список | Любимые обороты автора (сохранять) |
banned_phrases | список | Запрещённые обороты (никогда не выдавать) |
channel_default | имя пресета | Жанровый пресет по умолчанию |
context_exceptions | список | Правила, которые не применять в указанных контекстах |
history | список событий | Журнал изменений паспорта |
Уровни калибровки
Уровень 1 — Образец автора (идеал)
Автор предоставляет 2-3 абзаца своего письма. Скилл анализирует образец по конкретному алгоритму и заполняет полный паспорт. calibration_mode: "sample".
Алгоритм извлечения voice features из образца
Обращение (address). Сканировать местоимения и формы глаголов:
- «ты, тебя, тебе, тобой» →
ты - «вы, вам, вас, вами» (с большой буквы) →
Вы - безличные конструкции преобладают, местоимений нет →
impersonal - неоднозначно →
depends_on_channel
Формальность (formality, 1-10). Базовая = 5, корректировать:
- слэнг или явно неформальная лексика («норм», «короче», «вообще») → −2
- сокращения, аббревиатуры в неформальной форме → −1
- разговорные обороты → −2
- канцелярит («осуществление», «реализация», «в рамках») → +3
- юридические/научные термины → +2
- безличные конструкции преобладают → +1
- результат clamp в [1, 10]
Тире (typography.dash). Подсчитать em-dash (—), en-dash (–), дефис (-) в роли тире (с пробелами):
- em-dash > 2× en-dash →
"—" - en-dash > 2× em-dash →
"–" - только дефисы (-) с пробелами →
"-" - смешение → доминирующий тип, остальное в
historyкак «непоследовательно»
Пробелы вокруг тире (typography.dash_padding). Если в 80%+ случаях есть пробелы — "spaces". Если их нет — "none". Иначе — "mixed".
Кавычки (typography.quotes). Подсчитать «ёлочки», „лапки", "прямые". Доминирующий тип идёт в паспорт. Если мало вхождений (<3) — оставить дефолт пресета.
Ё (typography.yo_letter). Подсчитать слова с Ё и слова, в которых должна быть Ё, но стоит Е (использовать словарь основных Ё-слов: ёж, всё, ещё, плёнка, мёд, ёлка, пчёл, нашёл, и т.д.):
- 80%+ слов с правильной Ё →
consistent - 0-5% →
never - 5-80% →
ad_hoc
Неразрывные пробелы (typography.nbsp). Проверить на наличие U+00A0 перед %, °, км, шт, инициалами:
- 80%+ соответствие →
strict - 20-80% →
minimal - <20% →
none
Ритм (rhythm.*). Разбить на предложения по [.!?], посчитать длины в словах:
sentence_length_avg— среднееsentence_length_min— минимумsentence_length_max— максимумsentence_variance: σ ≥ 6 →high, 4-6 →medium, <4 →lowparagraph_length_avg— среднее число предложений в абзаце
Голосовые черты (voice_features.*):
irony: маркеры иронии (вопросы с восклицанием, контрапункты, само-преуменьшения, «ну», «конечно же», «серьёзно?») → подсчитать долю; >5% предложений →frequent, 1-5% →occasional, <1% →noneperson: преобладают «я» →first, «мы»