Cherry Studio: расход токенов, пустой Cost и списания

Найдите запрос в Usage → Requests, проверьте происхождение суммы и единицу тарификации, затем сопоставьте запись со списанием у провайдера. Разбираем интерфейс v2.1.6, добавленную в main настройку цены за изображение, пустые значения, нулевые тарифы, валюты и сохранённые цены старых запросов.

Содержание
Cherry Studio: расход токенов, пустой Cost и списания

В статистике расходов Cherry Studio изображение уже сгенерировано, а в столбце Cost раздела Requests пусто или стоит прочерк. Это не означает, что генерация была бесплатной; показанная сумма тоже ещё не равна счёту провайдера. Найдите конкретную запись в Settings → Usage → Requests — разделе запросов в статистике использования — и проверьте происхождение суммы, единицу тарификации и фактическое списание: так можно понять, не задана ли цена, не хватает ли данных для расчёта или в двух системах вообще сравниваются разные вызовы.

Сначала сохраните имеющиеся записи запросов и списаний. Повторно генерировать изображения только ради появления числа в Cost не нужно. Описание интерфейса и расчётов ниже опирается на исходный код официального релиза и уже принятые изменения: оно объясняет учёт в клиенте, но не подтверждает работу конкретного сочетания провайдера, модели и аккаунта на реальных запросах.

Сначала проверьте версию: настройка цены за изображение уже в main, но ещё не в релизе

По состоянию на 17 октября 2026 года последний официальный релиз — v2.1.6. В тот же день в main принят PR #21892 с настройкой цены за изображение. main — ветка разработки; принятие изменения не означает, что оно уже есть в установленной у вас официальной версии. См. официальный релиз и PR с ценой за изображение.

16 октября 2026 года пользователь codeBennyLaw сообщил в обращении #21870, что в Windows-версии v2.1.6 доступны только цены за миллион токенов, а у некоторых запросов на генерацию изображений в Cost стоит прочерк. Это описание его среды, а не основание считать все модели генерации изображений бесплатными. Обращение закрыли после принятия PR, но для выбора действий всё равно нужно знать установленную версию.

Какой интерфейс у вас открытЧто он позволяетЧто делать
Редактор цен модели в v2.1.6Задавать цены входных, выходных и кэшированных токенов, а также ценовые пороги; поля цены за изображение нетДля тарификации по токенам проверить соответствующие цены; запросы с оплатой за изображение сверять с записями провайдера
Сборка с PR #21892, в которой действительно есть Price unit и Image priceЗадавать цену за одно сгенерированное изображениеУточнить, что провайдер тарифицирует именно изображения, затем ввести цену и проверить новый запрос
Более новая или изменённая сборка с другим интерфейсомНабор возможностей зависит от сборкиСвериться с её описанием и реальными полями, не угадывать настройки по скриншоту другой версии

Таблица основана на редакторе цен v2.1.6 и редакторе после принятого изменения. Дальше приведены английские названия элементов, чтобы их было легче найти; подписи в приложении зависят от выбранного языка.

Найдите в Requests нужный запрос

Прежде чем сравнивать суммы, убедитесь, что сравниваете один и тот же вызов. Подготовьте версию клиента, использованную тогда конфигурацию провайдера, точный ID модели и записи об использовании или списаниях из того же аккаунта провайдера. Совпадение отображаемого названия модели ещё не доказывает, что модель и канал тарификации одинаковые.

  1. Откройте Settings → Usage → Requests, выберите период, включающий нужный запрос, и найдите его по Date.
  2. Сверьте название модели в строке и название провайдера под ним. Столбец Source показывает, какой ассистент, диалог или функция создали вызов; происхождение суммы он не показывает.
  3. Запишите дату и время, Tokens, Cost и валюту. Если нужной строки нет, сначала верните сортировку по Date, проверьте период и воспользуйтесь загрузкой дополнительных строк внизу списка. При сортировке по Cost применяется фильтр по выбранной валюте, поэтому записи без суммы могут не попасть в результат.
  4. Сохраните и записи провайдера за этот период. Время в записи клиента — время завершения вызова; у провайдера могут быть другой часовой пояс и другое время отражения операции. Выберите окно, которое охватывает весь запрос.

