1.2Kпросмотров
4 ноября 2025 г.
question📷 ФотоScore: 1.4K
Token-Oriented Object Notation: экономия на спичках, или все-таки нет? На днях в одном из чатов про LLM увидел новый формат представления данных для промпта. Суть в следующем: давайте выкинем из JSON все ненужные отступы, кавычки и скобки, оставив только самую важную информацию. Меньше токенов потратим, и быстрее ответ пользователю дадим. В теории - идея крутая, надо брать. Но так ли хорошо это будет работать на деле - не вполне понятно, все-таки LLM на этом формате не учились, и могут быть проблемы с интерпретацией данных. А если не понятно - надо тестировать на каких-то данных, про что собственно и расскажу, так что велкам читать. В качестве подопытной LLM взял minimax/minimax-m2, благо на опенроутере она сейчас бесплатная. Нагенерировал с ChatGPT синтетический датасет, в котором есть длинный промпт с описанием предметной области, и набор вопросов, на которые нужно ответить. Не столь важно, насколько адекватным примеры внутри этого датасета, главное - чтобы исходный датасет имел одни и те же данные как в формате JSON-нотации, так и в виде TOON-нотации. Составлено 15 заданий, "правильным" ответом для каждого из них является JSON с ответом, который должен в точности повторять указанный в задании. Генерировать в ответе TOON формат напрямую было бы слишком неразумно, т к модель его явно на обучении не видела в тех же количествах, и пришлось бы ей долго объяснять, что это такое и как оно составляется, что помешало бы чистоте эксперимента. В итоге, на каждый из 15 вопросов, ждем корректно отформатированный JSON, если видим хотя бы 1 ошибку - ответ не проходит. Для формата JSON, конвертация выполнялась с настройками json.dumps(dataset, ensure_ascii=False, separators=(",", ":"), sort_keys=False, indent="\t") В результате, получили следующие метрики качества: Запуск 1: JSON 10/15 (66.7%), TOON 9/15 (60.0%) - JSON пока побеждает
Запуск 2: JSON 13/15 (86.7%), TOON 15/15 (100.0%) - тут TOON вырвался вперед
Запуск 3: JSON : 12/15 (80.0%), TOON : 12/15 (80.0%) - score одинаковый (но спойлер - оба ошиблись в разных вопросах) Похоже, LLM достаточно неплохо понимает такой странный формат, и часто делает из него правильные выводы. При этом, на таком синтетическом датасете токенов не то чтобы получилось сэкономить. Чтобы датасет хорошо лег на TOON-формат, данные в нем должны быть достаточно однородными. В моем примере это было не так - поэтому промпт в формате TOON оказался 980 токенов длиной, что конечно короче чем 1534 у промпта с данными в формате JSON, но все равно многовато. Конечно, эксперимент дико грязный, и для получения нормальных результатов нужно было бы:
- внимательно вычитать датасет на предмет корректности заданий;
- докинуть вопросов, на которые в системном промпте нет ответа, и указание что в таком случае делать;
- не использовать openrouter, т к не совсем понятно, какой провайдер у free моделей под капотом, и на каком железе они запущены;
- выбрать побольше моделей, с разной архитектурой и разного размера. Но при всем при этом, на формат однозначно стоит взглянуть более пристально, особенно если вы экономите входные токены. Ссылки для дальнейшего изучения:
- репозиторий автора, который предложил формат, там есть подробное описание + бенчмарки
- библиотека для конвертации python object -> TOON и обратно
- код для воспроизведения результатов @korneychukov