Введение
Разные форматы данных существуют потому, что решают разные задачи. JSON строгий и ориентирован на машины. YAML удобен для чтения. CSV минималистичен. TOON чрезвычайно компактен и специально спроектирован, чтобы снижать токенную нагрузку на LLM. TRON расширяет JSON определениями классов для обратно совместимого сжатия.
Зачем существуют эти форматы
TOON (Token-Oriented Object Notation) дает более компактный и токенно-эффективный способ передавать структурированные данные в большие языковые модели (LLM). Убирая лишние фигурные скобки, кавычки, квадратные скобки и запятые, TOON:
-
Снижает число токенов на 70-75%
-
Существенно уменьшает расходы на API
-
Сокращает задержку
-
Позволяет помещать более крупные наборы данных в лимиты контекста
-
Работает как слой преобразования, оптимизированный именно для входных данных ИИ
TRON (Token Reduced Object Notation) идет другим путем: расширяет JSON синтаксисом создания экземпляров классов:
-
Снижает число токенов на 20-40%
-
Сохраняет совместимость с JSON: любой JSON является валидным TRON
-
Убирает повторяющиеся имена полей в однородных массивах
-
Позволяет постепенно мигрировать с существующих JSON-процессов
-
Поддерживает вложенные определения классов для сложных структур
Что рассматривается в статье
В этом подробном сравнении разобраны 14 тестовых сценариев в нескольких категориях:
Базовые тесты:
-
Плоские структуры
-
Простые вложенные структуры
-
Расширенные вложенные структуры
Реальные сценарии:
-
Ответы API со смешанными типами данных
-
Конфигурационные файлы
-
Логи
-
Временные ряды
Пограничные случаи:
-
Специальные символы и экранирование
-
Обработка Unicode и эмодзи
-
Представление null и пустых значений
Структуры с большим количеством массивов:
-
Большие массивы примитивов
-
Матрицы и сетки: двумерные массивы
Сценарии, специфичные для LLM:
-
Фрагменты документов для RAG с метаданными
-
Схемы function calling
-
Few-shot-примеры для промптинга
Краткая сводка результатов
Рейтинг токенной эффективности: среднее по 14 тестам
|
Формат |
Эффективность относительно лучшего |
Сценарий |
|---|---|---|
|
CSV |
100% |
Только плоские данные |
|
TOON (табличный) |
92% |
Структурированные массивы |
|
TOON (объектный) |
85% |
Полная вложенность |
|
TRON |
75% |
JSON-совместимое сжатие |
|
YAML |
65% |
Человекочитаемость |
|
JSON |
45% |
Универсальная совместимость |
Влияние на стоимость: 10 тыс. записей, цены GPT-4
|
Формат |
Стоимость/вызов |
Годовая стоимость* |
Экономия относительно JSON |
|---|---|---|---|
|
JSON |
$5.60 |
$5.6M |
база |
|
YAML |
$3.33 |
$3.3M |
41% |
|
TRON |
$2.24 |
$2.24M |
60% |
|
TOON |
$1.38 |
$1.38M |
75% |
|
CSV |
$1.14 |
$1.14M |
80% |
*При 1 млн вызовов API в год
Влияние на окно контекста
При лимите 128 тыс. токенов (GPT-4):
-
JSON: ~17 тыс. записей
-
YAML: ~29 тыс. записей
-
TRON: ~45 тыс. записей: улучшение в 2,6 раза
-
TOON: ~70 тыс. записей: улучшение в 4 раза
-
CSV: ~85 тыс. записей
Тест 1: плоская структура — 10 пользователей
JSON — 746 символов
{
"users": [
{ "id": 1, "name": "User1", "active": true },
{ "id": 2, "name": "User2", "active": false },
{ "id": 3, "name": "User3", "active": true },
{ "id": 4, "name": "User4", "active": false },
{ "id": 5, "name": "User5", "active": true },
{ "id": 6, "name": "User6", "active": false },
{ "id": 7, "name": "User7", "active": true },
{ "id": 8, "name": "User8", "active": false },
{ "id": 9, "name": "User9", "active": true },
{ "id": 10, "name": "User10", "active": false }
]
}
YAML — 444 символа
users:
- id: 1
name: User1
active: true
- id: 2
name: User2
active: false
- id: 3
name: User3
active: true
- id: 4
name: User4
active: false
- id: 5
name: User5
active: true
- id: 6
name: User6
active: false
- id: 7
name: User7
active: true
- id: 8
name: User8
active: false
- id: 9
name: User9
active: true
- id: 10
name: User10
active: false
TRON — 223 символа
class A: id,name,active
{"users":[A(1,"User1",true),A(2,"User2",false),A(3,"User3",true),A(4,"User4",false),A(5,"User5",true),A(6,"User6",false),A(7,"User7",true),A(8,"User8",false),A(9,"User9",true),A(10,"User10",false)]}
CSV — 152 символа
id,name,active
1,User1,true
2,User2,false
3,User3,true
4,User4,false
5,User5,true
6,User6,false
7,User7,true
8,User8,false
9,User9,true
10,User10,false
TOON (табличный стиль) — 184 символа
users[10]{id,name,active}:
1,User1,true
2,User2,false
3,User3,true
4,User4,false
5,User5,true
6,User6,false
7,User7,true
8,User8,false
9,User9,true
10,User10,false
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
CSV |
152 |
100% |
80% |
|
TOON |
184 |
82.6% |
75% |
|
TRON |
223 |
68.2% |
70% |
|
YAML |
444 |
34.2% |
40% |
|
JSON |
746 |
20.4% |
— |
Победитель: CSV, но он ограничен плоскими данными
Тест 2: ответ API со смешанными типами данных
Реалистичный ответ API с числами, булевыми значениями, null, строками, датами и вложенными объектами.
JSON — 461 символ
{
"status": "success",
"timestamp": "2024-01-15T14:30:00Z",
"data": {
"userId": 12345,
"username": "john_doe",
"email": "john@example.com",
"premium": true,
"subscription": null,
"balance": 1234.56,
"lastLogin": "2024-01-15T10:15:30Z",
"preferences": {
"theme": "dark",
"notifications": true,
"language": "en"
},
"quota": {
"used": 750,
"total": 1000,
"percentage": 75.0
}
},
"errors": []
}
YAML — 341 символ
status: success
timestamp: 2024-01-15T14:30:00Z
data:
userId: 12345
username: john_doe
email: john@example.com
premium: true
subscription: null
balance: 1234.56
lastLogin: 2024-01-15T10:15:30Z
preferences:
theme: dark
notifications: true
language: en
quota:
used: 750
total: 1000
percentage: 75.0
errors: []
TRON — 346 символов
{"status":"success","timestamp":"2024-01-15T14:30:00Z","data":{"userId":12345,"username":"john_doe","email":"john@example.com","premium":true,"subscription":null,"balance":1234.56,"lastLogin":"2024-01-15T10:15:30Z","preferences":{"theme":"dark","notifications":true,"language":"en"},"quota":{"used":750,"total":1000,"percentage":75}},"errors":[]}
TOON — 341 символ
response:
status: success
timestamp: 2024-01-15T14:30:00Z
data:
userId: 12345
username: john_doe
email: john@example.com
premium: true
subscription: null
balance: 1234.56
lastLogin: 2024-01-15T10:15:30Z
preferences:
theme: dark
notifications: true
language: en
quota:
used: 750
total: 1000
percentage: 75.0
errors: []
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
TOON |
341 |
100% |
26% |
|
YAML |
341 |
100% |
26% |
|
TRON |
346 |
98.6% |
25% |
|
JSON |
461 |
74.0% |
— |
Победитель: ничья TOON/YAML. TRON почти догоняет их за счет компактного JSON-вывода
Тест 3: специальные символы и Unicode
Проверяем эмодзи, кириллицу, арабские и китайские символы, а также требования к экранированию.
JSON — 270 символов
{
"items": [
{
"text": "Hello "World"",
"path": "C:\Users\Documents",
"emoji": "🎉🚀✨",
"quote": "She said: "It's fine""
},
{
"text": "Line 1nLine 2nLine 3",
"special": "Tab:there",
"unicode": "Привет 世界 مرحبا",
"empty": ""
}
]
}
YAML — 240 символов
items:
- text: 'Hello "World"'
path: 'C:UsersDocuments'
emoji: 🎉🚀✨
quote: "She said: "It's fine""
- text: |
Line 1
Line 2
Line 3
special: "Tab:there"
unicode: Привет 世界 مرحبا
empty: ''
TRON — 214 символов
{"items":[{"text":"Hello "World"","path":"C:\Users\Documents","emoji":"🎉🚀✨","quote":"She said: "It's fine""},{"text":"Line 1nLine 2nLine 3","special":"Tab:there","unicode":"Привет 世界 مرحبا","empty":""}]}
TOON — 219 символов
items[2]:
text: Hello "World"
path: C:UsersDocuments
emoji: 🎉🚀✨
quote: She said: "It's fine"
---
text: Line 1nLine 2nLine 3
special: Tab:there
unicode: Привет 世界 مرحبا
empty: ~
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
TRON |
214 |
100% |
21% |
|
TOON |
219 |
97.7% |
19% |
|
YAML |
240 |
89.2% |
11% |
|
JSON |
270 |
79.3% |
— |
Победитель: TRON. Компактный JSON без пробелов обходит всех
Тест 4: большие массивы примитивов
Проверяем массив из 20 чисел, булевы флаги и строковые теги.
JSON — 244 символа
{
"numbers": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
"flags": [true, false, true, true, false, false, true, false, true, true],
"tags": ["urgent", "review", "bug", "feature", "enhancement", "documentation"]
}
YAML — 207 символов
numbers: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
flags: [true, false, true, true, false, false, true, false, true, true]
tags: [urgent, review, bug, feature, enhancement, documentation]
TRON — 201 символ
{"numbers":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"flags":[true,false,true,true,false,false,true,false,true,true],"tags":["urgent","review","bug","feature","enhancement","documentation"]}
TOON — 181 символ
numbers[20]: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
flags[10]: true,false,true,true,false,false,true,false,true,true
tags[6]: urgent,review,bug,feature,enhancement,documentation
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
TOON |
181 |
100% |
26% |
|
TRON |
201 |
90.0% |
18% |
|
YAML |
207 |
87.4% |
15% |
|
JSON |
244 |
74.2% |
— |
Победитель: TOON. Специализированный inline-синтаксис массивов выигрывает у JSON-совместимости
Тест 5: временные ряды
Типичный паттерн для мониторинга, аналитики и IoT-приложений.
JSON — 358 символов
{
"metrics": [
{"timestamp": "2024-01-15T00:00:00Z", "value": 42.5, "status": "ok"},
{"timestamp": "2024-01-15T01:00:00Z", "value": 43.1, "status": "ok"},
{"timestamp": "2024-01-15T02:00:00Z", "value": 41.8, "status": "ok"},
{"timestamp": "2024-01-15T03:00:00Z", "value": 44.2, "status": "warning"},
{"timestamp": "2024-01-15T04:00:00Z", "value": 45.0, "status": "warning"}
]
}
YAML — 311 символов
metrics:
- timestamp: 2024-01-15T00:00:00Z
value: 42.5
status: ok
- timestamp: 2024-01-15T01:00:00Z
value: 43.1
status: ok
- timestamp: 2024-01-15T02:00:00Z
value: 41.8
status: ok
- timestamp: 2024-01-15T03:00:00Z
value: 44.2
status: warning
- timestamp: 2024-01-15T04:00:00Z
value: 45.0
status: warning
TRON — 234 символа
class A: timestamp,value,status
{"metrics":[A("2024-01-15T00:00:00Z",42.5,"ok"),A("2024-01-15T01:00:00Z",43.1,"ok"),A("2024-01-15T02:00:00Z",41.8,"ok"),A("2024-01-15T03:00:00Z",44.2,"warning"),A("2024-01-15T04:00:00Z",45,"warning")]}
CSV — 193 символа
timestamp,value,status
2024-01-15T00:00:00Z,42.5,ok
2024-01-15T01:00:00Z,43.1,ok
2024-01-15T02:00:00Z,41.8,ok
2024-01-15T03:00:00Z,44.2,warning
2024-01-15T04:00:00Z,45.0,warning
TOON — 202 символа
metrics[5]{timestamp,value,status}:
2024-01-15T00:00:00Z,42.5,ok
2024-01-15T01:00:00Z,43.1,ok
2024-01-15T02:00:00Z,41.8,ok
2024-01-15T03:00:00Z,44.2,warning
2024-01-15T04:00:00Z,45.0,warning
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
CSV |
193 |
100% |
46% |
|
TOON |
202 |
95.5% |
44% |
|
TRON |
234 |
82.5% |
35% |
|
YAML |
311 |
62.1% |
13% |
|
JSON |
358 |
53.9% |
— |
Победитель: CSV, но TOON почти догоняет его и при этом лучше сохраняет структуру
Тест 6: фрагменты документов для RAG
LLM-специфичный сценарий: паттерн Retrieval-Augmented Generation с текстовыми фрагментами и метаданными.
JSON — 493 символа
{
"chunks": [
{
"id": "doc1_chunk1",
"text": "Large Language Models are transforming how we interact with computers.",
"metadata": {
"source": "ai_overview.pdf",
"page": 1,
"confidence": 0.95
}
},
{
"id": "doc1_chunk2",
"text": "Token efficiency is crucial for cost management in production systems.",
"metadata": {
"source": "ai_overview.pdf",
"page": 2,
"confidence": 0.92
}
}
]
}
YAML — 365 символов
chunks:
- id: doc1_chunk1
text: Large Language Models are transforming how we interact with computers.
metadata:
source: ai_overview.pdf
page: 1
confidence: 0.95
- id: doc1_chunk2
text: Token efficiency is crucial for cost management in production systems.
metadata:
source: ai_overview.pdf
page: 2
confidence: 0.92
TRON — 307 символов
class A: id,text,metadata
class B: source,page,confidence
{"chunks":[A("doc1_chunk1","Large Language Models are transforming how we interact with computers.",B("ai_overview.pdf",1,0.95)),A("doc1_chunk2","Token efficiency is crucial for cost management in production systems.",B("ai_overview.pdf",2,0.92))]}
TOON — 351 символ
chunks[2]:
id: doc1_chunk1
text: Large Language Models are transforming how we interact with computers.
metadata:
source: ai_overview.pdf
page: 1
confidence: 0.95
---
id: doc1_chunk2
text: Token efficiency is crucial for cost management in production systems.
metadata:
source: ai_overview.pdf
page: 2
confidence: 0.92
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
TRON |
307 |
100% |
38% |
|
TOON |
351 |
87.5% |
29% |
|
YAML |
365 |
84.1% |
26% |
|
JSON |
493 |
62.3% |
— |
Победитель: TRON. Вложенные определения классов отлично работают с однородными вложенными структурами
Тест 7: схема function calling
LLM-специфичный сценарий: определения функций в стиле OpenAI для использования инструментов.
JSON — 367 символов
{
"function": "get_weather",
"description": "Get current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City name"
},
"units": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"default": "celsius"
}
},
"required": ["location"]
}
}
YAML — 257 символов
function: get_weather
description: Get current weather for a location
parameters:
type: object
properties:
location:
type: string
description: City name
units:
type: string
enum: [celsius, fahrenheit]
default: celsius
required: [location]
TRON — 280 символов
{"function":"get_weather","description":"Get current weather for a location","parameters":{"type":"object","properties":{"location":{"type":"string","description":"City name"},"units":{"type":"string","enum":["celsius","fahrenheit"],"default":"celsius"}},"required":["location"]}}
TOON — 248 символов
function: get_weather
description: Get current weather for a location
parameters:
type: object
properties:
location:
type: string
description: City name
units:
type: string
enum: celsius,fahrenheit
default: celsius
required: location
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
TOON |
248 |
100% |
32% |
|
YAML |
257 |
96.5% |
30% |
|
TRON |
280 |
88.6% |
24% |
|
JSON |
367 |
67.6% |
— |
Победитель: TOON. Для схем функций он на 32% компактнее JSON
Тест 8: матрицы и сетки — двумерные массивы
Полезно для ML-признаков, игровых полей и табличных данных.
JSON — 99 символов
{
"matrix": [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]
]
}
YAML — 85 символов
matrix:
- [1, 2, 3, 4, 5]
- [6, 7, 8, 9, 10]
- [11, 12, 13, 14, 15]
- [16, 17, 18, 19, 20]
TRON — 71 символ
{"matrix":[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]}
CSV — 59 символов
c1,c2,c3,c4,c5
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18,19,20
TOON — 63 символа
matrix[4][5]:
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18,19,20
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
CSV |
59 |
100% |
40% |
|
TOON |
63 |
93.7% |
36% |
|
TRON |
71 |
83.1% |
28% |
|
YAML |
85 |
69.4% |
14% |
|
JSON |
99 |
59.6% |
— |
Победитель: CSV, но TOON почти догоняет его благодаря двумерному синтаксису
Тест 9: null и пустые значения
Проверяем, как форматы обрабатывают отсутствующие данные. В реальных наборах данных это встречается постоянно.
JSON — 225 символов
{
"data": [
{"name": "Alice", "email": "alice@example.com", "phone": null, "age": 30},
{"name": "Bob", "email": null, "phone": "123-456", "age": null},
{"name": "Charlie", "email": "", "phone": "", "age": 25}
]
}
YAML — 186 символов
data:
- name: Alice
email: alice@example.com
phone: null
age: 30
- name: Bob
email: null
phone: '123-456'
age: null
- name: Charlie
email: ''
phone: ''
age: 25
TRON — 131 символ
class A: name,email,phone,age
{"data":[A("Alice","alice@example.com",null,30),A("Bob",null,"123-456",null),A("Charlie","","",25)]}
CSV — 87 символов
name,email,phone,age
Alice,alice@example.com,,30
Bob,,123-456,
Charlie,,,25
TOON — 107 символов
data[3]{name,email,phone,age}:
Alice,alice@example.com,~,30
Bob,~,123-456,~
Charlie,,,25
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
CSV |
87 |
100% |
61% |
|
TOON |
107 |
81.3% |
52% |
|
TRON |
131 |
66.4% |
42% |
|
YAML |
186 |
46.8% |
17% |
|
JSON |
225 |
38.7% |
— |
Победитель: CSV. TOON последовательно использует ~ для null
Тест 10: few-shot-примеры для промптинга
LLM-специфичный сценарий: пары вход-выход для промпт-инжиниринга.
JSON — 259 символов
{
"examples": [
{
"input": "Classify: This product is amazing!",
"output": "positive"
},
{
"input": "Classify: Terrible experience, would not recommend.",
"output": "negative"
},
{
"input": "Classify: It's okay, nothing special.",
"output": "neutral"
}
]
}
YAML — 207 символов
examples:
- input: 'Classify: This product is amazing!'
output: positive
- input: 'Classify: Terrible experience, would not recommend.'
output: negative
- input: "Classify: It's okay, nothing special."
output: neutral
TRON — 209 символов
class A: input,output
{"examples":[A("Classify: This product is amazing!","positive"),A("Classify: Terrible experience, would not recommend.","negative"),A("Classify: It's okay, nothing special.","neutral")]}
TOON — 178 символов
examples[3]{input,output}:
Classify: This product is amazing!,positive
Classify: Terrible experience would not recommend.,negative
Classify: It's okay nothing special.,neutral
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
TOON |
178 |
100% |
31% |
|
YAML |
207 |
86.0% |
20% |
|
TRON |
209 |
85.2% |
19% |
|
JSON |
259 |
68.7% |
— |
Победитель: TOON. Для few-shot-примеров он на 31% компактнее JSON
Тест 11: конфигурационный файл
Многоуровневые настройки приложения — распространенный реальный сценарий.
JSON — 349 символов
{
"app": {
"name": "MyApp",
"version": "1.0.0",
"debug": false,
"server": {
"host": "0.0.0.0",
"port": 8080,
"timeout": 30
},
"database": {
"host": "localhost",
"port": 5432,
"name": "mydb",
"pool": {
"min": 2,
"max": 10
}
},
"features": {
"auth": true,
"cache": true,
"logging": true
}
}
}
YAML — 273 символа
app:
name: MyApp
version: 1.0.0
debug: false
server:
host: 0.0.0.0
port: 8080
timeout: 30
database:
host: localhost
port: 5432
name: mydb
pool:
min: 2
max: 10
features:
auth: true
cache: true
logging: true
TRON — 246 символов
{"app":{"name":"MyApp","version":"1.0.0","debug":false,"server":{"host":"0.0.0.0","port":8080,"timeout":30},"database":{"host":"localhost","port":5432,"name":"mydb","pool":{"min":2,"max":10}},"features":{"auth":true,"cache":true,"logging":true}}}
TOON — 273 символа
app:
name: MyApp
version: 1.0.0
debug: false
server:
host: 0.0.0.0
port: 8080
timeout: 30
database:
host: localhost
port: 5432
name: mydb
pool:
min: 2
max: 10
features:
auth: true
cache: true
logging: true
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
TRON |
246 |
100% |
30% |
|
TOON |
273 |
90.1% |
22% |
|
YAML |
273 |
90.1% |
22% |
|
JSON |
349 |
70.5% |
— |
Победитель: TRON. Компактный JSON выигрывает у YAML/TOON на неоднородных вложенных структурах
Тест 12: логи
Системные логи с временными метками, уровнями, сообщениями и переменными данными.
JSON — 384 символа
{
"logs": [
{"level": "INFO", "timestamp": "2024-01-15T10:00:00Z", "message": "Application started", "user_id": null},
{"level": "WARN", "timestamp": "2024-01-15T10:05:23Z", "message": "High memory usage detected", "user_id": 1234},
{"level": "ERROR", "timestamp": "2024-01-15T10:10:45Z", "message": "Database connection failed", "user_id": 5678},
{"level": "INFO", "timestamp": "2024-01-15T10:15:00Z", "message": "Connection restored", "user_id": null}
]
}
YAML — 311 символов
logs:
- level: INFO
timestamp: 2024-01-15T10:00:00Z
message: Application started
user_id: null
- level: WARN
timestamp: 2024-01-15T10:05:23Z
message: High memory usage detected
user_id: 1234
- level: ERROR
timestamp: 2024-01-15T10:10:45Z
message: Database connection failed
user_id: 5678
- level: INFO
timestamp: 2024-01-15T10:15:00Z
message: Connection restored
user_id: null
TRON — 307 символов
class A: level,timestamp,message,user_id
{"logs":[A("INFO","2024-01-15T10:00:00Z","Application started",null),A("WARN","2024-01-15T10:05:23Z","High memory usage detected",1234),A("ERROR","2024-01-15T10:10:45Z","Database connection failed",5678),A("INFO","2024-01-15T10:15:00Z","Connection restored",null)]}
CSV — 193 символа
level,timestamp,message,user_id
INFO,2024-01-15T10:00:00Z,Application started,
WARN,2024-01-15T10:05:23Z,High memory usage detected,1234
ERROR,2024-01-15T10:10:45Z,Database connection failed,5678
INFO,2024-01-15T10:15:00Z,Connection restored,
TOON — 213 символов
logs[4]{level,timestamp,message,user_id}:
INFO,2024-01-15T10:00:00Z,Application started,~
WARN,2024-01-15T10:05:23Z,High memory usage detected,1234
ERROR,2024-01-15T10:10:45Z,Database connection failed,5678
INFO,2024-01-15T10:15:00Z,Connection restored,~
Сравнение
|
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
|
CSV |
193 |
100% |
50% |
|
TOON |
213 |
90.6% |
45% |
|
TRON |
307 |
62.9% |
20% |
|
YAML |
311 |
62.1% |
19% |
|
JSON |
384 |
50.3% |
— |
Победитель: CSV. TOON добавляет минимальные накладные расходы ради структуры
Общая сводка производительности
Полные результаты тестов
|
Тест |
Лучший формат |
JSON |
YAML |
CSV |
TOON |
TRON |
TRON относительно JSON |
|---|---|---|---|---|---|---|---|
|
1. Плоская структура |
CSV |
746 |
444 |
152 |
184 |
223 |
на 70% меньше |
|
2. Ответ API |
TOON/YAML |
461 |
341 |
– |
341 |
346 |
на 25% меньше |
|
3. Спецсимволы |
TRON |
270 |
240 |
– |
219 |
214 |
на 21% меньше |
|
4. Большие массивы |
TOON |
244 |
207 |
– |
181 |
201 |
на 18% меньше |
|
5. Временные ряды |
CSV |
358 |
311 |
193 |
202 |
234 |
на 35% меньше |
|
6. RAG-фрагменты |
TRON |
493 |
365 |
– |
351 |
307 |
на 38% меньше |
|
7. Схема функций |
TOON |
367 |
257 |
– |
248 |
280 |
на 24% меньше |
|
8. 2D-матрица |
CSV |
99 |
85 |
59 |
63 |
71 |
на 28% меньше |
|
9. Null-значения |
CSV |
225 |
186 |
87 |
107 |
131 |
на 42% меньше |
|
10. Few-shot |
TOON |
259 |
207 |
– |
178 |
209 |
на 19% меньше |
|
11. Конфиг |
TRON |
349 |
273 |
– |
273 |
246 |
на 30% меньше |
|
12. Логи |
CSV |
384 |
311 |
193 |
213 |
307 |
на 20% меньше |
Средняя экономия относительно JSON:
-
TOON: ~35% по всем применимым тестам
-
TRON: ~31% по всем применимым тестам
Матрица возможностей форматов
|
Возможность |
JSON |
YAML |
CSV |
TOON (табличный) |
TOON (объектный) |
TRON |
|---|---|---|---|---|---|---|
|
Вложенные объекты |
✅ |
✅ |
❌ |
⚠️ |
✅ |
✅ |
|
Массивы |
✅ |
✅ |
⚠️ |
✅ |
✅ |
✅ |
|
Null-значения |
✅ |
✅ |
⚠️ |
✅ |
✅ |
✅ |
|
Специальные символы |
✅ |
✅ |
⚠️ |
✅ |
✅ |
✅ |
|
Unicode/эмодзи |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
|
Комментарии |
❌ |
✅ |
❌ |
❌ |
❌ |
❌ |
|
Токенная эффективность |
❌ |
⚠️ |
✅ |
✅ |
✅ |
✅ |
|
Человекочитаемость |
⚠️ |
✅ |
✅ |
✅ |
✅ |
⚠️ |
|
Машинный парсинг |
✅ |
✅ |
✅ |
⚠️ |
⚠️ |
✅ |
|
Совместимость с JSON |
✅ |
❌ |
❌ |
❌ |
❌ |
✅ |
|
Определения схем |
❌ |
❌ |
❌ |
⚠️ |
❌ |
✅ |
Легенда:
-
✅ Полная поддержка
-
⚠️ Ограниченная или условная поддержка
-
❌ Нет поддержки
Рекомендации по выбору формата
Когда использовать TOON
✅ Хорошо подходит для:
-
Передачи данных в LLM: это основной сценарий. TOON специально создан для минимизации расхода токенов и снижает стоимость API на 70-75%, сохраняя читаемость для модели.
-
Сценариев, где стоимость токенов заметна: каждый сэкономленный символ напрямую уменьшает счет за API, а на продакшен-нагрузках компактный синтаксис TOON может экономить тысячи долларов в месяц.
-
Данных с полноценной вложенностью: в отличие от CSV, TOON умеет описывать сложные вложенные структуры и все равно остается компактнее JSON или YAML.
-
Ситуаций, где важна читаемость: TOON сохраняет отступы и понятную структуру, поэтому промпты проще отлаживать и поддерживать, чем плотный JSON.
-
Ограниченного окна контекста: прирост плотности данных в 4 раза позволяет уместить больше примеров, документации или контекста в тот же лимит токенов.
-
RAG-приложений: фрагменты документов с метаданными сжимаются на 29% лучше JSON, поэтому в запрос помещается больше релевантного контекста.
-
Схем function calling: описания инструментов становятся на 32% компактнее, оставляя больше токенов для диалога и рассуждений.
-
Few-shot-примеров: обучающие примеры сжимаются на 31% лучше, что позволяет добавить больше примеров в тот же бюджет контекста.
-
Любых входных данных для LLM: модели читают TOON почти так же легко, как JSON, но платите вы за меньшее число токенов.
❌ Лучше избегать, если:
-
Вы строите публичные API: используйте JSON. TOON не является стандартным форматом, а внешние потребители ожидают JSON ради совместимости и поддержки инструментами.
-
Нужна зрелая экосистема инструментов: у JSON есть валидаторы, редакторы и библиотеки для каждого языка, а для TOON нужен отдельный парсер.
-
Вы работаете не с LLM-системами: традиционные базы данных, API и программы ожидают стандартные форматы; преимущества TOON проявляются именно в оптимизации токенов для LLM.
-
Требуется совместимость с JSON: в таком случае лучше использовать TRON.
Когда использовать TRON
✅ Хорошо подходит для:
-
JSON-совместимых процессов: TRON является надмножеством JSON, поэтому существующие парсеры могут напрямую читать секцию данных; менять всю цепочку инструментов не нужно.
-
Массивов однородных объектов: определения классов убирают повторяющиеся имена полей и экономят 20-40% на табличных данных.
-
Постепенной миграции с JSON: можно использовать JSON как есть и добавлять определения классов только там, где это выгодно.
-
Вложенных однородных структур: несколько определений классов могут сжимать сложные вложенные массивы. В тесте с RAG-фрагментами экономия составила 38%.
-
Ситуаций, где важна поддерживаемость: структура JSON остается видимой, поэтому отладка проще, чем в чистом TOON.
-
Неоднородных вложенных данных: компактный JSON-вывод TRON выигрывает у YAML/TOON на структурах вроде конфигов: экономия 30%.
❌ Лучше избегать, если:
-
Данные строго табличные: CSV или табличный TOON компактнее, потому что TRON все еще несет накладные расходы JSON-структуры.
-
Нужно максимальное сжатие: TOON дает экономию 70-75% относительно JSON, а TRON в среднем около 30%.
-
Основной сценарий — ручное редактирование: YAML или основанный на отступах синтаксис TOON читаются проще.
Когда использовать JSON
✅ Хорошо подходит для:
-
Публичных API: JSON — универсальный стандарт веб-API; каждый язык программирования имеет надежную поддержку JSON, поэтому интеграция проще.
-
Сценариев, где нужна универсальная совместимость: JSON работает в браузерах, на серверах, в базах данных, мобильных приложениях и IoT-устройствах без конвертации формата.
-
Ситуаций, где важна развитая экосистема инструментов: у JSON есть зрелые валидаторы, JSON Schema, форматтеры и средства отладки почти в любой IDE.
-
Контрактов, где критична валидация схем: JSON Schema дает формальную валидацию, версионирование и документацию, что важно для API-контрактов.
-
Случаев, где стоимость токенов не важна: если вы не платите за токены, например при локальных моделях или безлимитных планах, привычность JSON может быть важнее экономии TOON.
❌ Лучше избегать, если:
-
Данные отправляются в LLM: многословный синтаксис JSON — скобки, кавычки, запятые — тратит на 70-75% больше токенов, чем TOON для тех же данных.
-
Важна токенная эффективность: на масштабе накладные расходы JSON превращаются в заметные ежемесячные затраты и более медленные ответы.
-
Приложение чувствительно к стоимости: продакшен LLM-приложения с миллионами запросов резко почувствуют разницу между JSON и TOON.
Когда использовать YAML
✅ Хорошо подходит для:
-
Конфигурационных файлов: минимальный синтаксис YAML и поддержка комментариев делают конфиги самодокументируемыми и удобными в поддержке.
-
Частого ручного редактирования: структура на отступах естественнее для чтения и записи, чем фигурные и квадратные скобки JSON.
-
Сценариев, где нужны комментарии: YAML поддерживает комментарии нативно, а JSON — нет. Это важно для объяснения настроек и решений в конфигурации.
-
Ситуаций, где читаемость важнее всего: чистый синтаксис без лишних кавычек и скобок делает YAML удобным форматом для совместной работы.
-
Данных, которые не отправляются в LLM: преимущества читаемости YAML нужны людям; моделям они не нужны, а вы платите лишними токенами по сравнению с TOON.
❌ Лучше избегать, если:
-
Вы оптимизируете токены для LLM: YAML на 30-50% многословнее TOON, и на LLM-масштабе эти лишние токены стоят реальных денег.
-
Основной сценарий — машинный парсинг: гибкость YAML, где одни и те же данные можно выразить несколькими способами, усложняет стабильный парсинг по сравнению с JSON.
-
Размер важен: пробелы и явная структура YAML делают его крупнее TOON, что проблемно при жестких лимитах.
Когда использовать CSV
✅ Хорошо подходит для:
-
Строго табличных данных: CSV — самый компактный формат для строк и столбцов; фактически это только запятые и переводы строк, то есть минимум накладных расходов.
-
Сценариев без вложенности: CSV отлично работает с плоскими таблицами; если данные естественно ложатся в электронную таблицу, по эффективности его трудно обойти.
-
Максимального сжатия табличных данных: CSV обычно дает минимальное число символов — часто на 50% меньше TOON и на 80% меньше JSON.
-
Совместимости с таблицами: CSV напрямую открывается в Excel, Google Sheets и почти любом инструменте для работы с данными.
-
Простого импорта и экспорта: базы данных, аналитические инструменты и пайплайны данных обычно поддерживают CSV из коробки.
❌ Лучше избегать, если:
-
У данных есть вложенные структуры: CSV не умеет представлять иерархии и связи; придется заводить несколько файлов и соединения, теряя простоту CSV.
-
Нужны сложные типы данных: в CSV фактически есть только строки, включая числа как строки; нет нативных булевых значений, null или объектов.
-
Нужно описывать связи между сущностями: CSV не выражает связи «один ко многим» и «многие ко многим» без превращения данных в реляционную структуру.
TRON против TOON: прямое сравнение
|
Аспект |
TRON |
TOON |
|---|---|---|
|
Философия |
Расширить JSON классами |
Полностью заменить синтаксис JSON |
|
Совместимость |
Надмножество JSON, обратно совместим |
Новый формат, нужна конвертация |
|
Лучший случай |
~40% экономии относительно JSON |
~75% экономии относительно JSON |
|
Худший случай |
Откат к JSON: 0% экономии |
Все равно экономит за счет синтаксиса с отступами |
|
Читаемость |
Похож на JSON, компактный |
Похож на YAML, с отступами |
|
Инструменты |
Для данных можно использовать JSON-парсеры |
Нужен TOON-специфичный парсер |
|
Вложенные классы |
✅ Полная поддержка |
⚠️ Ограниченно |
|
Лучше всего подходит для |
Постепенной миграции, смешанных данных |
Максимального сжатия |
Когда TRON обходит TOON
|
Сценарий |
TRON |
TOON |
Победитель |
|---|---|---|---|
|
RAG-фрагменты: вложенные однородные структуры |
307 |
351 |
TRON |
|
Конфиги: неоднородные вложенные структуры |
246 |
273 |
TRON |
|
Специальные символы |
214 |
219 |
TRON |
Когда TOON обходит TRON
|
Сценарий |
TRON |
TOON |
Победитель |
|---|---|---|---|
|
Плоская структура |
223 |
184 |
TOON |
|
Большие массивы |
201 |
181 |
TOON |
|
Few-shot-примеры |
209 |
178 |
TOON |
|
Схемы функций |
280 |
248 |
TOON |
|
Логи |
307 |
213 |
TOON |
Заключение
Главное
-
TOON снижает стоимость токенов LLM на 70-75% относительно JSON
-
Это подтверждается 14 реалистичными тестовыми сценариями
-
Сохраняет функциональный паритет
-
Не ухудшает качество
-
TRON снижает стоимость токенов LLM на 20-40% относительно JSON
-
Сохраняет совместимость с JSON
-
Отлично работает с вложенными однородными структурами: 38% экономии на RAG
-
Хорош для постепенной миграции
-
Эффективность окна контекста заметно растет
-
TOON: в 4 раза больше данных в том же контексте
-
TRON: в 2,6 раза больше данных в том же контексте
-
Меньше необходимости дробить данные, выше связность
-
Выбирать нужно по ограничениям
-
Нужна максимальная экономия → TOON
-
Требуется совместимость с JSON → TRON
-
Данные плоские и табличные → CSV
-
Важнее всего ручное редактирование → YAML
-
Готово к продакшену и проверено на практике
-
14 подробных тестовых сценариев
-
Реальные примеры
-
Понятный путь миграции
-
Измеримые результаты
Коротко
JSON — для машин. YAML — для людей. TRON — для LLM, когда нужна JSON-совместимая компрессия. TOON — для LLM, когда нужна максимальная компрессия.
Для любого приложения, которое отправляет структурированные данные в большие языковые модели, TOON и TRON дают заметные преимущества относительно JSON. Выбирайте TOON, если можете принять новый формат и хотите максимальную экономию. Выбирайте TRON, если нужно сохранить совместимость с JSON и при этом снизить расходы.
Схема выбора
Данные идут в LLM?
├─ Да
│ ├─ Данные плоские/табличные?
│ │ └─ Используйте CSV или TOON в табличном стиле
│ ├─ Это однородные массивы объектов?
│ │ ├─ Нужна совместимость с JSON? → Используйте TRON
│ │ └─ Нужна максимальная экономия? → Используйте TOON
│ └─ Данные глубоко вложенные/неоднородные?
│ ├─ Нужна совместимость с JSON? → Используйте TRON: компактный JSON
│ └─ Нужна максимальная экономия? → Используйте TOON в объектном стиле
└─ Нет
├─ Это API?
│ └─ Используйте JSON
├─ Это конфигурационный файл?
│ └─ Используйте YAML
└─ Это табличные данные?
└─ Используйте CSV
Автор: COBECT


