Ernie

Caveman обещает на 65% меньше токенов. А счёт остался прежним.

aiengineeringevalsbenchmarksdeveloper-toolsclaude-code

Caveman — плагин для Claude Code с 97 тысячами звёзд на GitHub. Обещание такое: ИИ перестаёт лить воду и переходит на язык пещерного человека, слов на выходе меньше — и счёт меньше.

Я попробовал. ИИ и правда стал лаконичнее — на пяти задачах из семи, что я прогнал; на двух оставшихся он, наоборот, разговорился. А платил я ровно столько же.

Не все токены стоят одинаково

Токены бывают четырёх видов, и стоят они очень по-разному. За миллион, на Sonnet 4.5, по которому считались эти прогоны (на Sonnet 5 всё дешевле в тех же соотношениях):

  • вывод (слова, которые модель пишет в ответ) — $15
  • запись в кэш (положить контекст в кэш в первый раз) — $3,75
  • ввод (текст, который отправляешь ты) — $3
  • чтение из кэша (контекст, который она уже видела) — $0,30

То есть одно слово, которое модель пишет, стоит как пятьдесят, которые она перечитывает.

А перечитывает она много. На каждом ходу модель заново проходит весь диалог — твои файлы, вывод тестов, всё сказанное до этого — и только потом дописывает в конец несколько слов. На эти несколько слов приходится около 0,6% токенов сессии. Почти всё остальное — контекст: то, что ты ей отправляешь, и, в основном, то, что она перечитывает.

Экономика токенов

0,6%

столько сэкономишь, если модель замолчит совсем — то есть недостижимо

ВыводОстальное (в основном кэш)

Слов мало, но каждое в пятьдесят раз дороже — и в деньгах это уже примерно 20% твоего счёта.

Эта пятая часть — потолок: весь кусок, до которого скилл вообще дотягивается, делая слова модели короче. Остальное — контекст, и от краткости он меньше не станет.

Ответы короче на 65% дали бы минус 13% со счёта

Берём этот потолок и умножаем на то, насколько короче стали ответы:

  • Обещанная срезка — 65%, столько написано в README (закреплённая версия) — это 65% от той пятой части: 13% со счёта. Лучшее, на что можно было бы рассчитывать, будь обещание правдой.
  • Замеренная срезка — 6%, столько вышло у меня в среднем, — это 6% от той же пятой части, и на счёте такое просто не видно.
  • Заставь модель замолчать совсем — сэкономишь всю пятую часть. Это и есть весь потолок, и стоит он тебе всех ответов.

На подписке никакого счёта нет — есть квота, и по каким весам её считают, Anthropic не публикует. Но считают они те же четыре вида токенов — значит вывод в твоей квоте стоит где-то между теми же двумя краями. Оба маленькие, и потолок никуда не девается.

Что показали прогоны

Семь задач по кодингу — от однострочного хелпера до рефакторинга в нескольких файлах, каждая прогнана по десять раз: пять со скиллом, пять без. Каждый прогон проходил проверку на корректность — никакой «экономии» на сломанных ответах. Реальную стоимость в долларах считал vigiles, мой открытый инструмент, и всё это можно прогнать самому, на своей же подписке.

Как именно всё замерялось

По десять раз — потому что один и тот же промпт каждый раз стоит по-разному: замерив однажды, выдаёшь за результат обычный шум. Это 70 прогонов, и 140, если считать второй скилл из приложения.

Скилл работал — ответы с первого же сообщения пошли телеграфные. Вывод стал короче в среднем на 6%, а не на 65%, и среднее тут врёт: на двух задачах срезало сильно, на трёх слегка, а на оставшихся двух модель написала больше. Счёт вышел такой же — разница меньше, чем одна и та же задача скачет между двумя прогонами вообще без скилла.

Caveman: обещание против замера

7 задач · по 5 парных прогонов

обещанонамерено
выводимые токены−65%−6%
твой счёт−13%−1%

счёт по каждой задаче, точка на задачу

−60%−40%−20%0+20%+40%+60%одна стала на 66% дороже

