
Привет! Меня зовут Андрей, я фронтенд-разработчик в Cloud.ru. Я работаю с LLM API каждый день. И каждый день отправляю в контекст структурированные данные: списки товаров, логи, пользователей, метрики. Все это — JSON. И все это — деньги.
В какой-то момент я посчитал, сколько токенов из моего промпта уходит на фигурные скобки, кавычки и повторяющиеся ключи. Оказалось — много. Слишком много.
Потом я попробовал TOON. Вот что из этого вышло.
Проблема: JSON — щедрый формат
Возьмем типичный кейс. Вы строите RAG-систему или ИИ-ассистента, который анализирует данные. В промпт подтягивается список из 50 записей. Вот как выглядит одна запись в JSON:
```json {"id": 2001, "timestamp": "2025-11-18T08:14:23Z", "level": "error", "service": "auth-api", "ip": "172.16.4.21", "message": "Auth failed for user", "code": "AUTH_401"} ```
Теперь умножьте на 50. Каждая запись повторяет 7 ключей: "id", "timestamp", "level", "service", "ip", "message", "code". Плюс кавычки вокруг каждого ключа и строкового значения. Плюс фигурные скобки. Плюс запятые. На 50 записях это ~350 лишних повторений ключей и сотни символов синтаксического мусора. Модели все это токенизируют. Вы за все это платите.
Решение: TOON за 30 секунд
TOON (Token-Oriented Object Notation) — формат, который кодирует те же данные с той же структурой, но без повторений. Ключи объявляются один раз в заголовке, дальше — только значения:
``` logs[3]{id,timestamp,level,service,ip,message,code}: 2001,2025-11-18T08:14:23Z,error,auth-api,172.16.4.21,Auth failed for user,AUTH_401 2002,2025-11-18T08:14:24Z,warn,payment,172.16.4.22,Timeout on payment gateway,PAY_TIMEOUT 2003,2025-11-18T08:14:25Z,info,user-svc,172.16.4.23,User profile updated,USR_200 ```
Заголовок logs[3]{id,timestamp,level,service,ip,message,code}: говорит: массив из трех элементов, поля — такие-то. Все. Дальше строки с данными через запятую. Никаких кавычек вокруг ключей, никаких {} на каждый объект, никакого дублирования.
Для обычных объектов — синтаксис как в YAML:
``` name: Alice age: 30 role: admin settings: theme: dark lang: ru ```
Конвертация JSON -> TOON -> JSON — без потерь, 1:1. Это не другая модель данных, это другая запись той же модели.
Считаем токены: реальный тест
Я взял датасет из 50 лог-записей (7 полей каждая) и прогнал через токенизатор. Вот код:
Python:
```python import json import toon_format # pip install toon-format import tiktoken enc = tiktoken.encoding_for_model("gpt-4o") with open("logs.json") as f: data = json.load(f) json_str = json.dumps(data, indent=2) json_compact = json.dumps(data) toon_str = toon_format.encode(data) print(f"JSON (formatted): {len(enc.encode(json_str))} токенов") print(f"JSON (compact): {len(enc.encode(json_compact))} токенов") print(f"TOON: {len(enc.encode(toon_str))} токенов") ```
TypeScript:
```typescript import { encode as toToon } from "@toon-format/toon"; import { encode as tokenize } from "gpt-3-encoder"; import fs from "fs"; const data = JSON.parse(fs.readFileSync("./logs.json", "utf8")); const jsonFormatted = JSON.stringify(data, null, 2); const jsonCompact = JSON.stringify(data); const toonStr = toToon(data); console.log(JSON (formatted): ${tokenize(jsonFormatted).length} токенов); console.log(JSON (compact): ${tokenize(jsonCompact).length} токенов); console.log(TOON: ${tokenize(toonStr).length} токенов); ```
Результат на реальных данных (из бенчмарков TOON):
Формат | Токены | Экономия vs JSON |
JSON (formatted) | 379 | — |
JSON (compact) | 236 | -37.7% |
TOON | 150 | -60.4% |
60% экономии. На одном промпте. Не гипотетически — замерено токенизатором.
Считаем деньги: сколько вы переплачиваете
Теперь самое интересное. Актуальные цены API (апрель 2026):
Модель | Input (за 1 млн токенов) | Output (за 1 млн токенов) |
GPT-4o | $2.50 | $10.00 |
GPT-4.1 | $2.00 | $8.00 |
Claude Sonnet 4.6 | $3.00 | $15.00 |
Claude Opus 4.6 | $5.00 | $25.00 |
Допустим, вы делаете 10 000 запросов в день, в каждом — массив из 100 объектов (типичный RAG/аналитика). Считаем для GPT-4o:
JSON | TOON | Разница | |
Токенов на запрос | ~3,200 | ~1,850 | -42% |
Токенов в день | 32 млн | 18.5 млн | -13.5 млн |
Стоимость в день | $80 | $46.25 | -$33.75 |
В месяц | $2,400 | $1,387 | -$1,013 |
В год | $28,800 | $16,650 | -$12,150 |
На Claude Opus 4.6 (input $5/1 млн) экономия еще ощутимее:
JSON | TOON | Разница | |
В месяц | $4,800 | $2,775 | -$2,025 |
В год | $57,600 | $33,300 | -$24,300 |
$12 000-24 000 в год — только на input-токенах, только на одном эндпоинте. Если у вас несколько пайплайнов — умножайте.
Интеграция: 5 минут, 4 строки кода
Вам не нужно переписывать архитектуру. TOON подключается как прослойка перед отправкой в API:
Python + OpenAI:
```python import openai import json import toon_format def analyze_with_llm(data: list[dict]) -> str: toon_str = toon_format.encode({"records": data}) # JSON -> TOON response = openai.chat.completions.create( model="gpt-4o", messages=[{ "role": "user", "content": f"Проанализируй эти данные и найди аномалии:\n\n{toon_str}" }] ) return response.choices[0].message.content ```
TypeScript + Anthropic:
```typescript import Anthropic from "@anthropic-ai/sdk"; import { encode as toToon } from "@toon-format/toon"; async function analyzeData(records: any[]) { const toonData = toToon({ records }); const response = await anthropic.messages.create({ model: "claude-sonnet-4-6-20250514", max_tokens: 1024, messages: [{ role: "user", content: Проанализируй эти данные и найди аномалии:\n\n${toonData} }] }); return response.content[0].text; } ```
Одна строка toon_format.encode() — и вы экономите 40-60% токенов. Модель отвечает в обычном формате, ничего на выходе менять не нужно.
Большое сравнение: TOON vs все остальные
Ни один формат не идеален для всех случаев. Вот честная таблица:
Критерий | JSON | JSON compact | YAML | CSV | TOON | TRON |
Токены (табличные данные) | 100% | ~63% | ~72% | ~38% | ~40% | ~55% |
Токены (вложенные данные) | 100% | ~78% | ~85% | н/п | ~67% | ~75% |
Точность LLM | 75.0% | 73.7% | 74.5% | ~72% | 76.4% | — |
Вложенные структуры | отлично | отлично | хорошо | нет | средне | хорошо |
Совместимость с пайплайнами | везде | везде | широко | широко | нужен SDK | JSON-совместим |
Знакомство LLM (training data) | огромное | огромное | большое | большое | минимальное | минимальное |
Lossless round-trip с JSON | да | да | с нюансами | нет | да | да |
Ключевые выводы
TOON vs CSV: CSV компактнее на ~5-6% для плоских таблиц, но не поддерживает вложенность и типы. TOON добавляет минимальный overhead, но модель точнее парсит данные.
TOON vs YAML: TOON экономит 48% токенов на табличных данных. YAML лучше на конфигах с глубокой вложенностью.
TOON vs JSON compact: даже минифицированный JSON проигрывает TOON 35% на таблицах. На вложенных — разрыв меньше (~15%).
TOON vs TRON: TRON — JSON-совместимый (можно парсить обычным JSON-парсером). TOON компактнее, но требует отдельный парсер. Выбирайте TRON, если не хотите менять тулчейн.
Когда TOON — правильный выбор (и когда нет)
Используйте TOON, когда:
Массивы однородных объектов — списки пользователей, товаров, логов, метрик. Экономия 40-60%.
RAG-пайплайны — в контекст подтягиваются десятки документов с одинаковой структурой.
Batch-обработка — тысячи запросов в день, каждый процент экономии = реальные деньги.
Длинные контексты — когда данные не влезают в контекстное окно, а уменьшить их объем — критично.
НЕ используйте TOON, когда:
Глубоко вложенные структуры (4+ уровней). Точность LLM падает до 43% на nested-данных. JSON надежнее.
Данные идут не в LLM, а в обычный сервис. TOON — формат для промптов, не для REST API и баз данных.
Плоская таблица без вложенности. CSV на 5-6% компактнее и не требует SDK.
Нужна JSON Schema валидация. TOON — другой синтаксис, существующие валидаторы не подойдут.
Экосистема: что уже работает
Язык | Пакет | Статус |
TypeScript |
| Основная реализация |
Python |
| Стабильно |
Go |
| В разработке |
Rust |
| В разработке |
.NET |
| В разработке |
CLI |
| Работает |
Быстрый старт:
```bash # TypeScript npm install @toon-format/toon # Python pip install toon-format # Конвертация файла через CLI npx @toon-format/cli data.json -o data.toon npx @toon-format/cli data.toon -o data.json # и обратно ```
Спецификация открыта, ABNF-грамматика задокументирована, тестовые фикстуры доступны: toon-format/spec.
Итог
TOON — не замена JSON. JSON останется стандартом для API, конфигов и хранения. Но если вы передаете структурированные данные в LLM — вы буквально выбрасываете деньги на синтаксический мусор.
Четыре строки кода. Пять минут интеграции. Минус 40-60% токенов. Минус $12 000-24 000 в год на средней нагрузке. Попробуйте на одном эндпоинте. Замерьте. Посчитайте. Ваш бюджет на API скажет спасибо. Или хотя бы перестанет тихо всхлипывать по ночам.
Если было полезно — я пишу о фронтенде, ИИ и подобных практических штуках в блоге и Telegram-канале. Заходите, буду рад.
Ссылки:
