Что такое ТУН?
Мы все были там. Вы разрабатываете приглашение для модели большого языка (LLM), и вам необходимо передать структурированные данные. Вы тянетесь к JSON. В конце концов, это отраслевой стандарт. Но когда вы наблюдаете, как ваше контекстное окно заполняется бесконечными фигурными скобками, повторяющимися ключами и кавычками вокруг простых целых чисел, вы начинаете задаваться вопросом: Есть ли способ получше?
YAML обеспечивает читабельность, но страдает двусмысленностью. CSV плотный, но ему не хватает иерархии.
Введите TOON.
TOON — это формат сериализации данных, который кажется глотком свежего воздуха для разработчиков и родным языком для моделей искусственного интеллекта. Он устраняет разрыв между удобочитаемостью для человека и эффективностью машины. Сегодня давайте углубимся в синтаксис и механику TOON, чтобы понять, почему он быстро становится популярным для высокоэффективного обмена данными.
Философия: семантика JSON, эстетика YAML
По своей сути TOON использует ту же модель данных, что и JSON. Если вы можете представить это в JSON — примитивы (строки, числа, логические значения, значения NULL), объекты и массивы — вы можете представить это в TOON. Однако подача кардинально отличается.
TOON отказывается от брекетов. Он использует отступы для представления иерархии, очень похоже на YAML. Простой объект выглядит чистым и доступным:
Однако, в отличие от YAML, TOON строго относится к типам. Невозможно угадать, означает ли no false или строку "no". В TOON строки требуют кавычек только в случае крайней необходимости — например, когда они содержат специальные символы, напоминают числа или пусты. Если вы наберете message: Hello World, вы получите строку. Если вы наберете «count: 42», вы получите число.
идентификатор: 123
имя: Ада
активен: правда
Возможности массивов: длина и таблицы
В чем TOON действительно выделяется из остальных, так это в обработке массивов. Это «убийственная функция» для оптимизации токенов.
Каждый массив в TOON явно объявляет свою длину в скобках, например items[3]. Человеку это может показаться излишним, но для магистра права это суперсила. Это позволяет модели немедленно проверять структуру и обнаруживать усечение. Если поток прерывается после двух элементов, а заголовок обещал три, синтаксический анализатор понимает, что что-то пошло не так.
TOON эффективно предлагает три способа обработки массивов, автоматически выбирая наиболее эффективный:
- Встроенные примитивы: для простых списков чисел или строк TOON сохраняет их компактными.
теги[3]: admin,ops,dev
- Стандартные списки. Для смешанных типов используется синтаксис списка через дефис, аналогичный YAML.
- Табличные объекты. Это меняет правила игры.
Если у вас есть массив объектов с одинаковыми ключами (очень распространенный шаблон в записях базы данных), TOON переключается на табличный формат. вместо повторения ключей для каждой отдельной строки ключи объявляются один раз в заголовке.
В приведенном выше примере users[2]{id,name,role}: сообщает нам, что у нас есть 2 строки, и определяет схему. Данные следуют в структуре, подобной CSV. Это устраняет огромные накладные расходы на токен, связанные с повторением "id":, "name": и "role": для каждого пользователя.
пользователи[2]{id,имя,роль}:
1,Алиса Админ,админ
2, Боб Смит, пользователь
Разделители и эффективность токена
Вы могли заметить использование запятых в приведенных выше примерах. TOON фактически поддерживает три разделителя: запятые (по умолчанию), табуляция и вертикальная черта (|).
Почему это имеет значение? Токенизация.
Во многих токенизаторах LLM запятая, за которой следует кавычка, может быть разделена на несколько токенов. Однако символ табуляции часто токенизируется очень четко. TOON позволяет переключать разделители на уровне заголовка массива. Если вы используете разделитель табуляции, вам часто даже не нужно заключать в кавычки строки, содержащие пробелы, что еще больше сжимает ваши данные.
Формат достаточно умен, чтобы справляться с «коллизиями». Если ваши данные содержат активный разделитель, TOON просто указывает это конкретное значение.
предметы[2]{артикул,имя,кол-во}:
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.