Пять прогонов на задачу не видят изменения счёта меньше ~13%, поэтому −1% — это «разницы не видно». Задачи разошлись от 16% дешевле до 66% дороже.

Я не первый, кто полез проверять этикетку, и ни у кого из замерявших не вышло ничего похожего на 65%. Макс Тейлор сравнил Caveman с двумя словами «be brief» и выяснил, что плагин не обошёл этот скучный дефолт. В JetBrains прогнали его на 86 настоящих задачах по кодингу с принудительно включённым скиллом: вывода стало меньше на единицы процентов, а суммарная стоимость вышла дороже, а не дешевле: один дорогой выброс перевернул знак.

Что именно намерили в JetBrains

Вывода стало меньше на 8,5% против обещанных 65%. Они ожидали примерно 10% экономии на задачу, и это, цитирую, «регулярно съедается разбросом между отдельными прогонами», — а их собственная суммарная стоимость вышла на 11,6% дороже ($40,60 против $36,39): один выброс перевернул знак. На задачу — экономия, суммарно — переплата, и ни то ни другое даже близко не 65%.

То же исследование показывает, как сильно врут одиночные прогоны: их пристрелочный замер на десяти задачах, по разу на каждую, дал −29,5%; те же десять задач по три прогона дали −6,7%. Поменялось только число повторов. А их главная цифра на 86 задачах — это сам по себе один прогон на задачу. У меня их пять.

Откуда взялись те самые 65%

Это не враньё — просто замер не того. Заявленные 65% скилл намерил себе сам на 10 одиночных промптах. Один промпт, один ответ, никаких файлов, инструментов и старого контекста — единственный расклад, где ответ модели, по сути, и есть вся сессия, а перечитывания, в котором он бы потерялся, просто нет. Ужми ответ здесь — и ужмёшь почти весь объём токенов.

С настоящим кодом всё наоборот. Ответ больше не равен сессии, а код жмётся куда хуже, чем многословная проза «услужливого ассистента», с которой они сравнивали, — тот же скилл срезает около 6%. Померили там, где число большое, а написали на коробке, которую ставят совсем в другое место.

Полные числа (по задачам, оба скилла, p-значения)

Откуда берутся 20%. Вывод — это ~0,6% токенов по цене примерно в 50 раз выше чтения из кэша. На салфетке:

                 объём   цена   деньги
вывод             0,6%  ×  50  =    30
чтение из кэша     99%  ×   1  =    99
 
доля вывода в счёте:  30 / 129  ≈  23%

По салфетке на вывод приходится ~23% счёта; если считать по записанной долларовой стоимости моих прогонов, выходит 20,5% — чуть меньше, потому что настоящие сессии платят ещё за ввод и за запись в кэш. В тексте это округлено до 20%.

Скиллов тут два, а не один. Caveman — это тот самый скилл с 65% на этикетке, про который вся статья; token-efficient — следующий по звёздам скилл в той же категории, и он ровно так же обещает срезку на 63%. Я прогнал его через тот же инструмент, чтобы понять: потолок — это свойство Caveman или всей категории? Категории.

Семь задач × пять прогонов × две группы = 70 прогонов на скилл, 140 на оба, на Sonnet (~$10 по ценам API, $0 на моей подписке). Изменение вывода по задаче — минус значит, что скилл срезал вывод, плюс — что вывода стало больше, — с p-значением Уэлча: это проверка, которая не предполагает, что обе группы шумят одинаково (а они никогда и не шумят). Читать p как «шанс увидеть такой разрыв, если скилл вообще ничего не делает»; * — это p<0,05. Обе срезки Caveman (p = 0,002 и 0,006) переживают поправку Бонферрони. Смысл поправки простой: когда проверяешь семь вещей разом, случайность попадается чаще — эти две держатся и с учётом этого.

ЗадачаΔ вывода (Caveman)pΔ вывода (token-efficient)p
slugify+54%0,27−2%0,78
debounce−28%0,22−7%0,52
bugfix-offbyone−31%0,002*−6%0,87
bigO−18%0,27+6%0,79
regex-email−28%0,006*+127%0,037*
review-doc−8%0,80+54%0,46
refactor-suite+21%0,65+33%0,19

