Что именно мерили
Перед каждой сессией в модель уходит набор слоёв: общие инструкции, инструкции проекта, вывод стартового хука, накопленный слой памяти, описания доступных навыков. Ни один из них не запрашивается — они приезжают всегда, на любой вопрос, включая «привет».
Считали сторонним токенайзером общего назначения. Оговорка стоит прямо в отчёте: это прокси, а не счётчик самой модели, поэтому абсолютные значения приблизительны, а отношения между слоями и разница до/после — устойчивы.
| Слой предзагрузки | Было | Доля | Стало |
|---|---|---|---|
| Накопленный слой памяти | 9 707 | 40% | 5 046 |
| Инструкции проекта | 7 056 | 29% | 3 994 |
| Вывод стартового хука | 5 002 | 21% | 880 |
| Общие инструкции | 1 852 | 8% | 1 439 |
| Описания навыков | 769 | 3% | 904 |
| Итого | 24 386 | 100% | 12 263 (−50%) |
Честная разбивка по готовности: вживую применено пока только сокращение памяти — −4 661 токен (−19%). Ещё −7 184 вступают в силу при слиянии веток, а −413 ждут решения по содержанию общих инструкций.
Оптимизация, которая сделала хуже
Первая версия сокращения индексов памяти выглядела разумно: вместо перечня записей в малой зоне оставить сноску «нужное найдётся поиском». Замер после правки показал обратное — суммарный вес 18 малых индексов вырос: 4 431 → 4 918 байт.
Почему так вышло. Сноска «возьми поиском» — это несколько десятков байт на каждую зону, а спрятанный указатель в маленькой зоне занимал меньше. На зоне из трёх записей инструкция, как искать записи, тяжелее самих записей.
Из промаха вышел порог: зона считается малой при восьми записях и меньше, и у таких зон указатель остаётся на месте. Без замера правка уехала бы в работу как улучшение — она ведь сокращала текст, это видно глазом.
Честный минус: наше изменение добавило 322 токена
Вторая работа того же цикла разделяла данные по проектам, чтобы сессия в одном контуре не тянула контекст соседнего. Итог по экономии отрицательный, и в отчёте он написан прямым текстом: экономии на предзагрузке изменение не даёт, оно её увеличивает на 322 токена — стартовый хук потяжелел с 5 002 до 5 324, замерено прогоном, а не прикинуто.
| Тип запуска | Стартовых токенов было | Изменение |
|---|---|---|
| Изолированная копия репозитория | 14 784 | +322 |
| Общее рабочее дерево | 13 429 | 0 |
| Дочерний проект со своими инструкциями | 9 651 | 0 |
| Дочерний проект без своих инструкций | 2 028 | 0 |
| Остальные репозитории | 1 956 | 0 |
Минус приняли осознанно: изменение решало задачу разделения данных, а не экономии, и платить за него тремя сотнями токенов на одном типе запуска дешевле, чем разбирать потом утечку контекста между проектами. Ценность здесь в другом — в отчёте написано «моё изменение экономии не даёт». Отчёт, где все строки со знаком плюс, читать нельзя: он либо неполон, либо подогнан.
Зачем чистить предзагрузку, если токены дёшевы
Настоящая причина всплыла в середине работы. Число, приехавшее в контекст на старте, внутри ответа неотличимо от числа, полученного проверкой: и то и другое агент выдаёт утвердительно, без пометки об источнике. Отсюда правило, которое мы для себя вывели: из предзагрузки убирается всё числовое.
Как это выглядит в жизни. Стартовый хук печатал в контекст готовые значения из рабочей базы. Сессия отвечала ими бодро и точно — до дня, когда значения устарели. Ошибку такого рода невозможно заметить внутри ответа: он не отличается от правильного ничем.
Указатель вместо значения решает обе задачи разом: контекст легчает, а число попадает в ответ только через обращение к источнику — то есть с датой и с возможностью перепроверки.
Что сделать у себя
- Посчитайте свою предзагрузку по слоям. Не общий объём, а именно разбивку: почти всегда один слой занимает половину, и это не тот слой, на который вы думали.
- Выкиньте из стартового контекста все значения. Числа, суммы, остатки, адреса — заменяются указателем «где взять». Ответ должен доставаться проверкой, а не памятью о вчерашнем.
- Каждую правку размера меряйте тем же способом до и после. Правка, сокращающая текст на вид, регулярно увеличивает его на весах.
- Пишите минусы в отчёт цифрой. «Экономии нет, стало на 322 токена больше» — нормальная строка отчёта; её отсутствие в чужом отчёте — повод перечитать остальные строки.