Как я заменил JSON на TOON в LLM-промптах и сэкономил 40% токенов

Как я заменил JSON на TOON в LLM-промптах и сэкономил 40% токенов

Я — фронтенд-разработчик в Cloud.ru и каждый день работаю с LLM API. В промпты передаю структурированные данные: списки товаров, логи, пользователей, метрики. Раньше всё это было в JSON. Теперь — нет.

Я посчитал, сколько токенов уходит на синтаксис: фигурные скобки, кавычки, повторяющиеся ключи. Оказалось — слишком много. Потом попробовал TOON. Экономия составила 40–60%.

Проблема: JSON — щедрый формат

Представьте RAG-систему или ИИ-ассистента, которому нужно проанализировать 50 лог-записей. Каждая запись — объект с полями: "id", "timestamp", "level", "service", "ip", "message", "code".

В JSON каждый объект оборачивается в фигурные скобки, ключи и строки берутся в кавычки, между полями ставятся запятые. На 50 записей — 350 повторений одних и тех же ключей и сотни символов синтаксиса.

LLM токенизирует всё это. Вы платите за всё — даже за кавычки.

Решение: TOON за 30 секунд

TOON (Token-Oriented Object Notation) — формат, передающий те же данные, но без дублирования. Ключи объявляются один раз в заголовке, дальше идут только значения.

Пример:

logs[3]{id,timestamp,level,service,ip,message,code}: 1,2025-04-05T12:00:00Z,ERROR,auth,192.168.1.1,"Login failed",401, 2,2025-04-05T12:05:00Z,WARN,api,192.168.1.2,"Rate limit",429

Заголовок задаёт структуру: массив из трёх элементов с перечисленными полями. Дальше — данные через запятую. Нет кавычек вокруг ключей, нет фигурных скобок, нет повторений.

Для одиночных объектов используется синтаксис, похожий на YAML:

user{id: 123, name: "Alice", role: "admin"}

Преобразование JSON ↔ TOON — lossless. Это не другая модель данных, а более компактная запись той же структуры.

Считаем токены: реальный тест

Я взял датасет из 50 лог-записей (по 7 полей) и протестировал через токенизатор.

Результат:

  • JSON (форматированный): 1580 токенов
  • JSON (минифицированный): 1250 токенов
  • TOON: 500 токенов

Экономия — до 60% на одном промпте. Это не теория — это замер.

Считаем деньги: сколько вы переплачиваете

Цены на LLM API (апрель 2026):

  • GPT-4o: $5 за 1 млн input-токенов
  • Claude Opus 4.6: $5 за 1 млн input-токенов

Допустим, вы делаете 10 000 запросов в день, в каждом — 100 объектов. На GPT-4o:

  • JSON: ~2500 токенов на запрос → 25 млн токенов в день → $125/день
  • TOON: ~1000 токенов на запрос → 10 млн токенов в день → $50/день

Экономия — $75 в день. Это $27 000 в год только на одном эндпоинте.

На Claude Opus разница ещё ощутимее: экономия до $24 000 в год.

Интеграция: 5 минут, 4 строки кода

Не нужно менять архитектуру. TOON — прослойка перед отправкой в API.

Python + OpenAI:

import toon_format
prompt = toon_format.encode(data)
client.chat.completions.create(model="gpt-4o", messages=[{"role": "user", "content": prompt}])

TypeScript + Anthropic:

import { encode } from '@toon-format/toon';
const prompt = encode(data);
client.messages.create({ model: 'claude-3-opus', messages: [{ role: 'user', content: prompt }] });

Одна строка toon_format.encode() — и вы экономите 40–60% токенов. Ответ модели приходит в обычном формате. Ничего менять не нужно.

Сравнение: TOON vs другие форматы

Ни один формат не идеален. Вот объективное сравнение:

  • TOON vs CSV: CSV на 5–6% компактнее для плоских таблиц, но не поддерживает вложенность и типы. TOON точнее парсится LLM.
  • TOON vs YAML: TOON экономит 48% токенов на табличных данных. YAML лучше подходит для конфигов с глубокой вложенностью.
  • TOON vs JSON compact: даже минифицированный JSON проигрывает TOON на 35% для таблиц. Для вложенных структур разрыв меньше — ~15%.
  • TOON vs TRON: TRON совместим с JSON-парсерами. TOON компактнее, но требует отдельного парсера. Выбирайте TRON, если не хотите менять тулчейн.

Когда использовать TOON (и когда нет)

Используйте TOON, когда:

  • Передаёте массивы однородных объектов — пользователи, товары, логи, метрики. Экономия: 40–60%.
  • Работаете с RAG — в контекст попадают десятки документов с одинаковой структурой.
  • Делаете batch-обработку — тысячи запросов в день, каждый процент экономии = деньги.
  • Данные не влезают в контекстное окно — компактность критична.

Не используйте TOON, когда:

  • Структуры глубоко вложенные (4+ уровня). Точность LLM падает до 43%. Лучше использовать JSON.
  • Данные идут не в LLM, а в обычный сервис. TOON — только для промптов, не для API или баз данных.
  • Таблица плоская, без вложенности. CSV на 5–6% компактнее и не требует SDK.
  • Нужна валидация через JSON Schema. TOON использует другой синтаксис — валидаторы не подойдут.

Экосистема: что уже есть

Доступные реализации:

  • TypeScript: @toon-format/toon
  • Python: toon-format/python-toon
  • Go: toon-format/go-toon

В разработке:

  • Rust: toon-format/toon-rs
  • .NET: toon-format/toon-dotnet

Быстрый старт: npx @toon-format/cli

Спецификация открыта. ABNF-грамматика задокументирована. Тестовые фикстуры доступны в репозитории toon-format/spec.

Итог

TOON — не замена JSON. JSON останется стандартом для API, конфигов и хранения. Но если вы передаёте структурированные данные в LLM — вы платите за синтаксический мусор.

Четыре строки кода. Пять минут интеграции. Экономия 40–60% токенов. До $27 000 в год на средней нагрузке.

Попробуйте на одном эндпоинте. Замерьте. Посчитайте. Ваш бюджет на API скажет спасибо. Или хотя бы перестанет тихо всхлипывать по ночам.

Читать оригинал