Памятка для маленьких платнопоросяток

Если ты пейпиг и платишь потокенно, то знай что существует способ ебашить слоубёрны хоть по миллиону сообщений, при этом не вылезая за 20-40к контекста, и сетка всё будет помнить и не тупеть от твоих 700к контекста. При этом за счёт того что ты будешь кэшировать запросы, при грамотном раскладе можно сэкономить ещё минимум в пару раз от стоимости этих 20-40к.

Кэширование

Каждый свайп или сообщение ты заново шлёшь свой промпт в API целиком, с картой, историей, промптом, и прочей мурой что у тебя там есть. По мере удлинения истории это всё может влететь в копеечку. Но есть вариант сэкономить, применив кэширование. Токены которые не изменились в твоём промпте между запросами, стоят намного дешевле, обычно раз в 10. Все что изменились стоят чуть дороже (обычно 20-50%). В API запросах типичного ролеплея обычно больше всего расходов идёт на инпут, а он легко подвергается кэшированию.

На стороне провайдера кэш это не просто набор токенов, а огромный вектор состояния контекста, и хранится он специально для тебя, занимая драгоценные гигабайты в VRAM на нодах стоимостью в элитный особняк. Поэтому никто не хранит его бесконечно, у кэша есть таймаут. Он зависит от провайдера, например у клода это час, у дипсика ненормировано вплоть до суток (у них есть особая магия сжатия контекста, за счёт этого они успевают его быстро-быстро дёргать на SSD и обратно в VRAM).

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

  • любой вид рандома, например {{random}} или {{roll}} (но не {{pick}}, т.к. он рандомится один раз за весь чат и дальше остаётся неизменным, если ты не делаешь /reroll-pick)
  • {{getvar}}
  • точки инжекта записей лорбука (World Info)
  • суммарайз
  • инфоблок (хотя его можно и оставить как обычно в прошлом сообщении, потеря невелика)

и т.д.

Суммарайз

Поскольку историю ты будешь сильно ограничивать, ключевые события можно запоминать при помощи суммаризации, чтобы ничего не забывалось. Как сделать адекватный суммарайз можешь почитать например здесь, а потом взять пресет-генератор саммари отсюда. Либо можешь придумать свою охуительную схему, главное запостить не забудь чтобы и другие аноны пользовались.

С кэшем у саммари есть два нюанса. Во-первых, саммари это "время от времени" изменяемая часть, поэтому либо суй его вниз, либо мирись с тем что кэш сгорает каждый раз когда ты его обновляешь.

Во-вторых. Если суммарайз-промпт отличается от основного, контекст у тебя перекосоёбит и кэш сгорит. Чтобы так не было, ты можешь либо суммарайзить на отдельной сетке, либо выписать себе отдельный API ключ. Дальше всё зависит от провайдера, тестируй - вполне может оказаться что провайдер жмот и у него один кэш на все ключи (хотя обычно нет).

Лорбук

Некоторые вещи в саммари писать слишком накладно по токенам и сложности. Например у тебя ебовая адвенчура, в которой ты бродишь по миру и открываешь новых НПС и новые локации. Если ты уверен что когда-нибудь ещё повстречаешь их, то надо где-то запомнить их описания, раскладку, и т.п., потому что лишнюю историю ты отбрасываешь. Нет никакого смысла держать их в контексте целиком все одновременно, ведь ты не будешь во всех локах сразу. Для этого в таверне есть лорбуки, и можно привязывать их к конкретному чату. Создай новый лорбук через World Info -> New. Открой карточку (иконка книжки с глобусом, Chat Lore), выбери свой лорбук чтобы его привязать.

Допустим ты пришёл в новую локу Конезалупово. Пишешь или генерируешь ей описание, можно в XML но не обязательно, как хочешь:

1
2
3
<location name="Конезалупово">
Конезалупово это деревня к северу от Ебенёво, там живут алкаши и бомжи. (ещё 400 токенов говна)
<location>

Создаёшь в лорбуке запись с кейвордом Конезалупово, если на русике то /[Кк]онезалупово/ чтобы оно учитывало регистр. Теперь как только лока будет упомянута в истории, в контекст подсосётся её описание. Чтобы кэш не сгорел при этом, убедись что в твоём пресете точки обе точки инжекта лорбука находятся под историей.

Откуда сетка будет вообще знать что такая лока существует и её можно упомянуть, если её в контексте давно нет? Для этого в суммарайзе по ссылке выше есть модуль Visited Locations, в котором хранятся краткие однострочные описания доступных локаций которые ты намерен повторно посетить. Кроме того, существует механика инфоблока, в нём ты можешь написать "Location: такой-то" и пока ты находишься в этой локе, у тебя её имя, а с ним и описание из лорбука, будут болтаться в контексте.

То же самое можно сделать с НПС, например в инфоблоке можно трекать состав текущей пати. Да и вообще с любым куском лора, который ты выявил в процессе РП.

Как избежать сгорания кэша на длинной истории

Поскольку ты вроде как сэкономить пытаешься, на длинных чатах возникает нюанс. Допустим ты ставишь лимит контекста 32к токенов и лимит ответа 8к токенов, т.е. таверна сможет отослать сетке не более 24к. Как только твоя карта+промпт+история набирают 24к в сумме, хвост истории начинает отрезаться (таверна чертит пунктирную линию в этом месте), и вся история сдвигается на 2 сообщения. Поскольку история теперь не совпадает с прошлым запросом один в один, то сгорает весь кэш на ней и ниже, оставляя лишь промпт и карту. Т.е. бОльшая часть кэша начинает тупо сливаться в унитаз каждое сообщение.

Поэтому РПшить длинные чаты с кэшем надо немного иначе.

  1. Включи отображение номеров сообщений в таверне (User Settings -> Message IDs).
  2. РПшь пока не забьётся лимит. Вот для примера у тебя сообщение #40 подошло к твоему лимиту контекста, дальше уже начнёт отрезаться.
  3. Спрячь от сетки все сообщения кроме последней пары ответов командой /hide (набирай прямо в ответе). 2 ответа это 4 сообщения, т.е. в данном случае делаешь /hide 0-36. Сообщения с этими номерами останутся в таверне, но сетке слаться не будут.

Теперь кэш на истории сгорит, и она начнёт заполняться заново. Так и повторяешь по кругу - РПшишь до забивания лимита, делаешь /hide, оно сгорает и заполняется по новой. Если хочешь, можно сделать обратно /unhide 0-40.

Допсетки и внешние блоки

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

Нюансы кэша у провайдеров

Прежде чем глубоко РПшить, убедись что твой кэш вообще работает (например у OpenRouter можно посмотреть в профиле сколько токенов было закэшировано в каждом запросе). Некоторые провайдеры глючные, некоторые имеют какие-то неочевидные нюансы взаимодействия с таверной или свои собственные, и т.п. Например клод способен кэшировать лишь блоками по 1к токенов, а автоматическое кэширование у него было добавлено лишь недавно, обновись на staging ветку таверны, если там это вообще есть. Ещё например у большинства провайдеров кэш работает по сообщениям, поэтому безжоп нормально на них не кэшируется, ведь у него вся хистори хранится в одном сообщении, которое удлиняется каждый раз.

Edit

Pub: 23 Mar 2026 19:11 UTC

Edit: 23 Mar 2026 19:41 UTC

Views: 73