Если подать один и тот же текст в Opus 4.6 и Opus 4.7, в новой модели он может оказаться представлен гораздо большим числом токенов. А тогда он и обходится дороже, и занимает больше места в контекстном окне. Получается «скрытая инфляция»: цены и лимиты указаны прежние, но на практике расходы могут возрасти.
Как именно всё изменилось и почему? В каких случаях число токенов вырастет максимально, а в каких останется прежним? Это хочется понимать не только из-за Opus: подобное ведь может произойти и с другой моделью. Но полных официальных ответов нет.
Поэтому мы и собрали доступную информацию, и самостоятельно проверили через API, что происходит с разными типами текстов. Мы делаем редактор кода с поддержкой разных ИИ-моделей, так что нам важно, как эта разница может сказаться на наших пользователях. Ну, и конечно, нам самим любопытно разобраться, что происходит в индустрии.
Официальная информация
Ванонсесказано кратко: «Opus 4.7 использует обновлённый токенизатор, который улучшает обработку текста моделью. Трейд-офф в том, что теперь тот же самый поданный на вход текст может разбиваться на большее число токенов: примерно 1.0–1.35x в зависимости от типа контента». Но не объясняется ни «в чём улучшение», ни «как именно всё изменилось». Чем различаются ситуации с 1.0x и 1.35x? Второе число — это максимум, или может оказываться и больше?
Также вдогонку появилсятвит«Opus 4.7 использует больше thinking tokens, поэтому мы увеличили всем подписчикам лимиты». Тут тоже не сообщили полной информации, но похоже, что речь про повышение уровня reasoning по умолчанию, а не изменения токенизации, и второе никто компенсировать не планирует.
Почему вообще разные модели могут превращать один и тот же текст в разное количество токенов? У каждой LLM есть словарь, с помощью которого происходит преобразование. И чем больше размер этого словаря, тем более длинные сочетания символов в него попадают. А это значит, что для передачи текста становится нужно меньше токенов. И ранее изменения чаще происходили в сторону увеличения словарей, так что о расходе токенов в связи с ними не переживали.
А здесь произошло что-то «противоположное». Но это не означает «мы выкинули половину словаря» — вероятно, изменение было более продуманным и сложным. Со стороны неизвестно, каким именно, но можно получить частичную картину.
Интернет-обсуждения
В отсутствие официальной информации люди строили свои версии произошедшего. В этом случае интереснее читать не случайных интернет-комментаторов, а тех, кто связан с LLM — вроде рисёрчера Натана Ламберта. Онпредположил, что раз в Opus 4.7 изменили токенизатор, то сменили и базовую модель (что неожиданно для не-мажорного релиза).
В ответ появилсятред-возражениео том, что возможны и другие объяснения. В нём ссылаются напубликациюо том, что возможно делить текст по-разному с одной и той же моделью и даже одним словарём токенов. Потому что обычно используют самые длинные подходящие сочетания символов из словаря, но возможно прибегать и к более коротким — хоть по одному символу. А зачем это делать? Публикация показывает, что это может повышать качество в отдельных задачах вроде обработки строк (звучит логично: «перевернуть строку» куда проще, когда она из отдельных символов).
Другаяпубликация, на которую ссылается тред, предлагает иначе подходить к числам. Обычно при токенизации символы объединяют «слева направо»: весь текст «читают по порядку» и «склеивают вместе» столько, сколько получится по словарю. А публикация утверждает, что конкретно числа вообще-то лучше объединять справа налево. Это звучит логично, если вспомнить, что мы сами объединяем их по разрядам «справа налево», отделяя каждые три (сравните «1,234,567» и «12,345,678»), у нас есть своя собственная «мысленная токенизация». И авторы пишут, что если машина смотрит на подобные разделители и перенимает человеческий подход, то с арифметикой становится лучше.
Тред резюмирует: даже без всякого претрейнинга новой модели есть различные причины менять разделение на токены. Так можно пытаться различными неочевидными средствами повышать качество результата.
Но подобные обсуждения отвечают на вопрос «Почему меняли». А для многих людей актуален другой вопрос: «Как именно меняются числа токенов, насколько “дороже” становится текст в разных случаях?»
Создатель Django Саймон Уиллисон заинтересовался вопросом «насколько всё увеличилось». Поэтому взялToken Counting APIот Anthropic и сделал поверх него простенький инструментToken Counter: его может бесплатно использовать любой, у кого есть API-ключ Anthropic.
Сам он ввёл туда стандартный системный промпт, чтобы посчитать «на сколько токенов его поделит». В Opus 4.7 их количество увеличилось по сравнению с 4.6 даже не на заявленные 1.0x–1.35x, а в целых 1.46x раза:
Следующим шагом он загрузил большой PDF-файл, получилось всего 1.08x. Но разница в полтора раза для обычного текста — это серьёзно, есть повод разбираться дальше.
Другой пользователь Билл Чемберс создал свойсайтдля подсчёта и призвал всех присылать туда разные промпты, чтобы составить картину по разноообразному контенту. В этом случае средним приростом оказался 1.36x — ну, хотя бы меньше 1.46x, но чуть больше максимальной планки, озвученной Anthropic.
Ещё интереснее, что Билл проанализировал «в каких случаях прирост получился больше» и обнаружил, что особенно сильный рост числа токенов у текстов, написанных заглавными буквами. В их случае разница может оказываться даже больше 1.5x.
Вряд ли на Хабре много любителей писать капслоком. Однако заглавных букв много и в SQL-запросах, и в shell-скриптах, и не только. Получается, когда Opus 4.7 читает подобные файлы, стоит быть готовым к повышенному расходу токенов.
Наконец, самый подробныйпостпо теме написал пользователь Абишек Рэй. Он прогнал через API тексты разных типов, и у него получилась такая таблица с результатами:
Content type
Technical docs (English)
Shell script
TypeScript code
Spanish prose
Markdown with code blocks
Python code
English prose
JSON (dense)
Tool definitions (JSON Schema)
CSV (numeric)
Japanese prose
Chinese prose
Какие выводы можно извлечь?
- Многое зависит от языка. В текстах на китайском и японском разница моделей практически незаметна, в отличие от английского и испанского.
- Числа тоже почти не задеты.
- А вот код задет ощутимо.
Также автор задался другим вопросом: «А стоила ли игра свеч, есть ли у новой модели улучшения, которые оправдывали бы рост цены?» Он решил сравнить с помощью бенчмарка IFEval, насколько у модели улучшилось следование инструкциям, и сделал осторожный вывод: «Есть небольшое улучшение, оно может быть связано с токенизацией, но стоит ли оно того для вас — решать вам».
Результат 1.01x для китайского и японского выглядит так, словно их токенизация вообще не изменилась: возможно, просто где-то в японском тексте затесалась парочка англоязычных слов и вызвала разницу. И напрашивается вопрос: если у английского и японского всё настолько по-разному, что тогда с русским? Как меняется ситуация для русскоговорящих разработчиков?
Абишек Рей подавать тексты на русском не пробовал. Поэтому попробовали мы.
Наши результаты
Мы тоже воспользовались тем жеAPI. Отправили для подсчёта токенов различные тексты на разных языках (от арабского до YAML). И особенно сосредоточились на русском, попробовав с ним разные варианты: от сухого бюрократического документа до JSON-файла с русскоязычными значениями.
Результаты получились такими:
- Увеличилось «минимально возможное число токенов»: видимо, из-за «служебных», которые добавляются при начале диалога автоматически. У Opus 4.6, если отправляешь промпт «в один токен», при подсчёте сразу получаются 8, а в 4.7 — уже целых 12, то есть «оверхед» возрос с 7 до 11.
- Это различие на 4 токена почти не имеет значения в реальных диалогах, но если при подсчётах токенов использовать очень короткие промпты, создаёт видимость большого роста в процентах. Так что дальше для проверки тут стоит использовать промпты подлиннее, чтобы оценивать более важную разницу, которая проявляется при любом масштабе.
- То, что уже сообщили другие, подтверждается. Действительно, рост числа токенов хорошо заметен с текстами на английском, особенно с заглавными буквами. У испанского и суахили, которые тоже используют латиницу, число токенов росло, но меньше английского. А у японского и арабского, где алфавит полностью другой, разница не наблюдается вообще.
- И, наконец, русский язык. Когда мы отправляли стандартные тексты, при переходе к 4.7 кириллица не росла в числе токенов. При этом русскоязычные тексты могли немного расти, но из-за вкраплений на латинице в них: например, если в техническом тексте через слово встречается «Docker» и «Grafana», это вызывает разницу.
- Может показаться, что все изменения в Opus связаны только с латиницей, а все остальные алфавиты вообще никак не трогали. Но мы пошли дальше, попробовали отправили русскоязычные тексты, написанные капслоком… и внезапно увидели громадный рост числа токенов по сравнению с 4.6. В некоторых случаях — более чем на 100%. Это даже больше, чем у англоязычного капслока.
- Возможно, японский и арабский не «пострадали» только из-за того, что у них нет заглавных букв? Для проверки мы использовали греческий и армянский: есть заглавные и используется не латиница. Как и с русским, тексты заглавными буквами резко увеличивались в числе токенов. Выглядит так, словно в Opus 4.7 из словаря активно вычищали сочетания заглавных букв.
Что всё это значит? У нас нет полной картины, но похоже, что произошёл какой-то «pruning». Из словаря убрали часть вариантов, и не просто по частотности, а выборочно и намеренно: русскоязычные токены строчными буквами вообще не затронули, а заглавными — затронули очень сильно.
При этом стоит учитывать, что русский язык в Opus изначально делился на куда большее число токенов, чем английский. В случае с Opus 4.6 для русскоязычных текстов из нашей выборки один токен в среднем кодировал около 2.5 символов, а для англоязычных — целых 4.86. Далее в Opus 4.7 англоязычный результат ухудшился до 3.18 символов на токен, а русскоязычный почти не изменился.
Получается, что разрыв сократился, однако английский остался более токеноэффективным. Но если вам всегда было проще писать промпты на русском (и не капслоком), то в Opus 4.7 можете писать их с чуть более «спокойной душой»: теперь проигрыш в токенах меньше прежнего.
Кажется логичным сказать: «Opus 4.7 подорожал, лучше оставайтесь на 4.6». Но в реальности, как обычно, куда больше важных нюансов.
Токенизация — лишь один из факторов. Порой оказывается, что новая модель с первого промпта делает то, для чего старой требовалось больше итераций. А чем их меньше — тем меньше токенов расходуется. И различные подобные факторы сложно сравнить все сразу «в лоб».
Так что вместо категоричных указаний — несколько практических выводов:
- В новых LLM могут происходить изменения, которые не освещаются полностью в официальных анонсах, но сказываются на практическом использовании. В том числе — в строну «незаметного удорожания».
- Их могут сводить к одной числовой метрике «1.0-1.35x». Но в жизни всё разнообразнее: числа могут отличаться от заявленных (мы встречали даже больше 2x), однако сильно зависят от сценариев использования (большинство людей с 2x не столкнётся).
- Чтобы в подобном разобраться, приходится прикладывать усилия, и даже после этого ответы лишь частичные.
- Из подобных изменений не следует однозначных выводов «теперь всем надо делать так-то». Но их полезно держать в голове для понимания ситуации. Например, если в ваших сценариях модель постоянно имеет дело с SQL-запросами, и при переходе к Opus 4.7 у вас стали быстрее заканчиваться лимиты, то дело может быть в том, как «подорожали заглавные». И с таким пониманием можно чуть лучше принимать решения: например, использовать разные модели для разных задач.
А какими эти решения будут конкретно в вашей ситуации — можете рассказать нам в комментариях.