Проверка токенов перед задачей
Требуется Bee 1.0.0-beta.16 или новее. Для примеров нужна сборка с bee token estimate. Справку можно проверить командой bee token estimate --help.
Перед началом задачи выберите инструкции, запрос и фрагменты исходников, которые вам уже известны как необходимые. bee token estimate читает только явно выбранные файлы и перенаправленный stdin. Команда работает офлайн без инициализации, базы данных, вызова провайдера или скачивания данных кодировки во время запуска. Она не выполняет задачу, не обнаруживает её контекст и не предсказывает работу агента.
Порядок работы с задачей
Заголовок раздела «Порядок работы с задачей»- Выберите известный контекст, включая обязательные инструкции. Для ревью это могут быть запрос на проверку и нужные фрагменты исходников и тестов. Подготовьте альтернативные выборки явно.
- Оцените каждую выборку с одинаковой кодировкой и допущениями. Проверьте и число, и достаточность контекста для задачи.
- Выберите контекст и выполните задачу отдельно. Меньшее число само по себе не доказывает качество или экономию токенов: удаление нужных сведений может привести к дополнительной работе.
- После выполнения изучите явно выбранный поддерживаемый журнал сеанса существующей командой измеренного использования. Храните записанные наблюдения отдельно от предварительно выделенного бюджета.
Шесть небольших примеров
Заголовок раздела «Шесть небольших примеров»Следующая подготовка для Bash/zsh создаёт синтетический текст и пустой отдельный профиль Bee вне рабочего дерева. pwd -P определяет физический каталог; на macOS сам /tmp — символическая ссылка, поэтому нужен физический корень под /private/tmp.
demo_dir="$(mktemp -d "${TMPDIR:-/tmp}/bee-token-demo.XXXXXX")"demo_dir="$(cd "$demo_dir" && pwd -P)"mkdir "$demo_dir/profile"printf 'Hello world!\n' > "$demo_dir/prompt.txt"printf 'Review the tests.\n' > "$demo_dir/context.txt"chmod 444 "$demo_dir/prompt.txt" "$demo_dir/context.txt"1. Оцените один файл
Заголовок раздела «1. Оцените один файл»BEE_HOME="$demo_dir/profile" bee token estimate --root "$demo_dir" --file prompt.txt --jsonФайл содержит 13 байт UTF-8 и 13 единиц UTF-16, включая перевод строки. Эвристика по умолчанию utf16-ceil-div4@1 даёт input.estimatedTokensPerCall: 4. Она округляет utf16Units / 4 вверх для каждого входа, затем складывает результаты. Это оценка, а не подсчёт токенизатором и не верхняя граница. Поэтому два входа по одной единице дают два, хотя объединённый текст дал бы один.
2. Выберите перенаправленный stdin и кодировку
Заголовок раздела «2. Выберите перенаправленный stdin и кодировку»printf 'Hello world!' | BEE_HOME="$demo_dir/profile" bee token estimate --stdin --encoding o200k_base --jsonЗдесь нет завершающего перевода строки: 12 байт, 12 единиц UTF-16 и 3 токена при o200k_base. Stdin читается только с --stdin и должен быть перенаправлен. При выборе только stdin корневой каталог не открывается. Один --stdin можно сочетать с повторяющимися --file.
3. Выделите бюджет на повторные вызовы
Заголовок раздела «3. Выделите бюджет на повторные вызовы»BEE_HOME="$demo_dir/profile" bee token estimate --root "$demo_dir" \ --file prompt.txt --file context.txt --encoding cl100k_base \ --calls 3 --output-budget 2000 --jsonФайлы дают 3 и 4 токена: 7 на вызов. --calls 3 означает три независимых вызова с одним и тем же выбранным входом каждый раз. Это не симуляция роста беседы, повторных попыток, инструментов или сжатия. --output-budget 2000 — выделенный вами бюджет на вызов, включая запланированную долю рассуждения; он не прогнозирует вывод и не ограничивает генерацию.
| Поле сценария | Значение |
|---|---|
inputEstimatedTokens |
21 = 3 × 7 |
outputAllocatedTokens |
6000 = 3 × 2000 |
totalAllocatedTokens |
6021 = 3 × (7 + 2000) |
4. Скройте строки, сохранив итог
Заголовок раздела «4. Скройте строки, сохранив итог»BEE_HOME="$demo_dir/profile" bee token estimate --root "$demo_dir" \ --file prompt.txt --file context.txt --encoding cl100k_base \ --calls 3 --output-budget 2000 --limit 0 --jsoncontributors пуст, но итоги входа и сценария выше не меняются. projection содержит returned: 0, omitted: 2, omittedEstimatedTokens: 7. --limit ограничивает видимые строки вкладов, а не выбор входов или подсчёт. Используйте запись с пробелом --limit 0; --limit=0 не принимается.
5. Сравните другую выборку контекста
Заголовок раздела «5. Сравните другую выборку контекста»BEE_HOME="$demo_dir/profile" bee token estimate --root "$demo_dir" \ --file prompt.txt --encoding cl100k_base \ --calls 3 --output-budget 2000 --jsonПри той же кодировке, числе вызовов и бюджете вывода выбор только prompt.txt даёт 3 токена на вызов, 9 входных токенов сценария и общий бюджет 6009. Сравнение измеряет изменённую выборку: из неё исключена инструкция проверить тесты. Решите, допустим ли такой пропуск для реальной задачи. Меньшее число не доказывает равноценность работы или достигнутую экономию.
6. Отличайте явный ноль от неизвестного
Заголовок раздела «6. Отличайте явный ноль от неизвестного»printf '' | BEE_HOME="$demo_dir/profile" bee token estimate --stdin --output-budget 0 --jsonПустой текст допустим: число входных токенов равно нулю, а явно нулевой бюджет вывода даёт общий бюджет ноль. В примерах 1 и 2 --output-budget отсутствует, поэтому outputBudgetPerCall, outputAllocatedTokens и totalAllocatedTokens остаются null. Неизвестное — не ноль. Даже явный нулевой бюджет не устанавливает реальный расход будущей задачи.
Выберите метод подсчёта
Заголовок раздела «Выберите метод подсчёта»--encoding принимает heuristic (по умолчанию), o200k_base и cl100k_base. Явные кодировки используют поставляемые в пакете Microsoft.ML.Tokenizers и соответствующие данные кодировки версии 2.0.0. Они точно считают обычный текст в рамках выбранной реализации. Строки, похожие на специальные маркеры, например <|endoftext|>, остаются буквальным текстом. Если данных кодировки нет, возвращается encoding_unavailable; скрытого перехода к эвристике нет.
Нет сопоставления с моделью по умолчанию или утверждения о совместимости с провайдером. Точный подсчёт выбранного текста не охватывает полный запрос: структура сообщений, скрытое обрамление и невыбранные определения системы/инструментов находятся вне области подсчёта. Каждый вход считается отдельно, затем числа складываются. Чтобы измерить собранный текст с разделителями, передайте его целиком одним файлом или входом stdin.
Прочитайте отчёт
Заголовок раздела «Прочитайте отчёт»Каждый результат — один компактный JSON-документ с завершающим переводом строки, даже без --json. Успешная оценка содержит schemaVersion: 1, status: complete, scope: selected_text_only. estimator указывает метод и версии; input содержит точные размеры в байтах/единицах и число токенов на вызов.
Порядковые номера вкладов следуют исходному порядку опций file/stdin, начиная с 1. Строки сортируются по убыванию токенов, затем единиц UTF-16, затем по порядковому номеру. projection учитывает скрытые строки. По умолчанию --limit равен 20, диапазон — 0–64. Для --calls значение по умолчанию — 1, диапазон — 1–1000000; необязательный --output-budget допускает 0–1000000000. Числа записываются десятичными цифрами ASCII без знака.
Список unknown сохраняет неизвестными реальный будущий вывод и рассуждение, будущие результаты инструментов и ходы, рост беседы и сжатие, невыбранные систему/инструменты/обрамление, поведение кэша и использование/начисления провайдера. money остаётся null: цены не рассчитываются. Из этих чисел нельзя вывести объём кэшированных токенов или фактический расход провайдера.
Вход, приватность и границы отказа
Заголовок раздела «Вход, приватность и границы отказа»Файлы выбираются относительными путями с / внутри физического абсолютного --root; если корень не задан, используется текущий каталог. Сканирования каталога нет. Выход за корень, ссылки в корневом или файловом пути, жёсткие ссылки, повторный выбор одного физического файла и нерегулярные файлы, например FIFO, отклоняются. Выберите обычную копию внутри разрешённого физического корня; не обходите границу символической ссылкой. Распространённые имена чувствительных файлов отклоняются, но это не универсальный детектор секретов.
Вход должен быть обычным текстом в строго корректном UTF-8. UTF-8 BOM считается как U+FEFF; CRLF и завершающие переводы строк сохраняются. Нет обрезки, нормализации или декодирования с заменой повреждённых байтов. Некорректный UTF-8, BOM UTF-16/32 и текст с NUL отклоняются. Отчёт не выводит содержимое, имена файлов, пути или хеши приватного входа; команда не сохраняет выборку. Повторные проверки файлов выполняются по возможности: snapshot: checked_unchanged_not_atomic не гарантирует атомарный снимок.
| Ограничение | Поведение |
|---|---|
| 64 выбранных входа, включая stdin | Только явный выбор |
| 256 КиБ (262144 байта) на вход; всего 1 МиБ (1048576 байт) | Превышение отклоняется, а не обрезается |
| 32 КиБ (32768 байт) JSON с завершающим переводом строки | Слишком большой вывод даёт output_limit, а не обрезанный JSON |
| Работа точной кодировки | По всем входам сумма квадратов длин естественных предтокенных фрагментов в байтах UTF-8 должна быть ≤67108864; один фрагмент — максимум 8192 байта |
Длинный непрерывный текст может превысить лимит работы точного режима, оставаясь в пределах исходного объёма байтов. Тогда вся оценка завершается с tokenization_limit и итогами null; разбиения, обрезки или перехода к другому методу нет. Для кодировок также действует тайм-аут 250 мс на операцию regex (encoding_timeout). 10-секундный срок принятия использует кооперативную отмену; блокирующие синхронные операции файловой системы или вывода не позволяют гарантировать завершение ровно за десять секунд.
| Выход | Значение и следующий шаг |
|---|---|
0 |
Полная оценка или справка; всё равно проверьте область, неизвестные значения и пропуски |
4 |
Неверные аргументы (invalid_usage); проверьте написание, диапазоны, выбор и повторяющиеся флаги |
5 |
Отклонённый вход, ошибка выполнения или вывода; изучите errorCode и необязательный errorInputOrdinal |
Например, stdin_not_redirected требует конвейера или перенаправления, missing — существующего выбранного файла, invalid_unicode/invalid_text — корректного простого UTF-8, а file_byte_limit/total_byte_limit — меньшей явной выборки. Отказ по пути/ссылке означает несоответствие границе физических файлов. Ошибка входа/выполнения имеет status: incomplete, ошибка аргументов — status: invalid. В обоих случаях estimator, input, projection, scenario равны null, а список вкладов пуст. Частичный итог входа не публикуется. Ошибка записи вывода может оставить неполный префикс в потоке; код 5 не является пригодным успешным JSON-результатом.
Выполните задачу, затем изучите записанный расход
Заголовок раздела «Выполните задачу, затем изучите записанный расход»Когда задача действительно выполнена, используйте поддерживаемый локальный журнал и его точный native thread UUID с существующей командой:
bee budget --measured --harness codex \ --session 11111111-1111-4111-8111-111111111111 \ --log /absolute/physical/path/to/rollout.jsonl --jsonЗамените пример UUID и пути точными значениями нужного потока и журнала. Все три селектора обязательны; Bee не ищет последний сеанс автоматически. Руководство по размеру контекста содержит синтетический пример журнала и объясняет записанные счётчики, оценочные базы истории и неполные данные. Разделяйте потоки response и history; не складывайте их и не выводите начисления, полноту записи, экономию кэша или причинность из сравнения предварительных оценок.
Для проверки контекста и кандидатов в дубликаты перейдите к размеру контекста; для синтаксиса — к справочнику команд.