Как Claude перестаёт говорить «load-bearing»

15.07.2026 · 5 мин

Я наткнулся на этот пост и не смог остановиться. Знаете, почему? Потому что автор решил проблему, которая бесит тысячи разработчиков.

Проблема: клод не выговаривает «несущий»

Когда вы работаете с языковыми моделями (LLM — большими языковыми моделями, такими как Claude) через интерфейс командной строки (CLI — Command Line Interface, текстовый интерфейс, где вы печатаете команды вместо кликов мышкой), вы неизбежно замечаете паттерны. Слова-паразиты. Клише. Клод обожает «load-bearing» — «несущий», «опорный». И «honest take» — «честное мнение». И «seam» — «швы».

Это как слушать подкаст, где ведущий использует одни и те же обороты каждые три предложения. Раздражает? Ещё как.

Автор статьи — Johanna Larsson — нашла элегантный способ убить сразу двух зайцев: рассмешить себя и реально решить проблему.

Решение: перехватчик вывода

Идея простая: поставить между Клодом и вами маленький фильтр, который подменяет слова на лету.

ВХОДЯЩИЙ ПОТОК ОТ КЛОДА          ФИЛЬТР              ВАШ ЭКРАН
───────────────────────      ──────────────      ─────────────────
"Это load-bearing        →  [wordswap.sh]  →   "Это cooked
 элемент..."                    │                   элемент..."
"Честное мнение..."        →       │          →   "Spicy doodle..."
"seam интеграции..."       →       ▼          →   "Whatchamacallit..."
Схема работы перехватчика MessageDisplay

Скрипт — это простой Python-файл, который читает JSON-поток (JSON — формат данных, похожий на структурированную таблицу, удобный для передачи информации между программами) от Клода и делает замены. Никакой магии, только регулярные выражения (шаблоны для поиска и замены текста по правилам, например: «найди слово „seam“ и замени на „whatchamacallit“»).

Как это настроить

Шаг первый: создаём файл ~/.claude/hooks/wordswap.sh с содержимым:

#!/usr/bin/env python3
import json, re, sys

replacements = {
    "seam": "whatchamacallit",
    "you're absolutely right": "I'm a complete clown",
    "honest take": "spicy doodad",
    "load-bearing": "cooked"
}

data = json.load(sys.stdin)
text = data.get("delta") or ""

for phrase, replacement in replacements.items():
    pattern = r"\b" + re.escape(phrase) + r"\b"
    text = re.sub(pattern, replacement, text, flags=re.IGNORECASE)

print(json.dumps({
    "hookSpecificOutput": {
        "hookEventName": "MessageDisplay",
        "displayContent": text,
    }
}))

Шаг второй: делаем файл исполняемым (chmod +x — команда, которая даёт файлу разрешение на запуск):

chmod +x ~/.claude/hooks/wordswap.sh

Шаг третий: подключаем в настройках ~/.claude/settings.json:

{
  "hooks": {
    "MessageDisplay": [{
      "hooks": [{
        "type": "command",
        "command": "$HOME/.claude/hooks/wordswap.sh"
      }]
    }]
  }
}

Перезапускаем сессию — и вуаля. Теперь Клод говорит «cooked» вместо «load-bearing». Смешно? Ну, по крайней мере, уже не раздражает.

Почему это работает

Я задумался: почему языковые модели вообще застревают на определённых фразах?

ЭВОЛЮЦИЯ ШАБЛОННЫХ ФРАЗ
═══════════════════════════
                          
  Модель обучена           Модель "усвоила"        Модель
  на текстах              что фраза               использует
  с паттернами      →     работает         →     автоматически
                                                        │
  "load-bearing"            "читатели ценят           │
  встречается              такие формулировки"        ▼
  часто в статьях                                  "load-bearing"
                                                  ВЕЗДЕ
Почему LLM повторяют одни и те же обороты

Когда модель видит, что определённая конструкция получает положительный отклик (лайки, комментарии, ответы), она закрепляет её. Это называется reinforcement learning — обучение с подкреплением. Только в данном случае «подкреплением» служит ваше молчаливое принятие ответа.

Практический вывод

Мне понравился этот подход по нескольким причинам:

Единственное «но»: если вы работаете с Клодом через веб-интерфейс, этот способ не сработает. Он работает только в CLI-версии.

Но если вы технарь, который проводит часы в терминале — попробуйте. Это 10 минут настройки — и вы навсегда избавитесь от клише. А потом расскажите, какие слова-паразиты бесят именно вас.

Итого: языковые модели — мощный инструмент, но они предсказуемы. И если вам надоели шаблонные фразы, вы не обязаны с ними мириться. Поставьте фильтр — и верните себе удовольствие от работы с моделью.

Ссылки

Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.