Поля и способ отображения описаны в исходном коде таблицы Requests и логике записи вызовов.

Если записей нет вообще, сначала проверьте период, загрузку списка и завершился ли вызов. Если отсутствует только Cost, переходите к ценам и происхождению суммы. Это разные ситуации: переустановка приложения или очистка истории сами по себе не помогут установить, списал ли провайдер деньги.

Откуда берётся Cost и почему Source этого не объясняет

Происхождение суммы важнее количества знаков после запятой. Клиент сначала пытается принять стоимость, которую вернул провайдер, если выполнены необходимые условия. Иначе он рассчитывает её по сохранённым на момент запроса ценам; если оба варианта недоступны, сумма остаётся неизвестной. См. логику учёта стоимости.

Состояние записиЧто оно означаетКак использовать при сверке
costSource равен providerКлиент принял стоимость из ответа провайдера; должны выполняться условия по заявленным возможностям провайдера, сумме и валютеРассматривать её как сведения о стоимости из конкретного ответа и всё равно сопоставлять со списанием в аккаунте
costSource равен computedКлиент рассчитал сумму по расходу и ценам, сохранённым на момент вызоваИспользовать для оценки расходов и динамики; проверять, совпадают ли локальные тарифы с тарифами аккаунта
Cost отсутствует, источник суммы пустНет подходящей суммы от провайдера и недостаточно данных для локального расчётаСумма неизвестна; проверить фактическое списание у провайдера, не подставлять ноль

В v2.1.6 отсутствующий Cost показан как -; английская подпись в рассмотренном коде main — Unable to estimate. В таблице Requests нет отдельного столбца costSource или подсказки с происхождением суммы. Не принимайте Source за такой столбец и не определяйте источник по самому числу. Если интерфейс явно его не указывает, считайте происхождение суммы неустановленным. См. таблицу в main и английские подписи интерфейса.

Даже наличие поля стоимости в ответе провайдера не гарантирует, что клиент его примет. Учитываются, в частности, заявление провайдера о передаче фактической стоимости и возможность определить валюту. Изменять внутренние записи для этой проверки не требуется: фактическое списание нужно сверять в аккаунте провайдера. См. официальное описание учёта стоимости.

Расчёт по токенам: проверьте единицы и категории расхода

Tokens в Requests — общее количество токенов; умножать его на одну общую цену нельзя. computed означает только то, что сумма рассчитана локально, а не то, что количество токенов тоже оценил клиент. Функция подсчёта сначала использует totalTokens; если общего значения нет, складывает имеющиеся входные и выходные счётчики. Когда неизвестны оба, значение остаётся пустым. См. определение общего количества токенов.

Откройте Settings → Model Provider → нужный провайдер → шестерёнка у модели → More settings и найдите блок цен. Сверяйте его с действующим тарифом именно для вашего аккаунта, модели и ценового диапазона:

  • Input Price / Output Price — цены за миллион входных и выходных токенов соответственно. Если провайдер указывает цену за тысячу, сначала переведите её в цену за миллион, затем вводите значение. Копировать число без пересчёта нельзя.
  • Cache Read Price / Cache Write Price — цены чтения из кэша и записи в кэш. Пустое поле в этом редакторе означает использование входной цены выбранного диапазона. Значение 0 задаёт бесплатный локальный тариф; пустое поле нулю не равно.
  • Ценовые диапазоны по длине входа — клиент выбирает тариф по полному объёму входных токенов этого вызова и применяет его ко всему вызову. Это не прогрессивный расчёт, при котором разные части объёма оплачиваются по разным ставкам. Если обязательных данных о расходе или ценах нет, оценка может остаться пустой.

