Сколько на самом деле стоят токены LLM и как платить за меньшее их количество
Каждый счет API для языковой модели — это счет за токены, и почти никто не имеет интуитивного представления о том, сколько токенов содержит данный фрагмент текста. Результат один и тот же сюрприз дважды в месяц: функция, которая при тестировании показалась дешевой, стоит в сорок раз дороже в производстве, или контекстное окно, которое «должно подходить», отклоняет запрос. Обе задачи являются арифметическими, и арифметику стоит выучить один раз.
Маркер - это не слово
Модели не читают символы и слова. Они считывают токены — фрагменты, созданные кодировщиком пар байтов, который во время обучения узнал, какие последовательности встречаются достаточно часто, чтобы заслужить собственный символ. Общие английские слова — это один токен. Редкие раскололись. Так token это один и tokenization равно трем, а случайная строка типа x7Qp2 может стоить пять.
Практические правила, которые стоит соблюдать:
- Английская проза: примерно четыре символа на токен или около 0,75 токена на слово. Статья в тысячу слов стоит около 1300 токенов.
- Код: значительно хуже. Отступы, пунктуация и идентификаторы CamelCase — все фрагментированы. Бюджетируйте ближе к трем символам на токен и относитесь к минифицированному коду как к собственной катастрофе — он плохо токенизируется именно потому, что он необычен.
- Нелатинские сценарии: снова гораздо хуже. На китайском, японском и корейском языках обычно приходится около одного токена на один или два символа, поэтому один и тот же контент на японском языке может стоить в несколько раз дороже, чем английская версия. Кириллица и греческий находятся между ними.
- JSON: пунктуация - реальные деньги. Каждая кавычка, фигурная скобка, двоеточие и запятая являются, по крайней мере, частью токена, а глубоко вложенные структуры с длинными именами ключей могут тратить больше средств на синтаксис, чем на значения.
Эмпирические правила предназначены для оценки. Когда это важно, считайте: Токен LLM и калькулятор стоимости токенизирует то, что вы вставляете, и печатает счетчик, а также может отображать текст с отмеченными границами токенов, что является самым быстрым способом понять, почему одно из ваших приглашений неожиданно дорогое. Видя, как ваши собственные имена-идентификаторы разбиваются на четыре части, каждая из них многое объясняет.
Выходная стоимость в несколько раз превышает входную
Детали ценообразования, которые люди упускают из виду: поставщики взимают отдельную плату за отправляемые вами токены и токены, генерируемые моделью, а выходная скорость обычно в четыре-восемь раз превышает входную скорость. Во входных данных доминирует приглашение с 10 000 токенами контекста и ответом из 200 токенов. В приглашении с 500 токенами инструкций, которое создает эссе из 4000 токенов, доминирует (в значительной степени) результат.
Это переворачивает многие инстинкты оптимизации. Уменьшение системного приглашения с 900 до 600 токенов экономит очень мало, если модель пишет длинные ответы на каждый звонок. Если вы предложите модели отвечать тремя предложениями вместо трех абзацев, это позволит значительно сэкономить. Спросите, на какой стороне транзакции на самом деле находится ваша рабочая нагрузка, прежде чем оптимизировать не ту.
Калькулятор оценивает один и тот же текст для каждой модели в своей таблице как по входным, так и по выходным ставкам, поэтому вы можете сравнить дешевую модель, выполняющую всю работу, с дорогой, выполняющей ее часть. Справочные цены хранятся локально и периодически сверяются со страницами поставщиков — рассматривайте их как помощь в планировании и сверяйте их с собственной страницей цен поставщика, прежде чем принять решение о бюджете, поскольку ставки меняются.
Чат квадратичен, и именно здесь умирают бюджеты
Однократный вызов API стоит столько же, сколько он стоит. Разговор повторно отправляет всю историю на каждом ходу, поэтому чат из двадцати ходов не стоит двадцать раз за один ход — он стоит примерно столько же, сколько растущая серия. Двадцатый ход снова платит за ходы с первого по девятнадцатый.
Два последствия. Во-первых, длительные циклы агентов — это самая дорогая форма использования LLM, и ее прототипы, скорее всего, будут создаваться без измерений. Во-вторых, кэширование подсказок имеет большее значение, чем любое изменение формулировки: поставщики скидывают токены, которые повторяют префикс, который они уже видели, что означает размещение вашего стабильного контента — системного приглашения, схемы, примеров — в самом начале, а переменную часть — в конце. Измените порядок одного и того же приглашения так, чтобы изменяющаяся временная метка находилась вверху, и вы аннулировали кеш при каждом вызове, ничего больше не меняя.
Уменьшение приглашения перед отправкой
Большинство подсказок слишком большого размера имеют слишком большой размер по скучным причинам: кто-то вставил целый файл, когда были важны три функции, а файл состоит из половины комментариев и пустых строк. Компрессор контекста LLM нацелен именно на это — он удаляет комментарии к коду, сворачивает пустые строки, делает отступы и удаляет слова-заполнители из прозы, а затем сообщает, сколько токенов сохранено в результате обрезки. На реальном исходном файле, который обычно работает на 20–40%, не затрагивая ничего, что нужно модели.
Ручные разрезы, которые стоит сделать перед этим:
- Отправляйте отрывки, а не файлы. Внимание модели тоже не бесплатно; нерелевантный контекст заметно ухудшает ответы, а также требует денег.
- Удалить журналы в проблемном регионе. Десять тысяч строк успешного запуска ничего не дают для диагностики.
- Отбросьте повторяющийся шаблон. Заголовки лицензий, сгенерированный импорт, один и тот же отказ от ответственности для каждой записи.
- Подведите итог вместо повторной отправки. В долгом разговоре замена этапов с первого по пятнадцатый абзацем состояния — это самая большая возможная экономия.
Когда входные данные действительно не подходят
Контекстные окна теперь большие, но «большие» по-прежнему ограничены, и книга, год журналов или полная стенограмма превысят одну. Разделение — это стандартный ответ, и то, где вы разделяете, имеет значение: вырезание в середине предложения или в середине функции дает фрагменты, о которых модель должна догадаться. быстрый разделитель делит текст на фрагменты выбранного вами размера, соблюдая при этом границы, и нумерует части, чтобы вы могли подавать их последовательно, прилагая к каждой последовательной инструкции.
Примечание о единицах измерения: токены не являются байтами. Счетчик байтов UTF-8 отвечает на другой вопрос — сколько места занимает текст в сети или в столбце базы данных — и эти два числа резко расходятся для нелатинского текста, где количество байтов на символ увеличивается в то время, как количество символов на токен уменьшается. Используйте байты для ограничений хранилища и токены для ограничений модели и никогда не заменяйте одно другим.
Проработанный пример
Предположим, вы отвечаете на двадцать вопросов в тридцатистраничном документе. Тридцать страниц — это около 15 000 слов, то есть примерно 20 000 токенов. По наивности, вы отправляете документ с каждым вопросом: 20 × 20 000 = 400 000 входных токенов плюс, возможно, 20 × 300 выходных токенов.
Помещайте документ первым и сохраняйте его байтовую идентичность при всех вызовах, а большинство провайдеров обслуживают повторяющийся префикс из кэша с гораздо меньшей скоростью. Сначала обрежьте шаблонный документ, и основание тоже уменьшится. Пакетно задайте пять вопросов за звонок вместо одного, и вы отправите документ четыре раза вместо двадцати. Та же задача, та же модель и порядок между небрежным вариантом и осторожным — в этом и весь смысл подсчета перед отправкой.
И счетчик, и компрессор полностью работают в вашем браузере: запрос, который вы оцениваете, никуда не загружается для измерения.
Создатель TextArray — создания бесплатных инструментов, обеспечивающих конфиденциальность, которые полностью работают в вашем браузере.