Коротко
Автор протестировал кэширование префикса DeepSeek на ролевом диалоге с блоком контекста около 20 тысяч токенов. Перенос примерно 30 изменяемых токенов из начала системного сообщения в конец снизил стоимость повторных ходов примерно на 95–96%, поскольку сохранялся совпадающий префикс запроса.
Контекст
Автор построил бенчмарк для типичного чат- или roleplay-приложения, где на каждом ходу отправляются карточка персонажа, лор, память и состояние отношений. Задача — выяснить, почему встроенное кэширование входного контекста DeepSeek не приносит ожидаемой экономии. Точная компания или должность автора не указана.
Главное
- Стабильный промпт состоял из карточки персонажа, 20 записей lorebook, долговременной памяти и состояния отношений — всего около 20 000 токенов.
- Изменяемый заголовок содержал ISO-время, номер хода, UUID сессии и индекс настроения; его объём составлял около 30 токенов.
- Сравнивались три размещения заголовка: в начале system message (A), в конце system message (B) и в конце нового хода пользователя (C).
- Эксперимент проведён на deepseek-flash, в режиме thinking disabled, на восьми ходах реального разговора.
- A показал 0% cache hit; B — 85,8%, C — 86,8%.
- Без первого холодного запроса экономия на ход относительно A составила 95,2% для B и 95,9% для C.
- В запросах A между первым и вторым ходами совпадало лишь 75 из 84 665 байт; у B — 84 493 байта, у C — 84 664 байта.
- B удерживал кэшируемый объём на уровне 16 896 токенов за ход; C увеличил его до 17 536 токенов к восьмому ходу благодаря неизменному системному сообщению и добавлению истории в конец.
- Для deepseek-flash автор также советует явно задавать { “thinking”: { “type”: “disabled” } }, если приложению не нужны рассуждения: thinking включён по умолчанию с высоким усилием, а reasoning-токены тарифицируются как выходные.
Как сделано
Собрали стабильный блок примерно на 20 000 токенов и добавили меняющийся заголовок около 30 токенов: время в ISO-формате, номер хода, UUID сессии и индекс настроения. Сравнили три варианта на восьми ходах реального разговора с deepseek-flash, отключив thinking mode: A — заголовок в начале system message; B — в конце system message; C — в конце последнего сообщения пользователя, при неизменном system message и добавлении истории только в конец.
Результаты брали из полей API prompt_cache_hit_tokens и prompt_cache_miss_tokens. Дополнительно сравнили тела запросов между первым и вторым ходами. Для отключения рассуждений в статье приведена настройка { “thinking”: { “type”: “disabled” } }.
Результаты
Вариант A не получил ни одного попадания в кэш: за 8 ходов стоимость составила $0.021006, или около $0.002626 за ход. У B доля кэш-хитов была 85,8%, стоимость — $0.003465; у C — 86,8% и $0.003326. Если не учитывать первый холодный запрос, стоимость хода снизилась на 95,2% для B и на 95,9% для C. В прогнозе для 1 000 активных пользователей в день по 50 ходов в месяц расходы составили бы $3 948,78 для A, $190,78 для B и $161,12 для C. В B повторно использовалось 16 896 токенов на ход, а в C число попаданий росло с 16 896 на втором ходу до 17 536 на восьмом.
Ограничения
Кэширование у DeepSeek работает по принципу наилучших усилий, а не гарантированно; записи обычно истекают через часы или дни, и первый запрос всегда промахивается. Эксперимент охватывал только deepseek-flash, восемь ходов на вариант, контекст около 20 тысяч токенов и цены в непиковое время; в пиковые часы тариф вдвое выше. Прогноз затрат использует измеренную стоимость хода и не учитывает типичное для реального приложения сжатие истории, поэтому абсолютные суммы могут отличаться. Автор утверждает, что принцип применим и к другим системам префиксного кэширования, но проверил только одного провайдера. Экономия от отключения reasoning отдельно не измерялась.
Что взять себе
- Помещайте меняющиеся данные — время, счётчик хода, UUID и состояние пользователя — после большого стабильного префикса, а не в начале system message.
- Для быстрой оптимизации часто достаточно перенести переменный заголовок в конец system message; переход к append-only истории может дополнительно улучшать кэш по мере диалога.
- Проверьте, не переписывает ли приложение старую историю или системный промпт на каждом ходе: любое различие в начале запроса разрушает совпадение последующего префикса.
- Если используете DeepSeek для обычного чата или ролевого диалога, проверьте режим thinking и отключите его, когда рассуждения не нужны.
Читать оригинал, если…
Откройте оригинал, если нужны таблицы измерений по ходам, детали бенчмарка или исходные данные API.