- BrainTools - https://www.braintools.ru -

Привет! Меня зовут Андрей, я фронтенд-разработчик в Cloud.ru [1]. Я работаю с LLM API каждый день. И каждый день отправляю в контекст структурированные данные: списки товаров, логи, пользователей, метрики. Все это — JSON. И все это — деньги.
В какой-то момент я посчитал, сколько токенов из моего промпта уходит на фигурные скобки, кавычки и повторяющиеся ключи. Оказалось — много. Слишком много.
Потом я попробовал TOON. Вот что из этого вышло.
Возьмем типичный кейс. Вы строите 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 (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-токенах, только на одном эндпоинте. Если у вас несколько пайплайнов — умножайте.
Вам не нужно переписывать архитектуру. 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"Проанализируй эти данные и найди аномалии:nn{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: Проанализируй эти данные и найди аномалии:nn${toonData}
}]
});
return response.content[0].text;
}
```
Одна строка toon_format.encode() — и вы экономите 40-60% токенов. Модель отвечает в обычном формате, ничего на выходе менять не нужно.
Ни один формат не идеален для всех случаев. Вот честная таблица:
|
Критерий |
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, если не хотите менять тулчейн.
Массивы однородных объектов — списки пользователей, товаров, логов, метрик. Экономия 40-60%.
RAG-пайплайны — в контекст подтягиваются десятки документов с одинаковой структурой.
Batch-обработка — тысячи запросов в день, каждый процент экономии = реальные деньги.
Длинные контексты — когда данные не влезают в контекстное окно, а уменьшить их объем — критично.
Глубоко вложенные структуры (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 [2].
TOON — не замена JSON. JSON останется стандартом для API, конфигов и хранения. Но если вы передаете структурированные данные в LLM — вы буквально выбрасываете деньги на синтаксический мусор.
Четыре строки кода. Пять минут интеграции. Минус 40-60% токенов. Минус $12 000-24 000 в год на средней нагрузке. Попробуйте на одном эндпоинте. Замерьте. Посчитайте. Ваш бюджет на API скажет спасибо. Или хотя бы перестанет тихо всхлипывать по ночам.
Если было полезно — я пишу о фронтенде, ИИ и подобных практических штуках в блоге [3] и Telegram-канале [4]. Заходите, буду рад.
Ссылки:
cпецификация TOON [2];
бенчмарки [5];
TypeScript SDK [6];
Python SDK [7];
официальный сайт [8];
Автор: whoisfedos
Источник [10]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/28492
URLs in this post:
[1] Cloud.ru: https://cloud.ru/?utm_source=habr&utm_medium=article&utm_campaign=json_vs_toon_08042026
[2] toon-format/spec: https://github.com/toon-format/spec
[3] в блоге: https://fedosdotcom.tech/
[4] Telegram-канале: https://t.me/fedosdotcom
[5] бенчмарки: https://toonformat.dev/guide/benchmarks
[6] TypeScript SDK: https://github.com/toon-format/toon
[7] Python SDK: https://github.com/xaviviro/python-toon
[8] официальный сайт: https://toonformat.dev/
[9] TOON vs TRON сравнение: https://www.piotr-sikora.com/blog/2025-12-05-toon-tron-csv-yaml-json-format-comparison
[10] Источник: https://habr.com/ru/companies/cloud_ru/articles/1020430/?utm_campaign=1020430&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.