Поля и сохранение цен можно проверить в редакторе цен, а правила расчёта — в описании учёта стоимости.

Сведите категории расхода и цены в одну запись: вход без кэша × цена входа + чтение из кэша × цена чтения + запись в кэш × цена записи + выход × цена выхода, с пересчётом каждой составляющей на миллион токенов. Если общее количество входных токенов уже включает кэш, сначала разделите эти категории: повторно добавлять кэш в обычный вход нельзя. Токены рассуждения, уже включённые в выход, также не нужно прибавлять второй раз. Если разбивки нет, отметьте её как неизвестную; общий Tokens не позволяет восстановить точный счёт.

Отдельно проверьте валюту. В рассмотренном редакторе $ означает USD, а ¥ — CNY, не JPY; смена символа не пересчитывает сумму по обменному курсу. Если пополнение или банковская выписка у вас в рублях, а цена модели в долларах, сначала сверьте долларовую стоимость вызова, затем отдельно — курс и комиссию пополнения. Не складывайте суммы в разных валютах. См. соответствие символов валютам и сохранение цен.

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

Пустой Cost у изображений: оплата за запрос или за картинку?

Цена за запрос, цена за изображение и тарификация по токенам изображения — разные условия оплаты. Один запрос может вернуть несколько изображений. Фиксированную цену запроса нельзя напрямую вводить как цену каждого изображения или записывать в Input Price либо Output Price.

В v2.1.6 механизм расчёта по изображениям уже существует, но соответствующего поля в настольном редакторе цен нет. Для локального расчёта сохранённая цена должна содержать perImage с unit, равным image, а вызов должен передать imageCount. Одних цен токенов или единицы pixel недостаточно. См. условия расчёта стоимости изображений.

Если в вашей сборке действительно появился новый элемент настройки и провайдер явно берёт плату за сгенерированное изображение, выполните следующие действия:

  1. В блоке цен той же модели у того же провайдера переключите Price unit на Image.
  2. В Image price введите цену одного изображения в соответствующей валюте. Выйдите из поля и снова откройте модель, чтобы проверить сохранение.
  3. Если цена неизвестна, оставьте поле пустым. Вводите 0 только при действительно нулевом тарифе: искусственный ноль изменит локальное отображение, но не остановит списания у провайдера.
  4. Переключатель выбирает только то, какую цену вы редактируете; цены токенов и изображений сохраняются. Он не добавляет фиксированную плату за запрос и не решает расчёт по пикселям или токенам изображения.
  5. Проверьте одну новую генерацию после изменения цены. Получив результат, запишите фактическое количество изображений, время запроса и новый Cost, затем сопоставьте их с записями провайдера. Локальный расчёт должен опираться на количество сгенерированных изображений × действовавшую на момент запроса цену за изображение, с учётом применимых множителей или временных правил провайдера. Проверочный запрос тоже может быть платным, поэтому лучше использовать генерацию, которая вам и так нужна.

Эти действия соответствуют новому редактору цен и функции сохранения. Если поля нет, пока сверяйте расходы с фактическими записями провайдера. Настройку можно выполнить, когда установленная официальная версия явно включает эту возможность.

Даже после ввода цены новый Cost может остаться пустым. Проверьте, не использовалась ли другая конфигурация модели, передано ли количество изображений, достаточно ли данных о валюте и соответствует ли реальная тарификация цене за изображение. В официальном обработчике пользовательских задач генерации imageCount равен количеству возвращённых URL изображений; подменять его числом файлов, которые удалось скачать на компьютер, нельзя. Такой подсчёт также не гарантирует совпадения с правилами каждого провайдера. См. код учёта задач генерации изображений.

Сверьте списание и сохраните данные, которые объясняют разницу

Один завершённый запрос проще проверить, чем сразу сопоставлять месячные итоги. Используйте тот же аккаунт провайдера. Если записи можно различать по метке или группе ключа, сохраните и эту информацию, но не включайте полный ключ в скриншоты или обращения за помощью.