Суммарные доллары по всем прогонам: Caveman −1%, token-efficient +10%. Оба числа меньше того, что это исследование способно различить, но по характеру они разные: token-efficient вышел дороже на 5 задачах из 7 (regex-email +49%, review-doc +21%, refactor +9%, slugify +7%, bigO +6%; дешевле стали только debounce −13% и фикс бага −5%), а −1% у Caveman — это шум вокруг нуля. Если усреднить по задачам, срезка вывода у Caveman — 5,6% (в тексте «около 6%»); если считать суммарно — 9,1%. И так и так кусок в ~20% превращает это в 1–2% счёта, а суммарные доллары дали −1%. Вывод — около 20% долларовой стоимости в обеих группах, и все ответы остались верными: ноль регрессий корректности на всех 140 прогонах.

Скилл сам не бесплатный. Его постоянно загруженный промпт — это тоже контекст: в среднем по всем прогонам группа с Caveman тащила на 9% больше кэшированных токенов, чем базовая, а на самой короткой задаче — на 71% больше. Именно поэтому самая дешёвая задача вышла на 66% дороже. Это систематический штраф на коротких сессиях, а не только шум.

Разброс. По задачам долларовая дельта скачет от 16% дешевле (фикс бага, p=0,03) до 66% дороже (slugify — самая дешёвая задача, где мелкий разброс от прогона к прогону в процентах выглядит громадным). При пяти прогонах на задачу 95%-й доверительный интервал на суммарном счёте — от 14% дешевле до 12% дороже, то есть разницу в стоимости меньше примерно 13% такой эксперимент уже не различает. Экономия в 13% — тот самый лучший случай с этикетки — как раз легла бы на границу видимости этих прогонов. И не надо: точность тут держится на структурном потолке в ~20%, а не на размере выборки — чтобы отвергнуть большую экономию, большое исследование не требуется, если сам потолок экономии мал.

Одна оговорка, для полноты: поминутные лимиты API — это отдельная история, не про стоимость. Чтение из кэша по большей части во входной лимит не идёт, а у вывода свой отдельный лимит. Если ты упёрся именно в лимит «вывод в минуту», срезка вывода и правда прибавит пропускной способности; но это узкий случай, а не твой месячный счёт или квота.

Проверка корректности — структурная, а не оценка качества: она ограничивает потерю информации, но не доказывает, что ответы были так же хороши.

Замеры по каждой группе со всех 140 прогонов (средние, σ, n): JSON на 140 прогонов и тест /caveman-compress. Метод и инструмент: vigiles.

Где экономия на самом деле

У Caveman есть и второй трюк — сжать файл с инструкциями. Тут тоже мимо: я ужал такой файл на две трети, и на счёте это никак не отразилось. Несколько сотен токенов против сессии на ~100 000 — эта разница теряется в округлении.

Сжатие ввода · /caveman-compress

файл с правиламився сессия

несколько сотен токенов против примерно ста тысяч

Файллучше обещанных им же 46%−68%
Счётразброс между прогонами, а не экономия−14%

Файл он и правда сжимает, сильнее, чем обещает. Просто файл слишком мал, чтобы это было видно на счёте.

Хочешь платить меньше или дольше не упираться в лимит? Экономить надо не на словах модели, а на том, что перезагружается каждый ход:

  • Большие файлы и вывод команд, которые ты подтянул — лог теста на 10 тысяч строк, огромный git diff: прочитаны один раз, а дальше молча перечитываются каждый ход. Именно эта куча и раздувает твой счёт.
  • Раздутый диалог — отдавай работу сабагентам, чтобы основной тред оставался маленьким.
  • Контекст, который ты не чистишь/compact режет большую дешёвую кучу напрямую, а это почти все твои расходы.

Сам я это не мерил — считай подсказками, а не обещанием.

Прежде чем ставить следующий скилл

Сокращать ответы модели, чтобы платить меньше, — это как заказать десерт поменьше, чтобы уменьшить счёт в ресторане. Счёт почти весь состоял не из десерта.

Так что вопрос к следующему такому скиллу: какие токены он режет — и считал ли кто-нибудь настоящую сессию, а не однострочный промпт?