Що таке TOON?

TOON
JSON
Оптимізація

Ми всі там були. Ви розробляєте підказку для великої мовної моделі (LLM) і вам потрібно передати структуровані дані. Ви досягаєте JSON. Зрештою, це галузевий стандарт. Але коли ви спостерігаєте, як ваше контекстне вікно заповнюється нескінченними фігурними дужками, повторюваними клавішами та лапками навколо простих цілих чисел, ви починаєте замислюватися: чи є кращий спосіб?

YAML пропонує читабельність, але страждає від неоднозначності. CSV щільний, але не має ієрархії.

Введіть TOON.

TOON — це формат серіалізації даних, який виглядає як ковток свіжого повітря для розробників і рідна мова для моделей ШІ. Він усуває розрив між зрозумілістю для людини та ефективністю машини. Сьогодні давайте заглибимося в синтаксис і механізми TOON, щоб зрозуміти, чому він швидко стає улюбленим для високоефективного обміну даними.

Філософія: семантика JSON, естетика YAML

За своєю суттю TOON використовує ту саму модель даних, що й JSON. Якщо ви можете представити це в JSON — примітиви (рядки, числа, логічні значення, значення null), об’єкти та масиви — ви можете представити це в TOON. Однак презентація кардинально відрізняється.

TOON відмовляється від брекетів. Він використовує відступи для представлення ієрархії, подібно до YAML. Простий об'єкт виглядає чистим і доступним:

Однак, на відміну від YAML, TOON суворо ставиться до типів. Немає жодних здогадок, якщо ні означає хибне або рядок "ні". У TOON рядки вимагають лапок лише тоді, коли це абсолютно необхідно, наприклад, коли вони містять спеціальні символи, схожі на числа або порожні. Якщо ви введете message: Hello World, ви отримаєте рядок. Якщо ви введете count: 42, ви отримаєте число.

ідентифікатор: 123 
Ім'я: Ада 
активний: правда 

Сила масивів: довжина та таблиці

Де TOON справді відокремлює себе від зграї, так це його обробка масивів. Це «вбивча функція» для оптимізації токенів.

Кожен масив у TOON явно оголошує свою довжину в дужках, як items[3]. Для людини це може здатися зайвим, але для LLM це суперсила. Це дозволяє моделі негайно перевіряти структуру та виявляти скорочення. Якщо потік обривається після двох елементів, але заголовок обіцяв три, аналізатор знає, що щось пішло не так.

TOON ефективно пропонує три способи обробки масивів, автоматично вибираючи найефективніший:

  1. Вбудовані примітиви: Для простих списків чисел або рядків TOON зберігає його компактним. теги[3]: admin,ops,dev
  1. Стандартні списки: для змішаних типів використовується синтаксис списку з дефісами, подібний до YAML.
  1. Табличні об’єкти: Це зміна гри.

Якщо у вас є масив об’єктів, які мають однакові ключі — дуже поширений шаблон у записах бази даних — TOON повертається до табличного формату. замість того, щоб повторювати ключі для кожного окремого рядка, він оголошує ключі один раз у заголовку.

У наведеному вище прикладі users[2]{id,name,role}: повідомляє нам, що у нас є 2 рядки, і визначає схему. Дані слідують у структурі, подібній до CSV. Це усуває величезні накладні витрати маркерів на повторення "id":, "name": і "role": для кожного користувача.

користувачі[2]{id,name,role}: 
1, Аліса Адмін, адмін 
2, Боб Сміт, користувач 

Роздільники та ефективність маркерів

У наведених вище прикладах ви можете помітити використання ком. TOON насправді підтримує три розділювачі: коми (за замовчуванням), табуляції та вертикальну лінію (|).

Чому це має значення? Токенізація.

У багатьох токенізерах LLM кома, за якою слідує лапка, може бути розділена на кілька токенів. Однак символ табуляції часто дуже чітко розміщується. TOON дозволяє перемикати роздільники на рівні заголовка масиву. Якщо ви використовуєте роздільник табуляції, вам часто навіть не потрібно брати в лапки рядки, які містять пробіли, ще більше стискаючи ваші дані.

Формат достатньо розумний, щоб впоратися з «зіткненнями». Якщо ваші дані містять активний роздільник, TOON просто бере це значення в лапки.

items[2]{sku,name,qty}: 
A1,Назва віджета,2 
B2,Назва гаджета,1 

Згортання ключа: зведення кривої

Ще однією функцією, яка підкреслює фокус TOON на ефективності, є Складання ключів. Глибоко вкладені об’єкти зазвичай призводять до «сходів» відступів, які з’їдають горизонтальний простір і маркери.

Якщо у вас є глибока ієрархія, де проміжні об’єкти не мають братів і сестер, TOON може згорнути їх у шлях із крапковим позначенням.

Замість написання:

Ви можете написати:

дані: 
метадані: 
предмети[2]: а,б 

Ця функція, доступна з версії 1.5 специфікації, значно зменшує кількість рядків і маркерів відступів. Важливо, що це повністю оборотно. Коли ви декодуєте дані з увімкненим розширенням шляху, це ідеально реконструює глибоку ієрархію об’єктів.

data.metadata.items[2]: a,b 

Суворість і безпека

Незважаючи на лаконічний вигляд, TOON не втрачає даних. Він дотримується суворих правил цитування та екранування.

Рядки зазвичай залишаються без лапок, що чудово сприяє читабельності. Однак TOON забезпечує цитування для граничних випадків, щоб забезпечити цілісність даних. Якщо рядок виглядає як число (наприклад, "05" або "1e-6"), він береться в лапки, щоб запобігти розбору його як числа. Якщо рядок є зарезервованим словом, наприклад true або null, він потрапляє в лапки.

Крім того, TOON нормалізує числа. Він видає канонічні десяткові форми — без наукової нотації чи нулів у кінці — для забезпечення узгодженості. Він навіть безпечно обробляє BigInt; якщо число перевищує безпечний діапазон цілих чисел, воно серіалізується як рядок, щоб запобігти втраті точності під час транспортування.

Кореневі форми

Хоча більшість із нас працює з кореневими об’єктами, TOON є гнучким. Документ не обов’язково повинен починатися з пари ключ-значення. Він підтримує кореневі масиви (починаючи відразу з [N]:) або навіть один кореневий примітив. Цей паритет із JSON означає, що ви можете замінити TOON майже на будь-який конвеєр, де наразі використовується JSON, за умови, що у вас є синтаксичний аналізатор на іншому кінці.

Останні думки

TOON — це не просто «ще один формат». Це спеціалізований інструмент для епохи, коли дані споживаються імовірнісними моделями так само часто, як і детермінованим кодом. Поєднуючи жорстку модель даних JSON із щільністю CSV і читабельністю YAML, він вирішує специфічну проблему оптимізації контекстного вікна без шкоди для безпеки типу.

Якщо ви створюєте агентів, налаштовуєте моделі або просто втомилися від нескінченних закриваючих дужок, настав час поглянути на TOON.