Что сохранитьВ Cherry StudioУ провайдера
ИдентификацияВерсию клиента, конфигурацию провайдера, отображаемое название модели и её точный IDФактический аккаунт, ID модели, применимый ценовой диапазон
ВремяВремя завершения запроса и локальный часовой поясВремя отражения операции, часовой пояс и окно, охватывающее тот же вызов
КоличествоВидимый Tokens; фактическое количество возвращённых изображенийРасход по категориям входа, выхода и кэша; число оплачиваемых запросов или изображений
СуммаCost в исходном виде, валюту и отсутствие значения, если оно пустоеФактическое списание, валюту и видимые возвраты или корректировки
Связь записейДиалог или функцию, из которых выполнен запросИдентификатор запроса или записи списания, предоставленный провайдером

Если обе стороны явно показывают один и тот же ID запроса провайдера, сначала сопоставьте записи по нему. В остальных случаях используйте вместе аккаунт, модель, временное окно и количество. Внутренние идентификаторы Cherry Studio имеют собственный формат, поэтому нельзя заранее считать их равными ID провайдера. См. официальное описание структуры записей.

Если вы уже пользуетесь BetterToken, по официальной инструкции по расходам откройте текущую статистику и историю списаний в панели управления, затем сверьте модель, время, статус и токены по тем полям, которые доступны на странице.

Если суммы не совпали, проверяйте в таком порядке:

  • Не совпадает количество. Уточните, не используют ли тот же аккаунт другие инструменты и не вызвало ли одно действие несколько обращений к модели. Повторные попытки SDK, которые клиент не наблюдает, могут не попасть в Requests. Не следует ожидать, что строки с двух сторон всегда соответствуют друг другу один к одному.
  • Количество совпадает, суммы разные. Проверьте модель, единицу оплаты — изображение, запрос или токены, — правила кэша, ценовой диапазон, валюту, множитель и фактический тариф аккаунта. Затем сравните их с ценами, сохранёнными на момент запроса.
  • Провайдер списал деньги, а Cost пуст. Сохраните пустое значение и отдельно запишите «клиент не смог оценить стоимость; провайдер списал средства» с соответствующей суммой. Не заменяйте неизвестное значение нулём.
  • В клиенте нет записи или показана ошибка, но запись у провайдера есть. Сначала выясните у провайдера условия завершения, списания и возврата; передайте время, модель и его ID запроса, удалив из материалов чувствительные данные. Не отправляйте сразу серию повторных запросов ради воспроизведения ошибки.

Официальное описание называет эти записи аналитическими данными, которые клиент сохраняет по мере возможности. Незаметные для клиента повторные попытки, неудачные вызовы и записи, перенесённые из старой версии, могут влиять на сравнение количества. Фактические списания определяются записями провайдера; непонятные операции должен объяснить он, а пустой Cost не даёт оснований делать выводы о списании. См. охват учёта и его ограничения.

Когда сверку можно считать завершённой

У вас должны остаться записи одного запроса с обеих сторон и ответы на три вопроса: какая модель и единица тарификации использовались, установлено ли происхождение суммы клиента или это расчёт/неизвестное значение, сколько в итоге списал провайдер и чем объясняется разница. Если меняли локальную цену, проверьте её сохранение и расчёт на новом запросе. Старые значения сохраните без изменений: автоматического пересчёта истории ожидать не нужно.

Начните с одного уже выполненного запроса на изображение: запишите версию, модель, время, фактическое количество изображений, Cost и списание провайдера. Когда сможете объяснить эту запись, расширяйте период. Если объяснения нет, передайте недостающие поля и данные соответствующего запроса провайдеру или в проект клиента для проверки.

Готовы оптимизировать LLM workflow?

Подключите единый API, управляйте ключами и контролируйте расходы на AI-модели в BetterToken.

Начать бесплатно