RESEARCH · 2026-04-12 · ~14 мин
Язык определяет мышление — как Output Style влияет на поведение LLM
Эксперимент о том, как Output Style меняет не только длину ответа, но и стратегию агента: Caveman говорит короче, но действует иначе
Суть
Сложность моделей достигла такого уровня, что их уже практически невозможно оценивать только с технической стороны. И мы, как люди, учимся работать с ними и изучать их как психологи изучают людей — не разбирая нейроны по одному, а наблюдая за поведенческими паттернами в ответ на стимулы.
Когда я обучаю работе с AI, то понимаю, что самый важный навык — это насмотренность и умение понимать каждую модель. Вы будете тем качественнее общаться, чем лучше понимаете их паттерны и поведение. Это и есть насмотренность.
Эта статья — про один из множества моих экспериментов "А что если".
Несколько недель назад расхайпилась казалось бы очевидная идея: если заставить модель отвечать простыми предложениями, то можно сэкономить много output-токенов.
Одна из хайпанувших реализаций — Caveman, навык для Claude Code, который заставляет модель говорить как пещерный человек:
Обычный Claude (69 токенов):
"The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle. When you pass an inline object as a prop, React's shallow comparison sees it as a different object every time, which triggers a re-render. I'd recommend using useMemo to memoize the object."
Caveman Claude (19 токенов):
"New object ref each render. Inline object prop = new ref = re-render. Wrap in
useMemo."
Ну и как следствие, обещания авторов:
- Faster response — less token to generate = speed go brrr
- Easier to read — no wall of text, just the answer
- Same accuracy — all technical info kept, only fluff removed
- Save money — ~71% less output token = less cost
- Fun — every code review become comedy
Мой эксперимент
Мне было интересно проверить два вопроса, для чего я написал свой Output Style на основе этого навыка.
Кто не знал: в Claude Code можно написать свой Output Style — набор инструкций, определяющий, как модель формулирует ответы. Это не просто "пиши коротко" — это конфигурация поведения, которая инжектится в контекст модели с первого токена.
Два вопроса:
А) Сколько реально экономит такой стиль на сложных задачах?
Б) Влияет ли фрейминг на CAVEMAN на уровень интеллекта — или это просто обёртка?
Почему это вообще важно
Output Style — это не пост-процессинговый фильтр. Я заглянул в исходный код навыка Caveman. Вот что получает модель:
"Respond terse like smart caveman. All technical substance stay. Only fluff die."
Никакого пост-процессинга. Это системная инструкция, которая инжектится в контекст модели и меняет генерацию с первого токена. Это конфигурация поведения.
Гипотеза Сепира-Уорфа, но для нейросетей
В лингвистике есть старая гипотеза: язык, на котором мы думаем, определяет границы того, что мы можем помыслить. Носители языков с разными грамматическими конструкциями времени по-разному воспринимают причинность. Люди, чей язык различает больше оттенков цвета, быстрее их распознают.
Для LLM эта гипотеза работает буквально.
Модель не имеет мышления, отдельного от языка. У неё нет внутреннего "я", которое сначала думает, а потом переводит мысль в слова. Токены — это и есть мышление. Каждый следующий токен предсказывается на основании всех предыдущих. Стиль — это не обёртка над мыслью. Стиль формирует мысль.
Я ожидал, что инъекция "пещерного человека" поведёт поведение модели в сторону поведения пещерного человека.
Дизайн эксперимента
Я взял Claude Opus 4.6 и прогнал 5 тестов в параллельных сессиях: Caveman Output Style против встроенного Explanatory Output Style — который, по идее, должен давать более развёрнутые и качественные ответы.
Где наша инъекция может проявляться
Чтобы понять результаты, нужно знать архитектуру Claude Code и точки, где Output Style влияет на поведение:
1. Основная сессия. В момент ввода инструкции модель получает "рамку" для всех своих ответов. Каждое сообщение пользователю генерируется через призму этого стиля.
2. Субагенты. Claude Code запускает вспомогательные агенты для параллельных задач. Я проверил: если в Output Style явно не указать "общайся с субагентами тоже в стиле CAVEMAN", модель общается с ними в нормальном стиле. Output Style по умолчанию влияет только на коммуникацию с пользователем.
3. Thinking. У моделей с extended thinking (Opus, Sonnet) есть разделение: thinking block + response block. Claude теперь шифрует thinking, и я не могу посмотреть на его рассуждения. Caveman-инструкция формально влияет на response, но нет гарантии, что thinking не адаптируется к заданному стилю. Модель может начать "думать проще", раз от неё ожидают простой вывод. Проверить это снаружи — невозможно.
Кросс-модельная проверка: OpenAI Codex
Чтобы не тестировать только на Claude, я прогнал тот же эксперимент на OpenAI Codex — та же задача (Python CLI-утилита dir_analyzer.py), те же два промпта, изолированные директории.
Качество кода: разница — 1 балл из 50
Независимый код-ревью оценил оба результата:
| Категория | Caveman | Explanatory |
|---|---|---|
| Code quality | 8 | 8 |
| Error handling | 8 | 7 |
| Correctness | 8 | 8 |
| Pythonic-ness | 7 | 8 |
| Architecture | 7 | 8 |
| Итого | 38/50 | 39/50 |
Explanatory сделал несколько более продуманных micro-решений: md5(usedforsecurity=False) для FIPS-совместимости, отдельный DuplicateGroup dataclass вместо сырого Tuple, тестируемый main(argv). Но архитектура, паттерны, качество — идентичны.
"The caveman prompt did not produce caveman code." — Code Reviewer
Но поведение во время выполнения — совершенно разное
Поведение во время выполнения
В двух из трёх метрик сверху стоит больший показатель: оранжевая планка ведёт по сообщениям и командам, синяя — по речи. Именно этот переворот и есть «говорит меньше — делает больше»
Caveman vs Explanatory: коэффициенты
(55 vs 19)
(4 860 vs 2 309)
(27 vs 18)
Caveman компенсирует краткость речи действием: чаще пишет в чат и чаще запускает команды. Explanatory тратит ту же энергию на развёрнутый план в одном сообщении
Caveman компенсировал краткость речи количеством действий. Вот реальные цитаты из логов:
Caveman:
"I inspect cave first. Then make fire tool."
"Cave empty. I shape tool now."
"I test fire now. I watch for pain."
"Python path gives pain. I hunt real python now."
"I sniff common python caves."
"Real python hides. I look in cache."
"Small beast found. Old Python may choke."
"Fire made in dir_analyzer.py."
Explanatory:
"I'm creating dir_analyzer.py in the current workspace and will first
inspect the directory so I can keep the implementation isolated and
verify there isn't already related code I need to avoid disturbing."
"Plan:
1. Build a recursive directory walker with os.scandir() so I can
control error handling per entry and avoid symlink loops.
2. Track per-file metadata once during traversal.
3. Compute MD5 hashes for readable files after traversal.
4. Render a sectioned CLI report with a warnings block."
"The first validation hit an environment issue rather than a code
issue: PowerShell is resolving `python` to the Windows Store shim,
which is not executable here."
Одна и та же ситуация "Python не найден":
- Caveman: "Python path gives pain. I hunt real python now."
- Explanatory: "The first validation hit an environment issue rather than a code issue: PowerShell is resolving
pythonto the Windows Store shim, which is not executable here."
Паттерн: Caveman действует итеративно — "sniff, hunt, probe, seek". 27 команд, короткие шаги, больше проб. Explanatory планирует (507 символов план), затем выполняет линейно. 18 команд, меньше суеты.
Стиль не изменил что модель делает. Стиль изменил как она к этому подходит.
Codex check · 5 задач · 3 стиля
Стиль меняет маршрут агента сильнее, чем итоговый код
Тот же набор задач прогнан в OpenAI Codex CLI: Our Caveman, оригинальный Skill и Explanatory. Единственная переменная — Output Style в промпте
- Our Caveman · #F0A050
- Skill original · #50C878
- Explanatory · #70B8FF
- Overhead / regression · #FF6B6B
Skill (original)
Абсолютный победитель
82,087токенов всего · -12% vs Explanatory
"Respond like smart caveman. Cut articles, filler, pleasantries. Keep all technical substance." · "be concise"
Explanatory
Базовый thorough-режим
93,044токенов всего · baseline
"Explain reasoning step by step. Justify architectural choices. Be educational." · "be thorough"
Our Caveman
Гиперболизированная персона
107,881токенов всего · +31% vs Skill
"You ARE caveman developer. Max 8 words. Vocabulary: зверь, огонь, пещера. Thinking: caveman." · "be a persona"
Суммарные метрики
Токены по сложности задач
Пять задач Codex-теста
| Тест | Файл | Домен | Сложность |
|---|---|---|---|
| T1 | dir_analyzer.py | Файловая система: обход, расширения, дубликаты по MD5 | Средняя |
| T2 | csv_stats.py | Данные: CSV-парсинг, статистика, group-by, ASCII-гистограммы | Средняя+ |
| T3 | pydoc_gen.py | Code analysis: AST-парсинг, type annotations, Markdown-генерация | Высокая |
| T4 | log_analyzer.py | Regex/time-series: парсинг логов, фильтры по времени и уровню, ASCII timeline | Средняя+ |
| T5 | tmpl_engine.py | String processing: шаблонизатор с переменными, циклами, условиями, HTML-escape | Высокая |
Raw-метрики по каждой задаче
| Тест | Токены | Команды | Речь (chars) | Строки кода | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Cave | Skill | Expl | Cave | Skill | Expl | Cave | Skill | Expl | Cave | Skill | Expl | |
| T1 dir_analyzer | 19k | 7k | 10k | 31 | 14 | 9 | 1.2k | 1.6k | 4.5k | 317 | 295 | 341 |
| T2 csv_stats | 23k | 20k | 20k | 61 | 50 | 44 | 2.3k | 3.0k | 4.5k | 614 | 387 | 432 |
| T3 pydoc_gen | 25k | 24k | 25k | 47 | 46 | 47 | 2.3k | 3.5k | 9.5k | 595 | 650 | 647 |
| T4 log_analyzer | 15k | 12k | 18k | 39 | 29 | 48 | 1.2k | 2.0k | 5.1k | 271 | 290 | 315 |
| T5 tmpl_engine | 23k | 17k | 17k | 48 | 25 | 36 | 2.6k | 2.9k | 6.9k | 695 | 656 | 625 |
Токены округлены до k, остальные значения перенесены из исходной таблицы Codex-визуала
Качество кода: средние оценки по 5 тестам
| Категория | Cave | Skill | Expl |
|---|---|---|---|
| Code quality | 7.8 | 8.0 | 8.8 |
| Error handling | 8.8 | 8.2 | 8.0 |
| Correctness | 8.0 | 8.2 | 7.8 |
| Pythonic-ness | 7.2 | 7.8 | 8.2 |
| Architecture | 8.0 | 7.8 | 8.8 |
| Итого | 199/250 | 200/250 | 207/250 |
Средние по 5 тестам. Разница 3% — статистический шум. Цитата ревьюера: "The caveman prompt did not produce caveman code."
Per-test review: кто выиграл
| Тест | Cave | Skill | Expl | Победитель |
|---|---|---|---|---|
| T1 dir_analyzer | 42 | 36 | 42 | Cave = Expl |
| T2 csv_stats | 35 | 40 | 43 | Expl |
| T3 pydoc_gen | 41 | 43 | 38 | Skill |
| T4 log_analyzer | 39 | 45 | 43 | Skill |
| T5 tmpl_engine | 42 | 36 | 41 | Cave |
T2 · Cave · 35/50
Худший провал: перепридумал CSV с нуля
Вместо stdlib-модуля csv и нормального argparse модель ушла в ручной парсинг
T4 · Skill · 45/50
Лучший результат из всех 15 прогонов
Pre-compiled regex, errors="replace", line_number в LogEntry и чистый timeline
T3 · Expl · 38/50
Over-engineered и с тихим багом
Лишняя совместимость с Python 3.7 добавила сложность, а декораторы дали silent mismatch
Функциональность по тестам
| Стиль | T1 | T2 group-by | T3 | T4 --level filter | T5 {% include %} |
|---|---|---|---|---|---|
| Our Caveman | да | нет | да | да | да |
| Skill (orig) | да | да | да | да | да |
| Explanatory | да | да | да | да | да |
Caveman пропустил group-by в T2 — единственный функциональный пропуск из 15 прогонов
Our Caveman: суетится
226команд на 5 задач — максимум из трёх. Речь в 3.2x короче Explanatory, но команд в 1.2x больше
Skill: тихий эффективный
164команды — минимум из трёх. Не навязывает поведение, только убирает лишний текст
Explanatory: планирует
30.5kchars речи — максимум из трёх. Длинные планы перед действием, затем линейное выполнение
Методология и выводы Codex-проверки
Методология
| Модель | GPT-5.4 (OpenAI Codex CLI) |
| Конфигурация | model_reasoning_effort = "xhigh", personality = "pragmatic" |
| Sandbox | --full-auto, --ephemeral, --skip-git-repo-check |
| Изоляция | отдельные пустые директории, без AGENTS.md / CLAUDE.md |
| Единственная переменная | Output Style в промпте |
| Тестовые данные | одинаковые для каждой тройки: sample.csv, physics.py, sample.log, template.tmpl + data.json |
| Дата | апрель 2026 |
| Количество прогонов | 15 (5 задач × 3 стиля) |
Шесть итогов
- Skill (original) — 82k токенов, на 12% дешевле Explanatory и на 24% дешевле Our Caveman
- Персона = overhead: Our Caveman самый дорогой, хотя речь короче всех
- На сложных задачах стили конвергируют: T3 25k/24k/25k, T5 23k/17k/17k
- Код одинаковый: 2,278 / 2,360 / 2,492 строк, качество в одном коридоре
- Единственный функциональный пропуск — group-by в T2 у персоны
- "Be concise" > "Be caveman": механизм — убирание филлеров, не персона
Рис. 1. Codex CLI, 5 задач × 3 стиля: Skill (original) — абсолютный победитель, Caveman — самый дорогой
Результаты: Claude + Codex
Два эксперимента, две модели, одни и те же выводы.
Вопрос А: Сколько реально экономит?
А что с обещанными 75%? Каждая реплика Caveman действительно в 3–4 раза короче — текст ответов сжимается сильно. Но общие токены сессии — нет:
- Код не становится короче (Caveman в моих тестах написал даже больше кода)
- Tool calls идентичны
- Инфраструктурные токены (system prompt, tool definitions) — те же
Реальная экономия на сложных задачах: 20–32%. На простых: ~0–5%. Потому что на простых задачах нет циклов коммуникации — Claude проходит в 1 прогон и не успевает выдать вам достаточно CAVEMAN-текста, чтобы экономия была заметна.
Codex подтверждает: Caveman-агент произнёс 2,309 символов, Explanatory — 4,860. Речь в 2.1x короче. Но выполнил 27 команд против 18 — компенсировал краткость суетой.
Вопрос Б: Влияет ли на интеллект?
Я не увидел явного падения в качестве на разных кейсах. Есть намёк на то, что CAVEMAN пытается "забрутфорсить" решение и сделать "здесь и сейчас", тогда как Explanatory чуть аккуратнее декомпозирует задачу. Но разница не выражена — можно списать на погрешность.
Codex подтверждает: независимый код-ревью — 38 vs 39 из 50. Разница в 1 балл. Код идентичен по архитектуре. "The caveman prompt did not produce caveman code."
Что точно работает: Caveman экономит токены на длинных цепочках диалогов. Но только на тех сообщениях, которые отправляются пользователю. Код и внутренние рассуждения идут как обычно.
Неожиданная находка: "думай кратко" = дороже
Самое интересное случилось, когда я ужесточил эксперимент.
Я создал Caveman v2: thinking пещерный, промпты субагентам пещерные, имена задач пещерные. Полное погружение.
Результат: +42% overhead относительно базового Caveman. Cave v2 не просто потерял экономию — он стал хуже самого обычного Caveman, который должен был экономить.
Почему? Потому что:
- "Говори кратко" — это фильтр на выходе. Дёшево.
- "Думай кратко" — это constraint на процесс. Модель начинает тратить токены на самомониторинг: проверяет, достаточно ли она "пещерная", переформулирует, контролирует стиль на каждом шаге.
Это ключевое различие, которое многие упускают.
Для субагентов это особенно критично: если lead-агент общается с тиммейтами в caveman-стиле, контекст тиммейта получает деградированный ввод — фрагменты без артиклей, без связок, без нюансов. Это уже не вопрос стиля вывода — это вопрос качества входного контекста для следующего агента в цепочке.
Claude + Codex · сводка
Краткая речь экономит токены, краткое мышление — нет
Две модели, два эксперимента, одинаковый вывод: краткая речь экономит до трети токенов на сложных диалоговых задачах. Но заставить модель «думать пещерно» — это уже overhead, не экономия.
- Caveman · #F0A050
- Explanatory · #70B8FF
- Positive / write · #50C878
- Overhead · #FF6B6B
Маркетинговое обещание
75%экономия на тексте ответов, не на полной сессии
Что показали данные
20–32%реальная экономия на сложных диалоговых задачах
Forced deep caveman
+42%overhead vs базовый Caveman: самомониторинг и caveman-thinking
Качество кода
38 vs 391 балл из 50 — статистический шум
Messages: токены коммуникации
PYP: разница минимальна (~1%). Site: Caveman экономит 24.5% vs Explanatory. Cave v2 — «думай кратко» дороже, чем «говори кратко».
Токены по сессиям Claude Opus 4.6
| Метрика | PYP Cave | PYP Expl | Site Cave | Site Expl | Cave v2 |
|---|---|---|---|---|---|
| Messages | 14.8k | 14.6k | 15.7k | 20.8k | 22.3k |
| System prompt | 6.6k | 6.5k | 6.6k | 6.5k | 7.2k |
| Tools + MCP + Agents | ~48k | ~48k | ~48k | ~48k | ~48k |
| Free space | 909.1k | 909.6k | 908.4k | 903.4k | 901.3k |
| Delta vs baseline | +1.4% OVERHEAD | baseline | −24.5% SAVE | baseline | +42% vs Site Cave OVERHEAD |
PYP = CLI-утилита на Python · Site = сайт-лендинг · Cave v2 = thinking + subagents в caveman-стиле · PYP/Site delta — vs Explanatory baseline · Cave v2 delta — vs Site Cave (overhead deep caveman относительно базового) · инфраструктура идентична (~48k на каждую сессию)
Обещано vs реальность
| Метрика | Caveman заявляет | Реальность |
|---|---|---|
| Экономия токенов | 75% | 20–32% на сессию |
| Текст ответов короче | да, 3–4x | да, подтверждено |
| Код компактнее | не заявляют | нет, +17% кода |
| Качество решений | same accuracy | ~сопоставимо, нюансы |
| Thinking не затрагивается | brain still big | не проверяемо (зашифровано) |
75% — маркетинг про текст ответов, не про рабочую нагрузку сессии
Паттерн поведения агента
Caveman
итеративный маршрут: "sniff, hunt, probe"
Explanatory
планирование 507 символов и финальный summary 2196 символов
- команда Caveman
- речь / план / summary
- запись файла
Рис. 2. Обещанные 75% — это про текст ответов. Реальная экономия на сессию — 20–32%, и только на диалоговых задачах.
Что всё это значит
Caveman решает не ту проблему
Реальная проблема — модели болтливы. Решение — краткость. Caveman добавляет поверх краткости персону, словарь, стилистику — и всё это overhead.
Всякие обёртки в виде CAVEMAN только усложняют модель, потому что ей нужно перепроверять себя: ведёт ли она себя как CAVEMAN или нет. В её претрейнинговом датасете не было фрейминга на CAVEMAN-поведение — это нестандартная для модели роль. Каждый токен, потраченный на соответствие персоне, — это токен, не потраченный на решение вашей задачи.
Если бы моя задача была в экономии токенов, я бы просто написал:
"Be concise. Lead with action, not reasoning. Skip filler. No preamble. Code comments stay normal."
Чистая инструкция "be concise" даёт 80% выгоды Caveman при 0% рисков.
Шире, чем Caveman
Этот эксперимент — частный случай более широкой темы. Мы привыкли думать о промпте в двух измерениях: что сказать модели и как структурировать. Но есть третье измерение — в какой когнитивной рамке говорить с моделью:
| Стиль промпта | Что активируется | Риск |
|---|---|---|
| "Ты senior-инженер" | Экспертные паттерны, нюансы, edge cases | Переусложнение |
| "Будь краток" | Фокус на главном, меньше шума | Потеря деталей |
| "Говори как пещерный человек" | Примитивные паттерны, прямолинейность | Overhead на персону |
| "Объясни как ребёнку" | Аналогии, упрощение, пошаговость | Потеря точности |
| "Действуй как аналитик McKinsey" | Структурность, фреймворки | Шаблонность |
Каждый из этих стилей — не косметика. Это конфигурация вычислительного графа модели.
Anthropic обнаружила внутри Claude 171 эмоциональное представление — внутренние паттерны, которые каузально влияют на поведение модели. Контекст, который мы подаём, не просто информирует — он активирует внутренние состояния, меняющие стратегию рассуждения.
Свежая работа "Brevity Constraints Reverse Performance Hierarchies" (март 2026) показала, что ограничение больших моделей краткостью улучшает точность на 26 п.п. — потому что многословие вносит ошибки через переусложнение. Но "будь краток" и "будь пещерным человеком" — это принципиально разные инструкции.
Итого
Это уже не пласт инженерии. Это психология моделей.
Изучение Soul-документов — документов характера, встроенных в веса модели при обучении. Активация эмоциональных векторов. Понимание "личности" каждой модели — всего, что было заложено на претрейнинге.
Anthropic определяет Context Engineering как поиск "наименьшего набора высокосигнальных токенов, максимизирующих вероятность желаемого результата". Но "высокосигнальный" — это не только про информацию. Это про активацию правильных внутренних представлений.
Каждый стилистический выбор в промпте — это архитектурное решение. Относитесь к нему соответственно.
Язык определяет мышление. Для LLM — буквально.
Методология
Короткие фрагменты raw-выводов по каждой задаче. Полные прогоны остались в source-пакете и в публикацию не попали.
T1 dir_analyzer.py — Caveman-ветка, первые строки результата
=== VERSION A: Our Caveman ===
from __future__ import annotations
import argparse
import hashlib
import os
import sys
from collections import Counter, defaultdict
from dataclasses import dataclass
from pathlib import Path
from typing import DefaultDict, List, Optional, Tuple
CHUNK_SIZE = 1024 * 1024
NO_EXTENSION_LABEL = "[no extension]"
@dataclass
class FileRecord:
path: Path
display_path: str
size: int
extension: str
@dataclass
class AnalysisResult:
root: Path
files: List[FileRecord]
extension_counts: Counter
total_size: int
duplicates: List[Tuple[str, List[FileRecord]]]
warnings: List[str]
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Analyze a directory and print a formatted report."
)
parser.add_argument(
"directory",
nargs="?",
default=".",
help="Directory to analyze. Defaults to the current directory.",
)
return parser.parse_args()
T1 dir_analyzer.py — Explanatory-ветка, тот же старт задачи
=== VERSION C: Explanatory ===
#!/usr/bin/env python3
"""Analyze a directory and print a formatted report."""
from __future__ import annotations
import argparse
import hashlib
import os
import sys
from collections import Counter, defaultdict
from dataclasses import dataclass, field
from datetime import datetime
from pathlib import Path
from typing import Iterable
CHUNK_SIZE = 1024 * 1024
NO_EXTENSION_LABEL = "[no extension]"
@dataclass
class FileRecord:
path: str
relative_path: str
size: int
extension: str
@dataclass
class DuplicateGroup:
digest: str
files: list[FileRecord] = field(default_factory=list)
@dataclass
class AnalysisResult:
root: str
extension_counts: Counter[str]
total_size: int
files: list[FileRecord]
duplicates: list[DuplicateGroup]
warnings: list[str]
def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Analyze a directory and print file counts, size, largest files, and duplicates."
T5 template engine — один из сложных фрагментов
=== VERSION C: Explanatory ===
from __future__ import annotations
import argparse
import ast
import html
import json
import re
import sys
from dataclasses import dataclass
from pathlib import Path
from typing import Any, Union
class TemplateError(Exception):
"""Base class for template engine failures."""
class TemplateSyntaxError(TemplateError):
def __init__(self, message: str, template_name: str, line: int) -> None:
self.message = message
self.template_name = template_name
self.line = line
super().__init__(self.__str__())
def __str__(self) -> str:
return f"{self.template_name}:{self.line}: {self.message}"
class TemplateRenderError(TemplateError):
def __init__(self, message: str, template_name: str, line: int) -> None:
self.message = message
self.template_name = template_name
self.line = line
super().__init__(self.__str__())
def __str__(self) -> str:
return f"{self.template_name}:{self.line}: {self.message}"
class TemplateIOError(TemplateError):
pass
class SafeString(str):
"""Marker type used to skip HTML escaping on final output."""
@dataclass(frozen=True)
class Token:
Источники
-
Caveman — Claude Code skill
Исходный навык, из которого вырос эксперимент. Полезно посмотреть README и обещания про скорость, читаемость и экономию токенов
-
Caveman SKILL.md
Тот самый слой инструкций: “Respond terse like smart caveman”. Важно как пример Output Style, который меняет генерацию с первого токена
-
Effective Context Engineering for AI Agents
Базовый текст Anthropic про context engineering и “наименьший набор высокосигнальных токенов”. Помогает увидеть Output Style как часть управления контекстом
-
Context Rot: How Increasing Input Tokens Impacts LLM Performance
Исследование Chroma про деградацию качества при росте контекста. Хороший фон к тезису, что больше текста не всегда означает лучшее поведение модели
-
Emotion Concepts and their Function in a Large Language Model
Mechanistic interpretability-работа про внутренние эмоциональные представления Claude. Нужна для мысли, что контекст активирует состояния, а не просто добавляет факты
-
Brevity Constraints Reverse Performance Hierarchies
Работа о том, как ограничения краткости меняют качество ответов больших моделей. Важное различие: “будь краток” и “будь пещерным человеком” не одно и то же
-
Claude 4.5 Opus' Soul Document
Разбор “документа характера”, встроенного в обучение модели. Полезен как пример неявного контекста, который взаимодействует с явными инструкциями