Две цены одного текста
Любой текст рядом с агентом стоит по-разному в зависимости от того, когда он попадает в контекст. Описание навыка читается перед каждым запросом, включая те, где навык не понадобится, — его цена умножается на число запусков. Тело навыка, процедура на полторы тысячи токенов, приезжает только тогда, когда навык позвали.
Отсюда правило, которое мы вывели для себя: сокращать нужно не текст, а постоянную часть. Текст, унесённый за границу вызова, можно вообще не сокращать — он перестал стоить на каждом запуске.
| Часть | Когда грузится | Токенов |
|---|---|---|
| Описания навыков | всегда, на любой запрос | 769 → 904 (+135) |
| Тело первого навыка | только при вызове | 1 570 |
| Тело второго навыка | только при вызове | 1 425 |
| Размен | — | +135 постоянных против 2 995 вынесенных = 1:22 |
Почему единственная выросшая строка — правильная
Отчёт, в котором все строки идут вниз, обычно означает, что автор сокращал ради числа. Строка с плюсом на этом фоне читается как ошибка — а была решением: чтобы навык вызвали в нужный момент, его описание должно точно объяснять, когда он нужен. Урезанное описание экономит 135 токенов и ломает вызов, после чего процедура не грузится никогда.
Обратная сторона у размена тоже есть, и мы её не мерили: если описание неточное, навык не позовут там, где он нужен, и экономия обернётся неработающей процедурой. Держим это как риск, а не как замеренный факт.
Тот же приём этажом выше: контракт вместо материала
На уровне конвейера граница проходит между исполнителем и его задачей. Первый способ — отдать подзадаче весь материал: пусть видит всё, разберётся сама. Второй — отдать контракт: что она получает на входе, что обязана вернуть на выходе и по каким правилам, а сам материал подтянуть точечно.
Замер разницы на одной странице корпуса дал экономию примерно в 20 раз. Оговорка автора замера стоит рядом: соотношение 20× устойчиво, абсолютные значения гуляют в пределах ±15% — считать по ним бюджет можно, обещать точную сумму нельзя.
Экономия здесь вторична. Подзадача, получившая структуру вместо всего материала, отвечает на заданный вопрос, а не на соседний. Полный контекст тянет исполнителя в сторону: он видит десять интересных проблем и правит одиннадцатую. Контракт эту степень свободы убирает — и это ценнее, чем сэкономленные токены.
Как переносить через границу
- Разложите постоянную часть по строкам. Не общий объём стартового контекста, а список: что именно грузится на каждый запрос. Дальше по каждой строке один вопрос — нужна ли она на запросе «привет».
- Разделите каждый блок на указатель и тело. Указатель — когда это нужно и где лежит, десятки токенов. Тело — сама процедура, тысячи. Постоянно грузится только указатель.
- Тело за границей не сокращайте. Экономить на том, что грузится по вызову, — ложная работа; там подробность дешевле недосказанности.
- Указатель пишите под вызов, а не под краткость. Он существует ради одного: чтобы тело позвали в нужный момент. Плюс 135 токенов здесь окупаются двадцатикратно.
- Подзадачам отдавайте контракт. Вход, выход, правила приёмки — вместо «вот весь материал, разберись».
- Считайте размен, а не экономию. Правильная строка отчёта выглядит как «+135 постоянных против 2 995 вынесенных», а не как «стало меньше».