Как Claude перестаёт говорить «load-bearing»
Я наткнулся на этот пост и не смог остановиться. Знаете, почему? Потому что автор решил проблему, которая бесит тысячи разработчиков.
Проблема: клод не выговаривает «несущий»
Когда вы работаете с языковыми моделями (LLM — большими языковыми моделями, такими как Claude) через интерфейс командной строки (CLI — Command Line Interface, текстовый интерфейс, где вы печатаете команды вместо кликов мышкой), вы неизбежно замечаете паттерны. Слова-паразиты. Клише. Клод обожает «load-bearing» — «несущий», «опорный». И «honest take» — «честное мнение». И «seam» — «швы».
Это как слушать подкаст, где ведущий использует одни и те же обороты каждые три предложения. Раздражает? Ещё как.
Автор статьи — Johanna Larsson — нашла элегантный способ убить сразу двух зайцев: рассмешить себя и реально решить проблему.
Решение: перехватчик вывода
Идея простая: поставить между Клодом и вами маленький фильтр, который подменяет слова на лету.
ВХОДЯЩИЙ ПОТОК ОТ КЛОДА ФИЛЬТР ВАШ ЭКРАН ─────────────────────── ────────────── ───────────────── "Это load-bearing → [wordswap.sh] → "Это cooked элемент..." │ элемент..." "Честное мнение..." → │ → "Spicy doodle..." "seam интеграции..." → ▼ → "Whatchamacallit..."
Скрипт — это простой 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"
ВЕЗДЕ
Когда модель видит, что определённая конструкция получает положительный отклик (лайки, комментарии, ответы), она закрепляет её. Это называется reinforcement learning — обучение с подкреплением. Только в данном случае «подкреплением» служит ваше молчаливое принятие ответа.
Практический вывод
Мне понравился этот подход по нескольким причинам:
- Во-первых, это не хак — это правильное использование API (Application Programming Interface — способ, которым программы общаются друг с другом). Перехватчики (hooks — точки в системе, куда можно вставить свой код, чтобы что-то изменить) существуют именно для таких случаев.
- Во-вторых, это смешно. Когда заменяешь «load-bearing» на «cooked», а «honest take» на «spicy doodad» — работать с Клодом становится веселее.
- В-третьих, это настраиваемо. Можно добавить свои слова. Мне, например, надоели фразы «давайте разберёмся» и «на самом деле». Добавил бы их в словарь замен.
Единственное «но»: если вы работаете с Клодом через веб-интерфейс, этот способ не сработает. Он работает только в CLI-версии.
Но если вы технарь, который проводит часы в терминале — попробуйте. Это 10 минут настройки — и вы навсегда избавитесь от клише. А потом расскажите, какие слова-паразиты бесят именно вас.
Итого: языковые модели — мощный инструмент, но они предсказуемы. И если вам надоели шаблонные фразы, вы не обязаны с ними мириться. Поставьте фильтр — и верните себе удовольствие от работы с моделью.
Ссылки
- How to stop Claude from saying load-bearing — Johanna Larsson — оригинальный пост о перехватчике вывода и замене шаблонных фраз
Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.