Как использовать TOON с LLM

Магистр права
Оперативное проектирование

Если вы когда-либо вставляли большой массив JSON в ChatGPT или Claude, вы, вероятно, чувствовали боль от закрытия контекстного окна. JSON отлично подходит для веб-API, но для больших языковых моделей (LLM) это невероятно расточительно. Повторение имен полей, таких как "id":, "name": и "timestamp": для каждой отдельной записи, не просто избыточно; он сжигает токены, которые стоят реальных денег и ценного контекстного пространства.

Здесь проявляется TOON (нотация табличных объектов). Это не просто формат данных; это стратегия оптимизации взаимодействия LLM. Убрав синтаксический налог JSON и добавив явные структурные заголовки, TOON позволяет вам передавать больше данных в ваши модели и получать взамен более надежные структурированные выходные данные.

Экономика токенов TOON

Зачем вообще переключать форматы? Математика проста. В стандартном массиве объектов JSON схема повторяется для каждой строки. Если у вас есть список из 50 пользователей, вы платите за имена полей 50 раз.

TOON устраняет эту избыточность, объявляя схему один раз в заголовке. Данные следуют в плотном, упорядоченном формате. На практике это обычно приводит к сокращению использования токенов на 30–60 % для унифицированных массивов по сравнению с форматированным JSON. Когда вы имеете дело с огромными контекстными окнами или большими объемами вызовов API, эта эффективность напрямую приводит к снижению затрат и уменьшению задержки.

Отправка данных: правило «покажи, но не говори»

Когда вам нужна степень магистра права для анализа данных, ваша стратегия быстрого реагирования имеет решающее значение. Новички часто пишут длинные абзацы, объясняющие формат данных. С TOON вам не нужно этого делать.

LLM — это механизмы сопоставления с образцом. Они интуитивно понимают TOON, потому что он выглядит как гибрид YAML и CSV — форматов, которые они видели миллиарды раз во время обучения.

Чтобы отправить данные, просто оберните их в изолированный блок кода. Вы можете назвать его «мультяшным», но даже если подсветка синтаксиса модели официально не поддерживает его, модель сразу понимает структуру.

Пример ввода

Вместо описания схемы просто укажите блок:

Заголовок users[3]{id,name,role,lastLogin} сообщает модели все, что ей нужно знать: тип сущности, количество (3 строки) и порядок полей. Отступ управляет иерархией. Такая «самодокументируемость» позволяет вашему приглашению сосредоточиться на реальной логической задаче, а не на инструкциях по синтаксическому анализу.

Вот журнал активности пользователя. Данные представлены в формате TOON (отступ в два пробела, явные заголовки). 

пользователи[3]{id,name,role,lastLogin}: 
1,Алиса,админ,2025-01-15T10:30:00Z 
2,Боб,пользователь,14.01.2025T15:22:00Z 
3,Чарли,пользователь,13.01.2025T09:45:00Z 

Задача: Проанализировать логи и определить, какие пользователи не заходили в систему за последние 24 часа. 

Генерация надежного вывода

Получить LLM для чтения данных легко; заставить его сгенерировать действительные структурированные данные — трудная задача. Модели любят галлюцинировать, обрезать JSON или забывать о закрывающих скобках.

TOON добавляет уровень безопасности за счет синтаксиса заголовка, в частности, счетчика [N]. Когда вы просите модель вывести TOON, вы просите ее зафиксировать структуру до того, как она сгенерирует данные.

Запрос на генерацию

Чтобы получить наилучшие результаты, укажите ожидаемый формат заголовка и поручите модели заполнить строки.

Попросив модель вычислить [N], вы запускаете процесс «цепочки мыслей», в котором модель должна планировать выходной размер. Это, казалось бы, небольшое ограничение значительно снижает вероятность того, что модель обрежется на середине списка.

Задача: Вернуть список активных пользователей с ролью «пользователь». 
Формат: Используйте TOON. Установите значение [N] в заголовке, чтобы оно соответствовало точному количеству сгенерированных вами строк. 

Ожидаемый формат: 
пользователи[N]{id,name,role,lastLogin}: 

Проверка в строгом режиме

Когда вы получаете ответ от LLM, не стоит ему просто доверять. Именно здесь строгий режим библиотеки TOON становится суперсилой для производственных приложений.

Если вы используете библиотеку TypeScript, декодирование в строгом режиме проверяет, соответствуют ли сгенерированные строки количеству заголовков:

Это позволяет вам программно немедленно перехватывать «ленивые» выходные данные модели или усечения сети, вместо того, чтобы обнаруживать неверные данные в дальнейшем в вашем приложении.

импортировать {декодировать} из '@toon-format/toon'; 

попробуй { 
// Если в модели указано [5], но предусмотрено 4 строки, это выдаст ошибку. 
const data = decode (modelOutput, { strict: true }); 
console.log('Получены действительные данные:', data); 
} поймать (ошибка) { 
console.error('Обнаружена галлюцинация или усечение модели:', error.message); 
} 

Расширенная оптимизация: трюк с вкладками

Если вы одержимы оптимизацией (а в мире LLM вам, вероятно, так и должно быть), вы можете добиться еще большей эффективности, разумно выбирая разделители.

Запятые являются стандартными, но во многих словарях токенизаторов табуляция (\t) часто представлена ​​как один токен. Более того, табуляция редко появляется внутри естественных текстовых полей, что уменьшает необходимость в escape-символах (например, заключении строк в кавычки).

Вы можете закодировать свои данные с помощью вкладок перед отправкой их в модель:

Просто не забудьте сообщить модели в командной строке: «Данные TOON разделены табуляцией». Это создает сверхкомпактное представление, которое модели невероятно легко анализировать и генерировать.

const toonPrompt = encode(data, {delimiter: '\t'}); 

Полный пример рабочего процесса

Давайте посмотрим на реальный сценарий: фильтрацию системных журналов. Вы хотите отправить в модель необработанные журналы и получить обратно структурированный список ошибок.

Подсказка:

Выход модели:

Системные журналы в формате TOON (разделены табуляцией): 

события[4]{id,level,message,timestamp}: 
1,ошибка,время ожидания соединения,2025-01-15T10:00:00Z 
2, предупреждение, медленный запрос, 15.01.2025T10:05:00Z 
3,информация,логин пользователя,2025-01-15T10:10:00Z 
4,ошибка,ошибка базы данных025-01-15T10:15:00Z 

Задача: Извлечь все события с уровнем «ошибка». Верните результат как действительный TOON с обновленным количеством заголовков. 

Результат:

события[2]{id,level,message,timestamp}: 
1,ошибка,время ожидания соединения,2025-01-15T10:00:00Z 
4,ошибка,ошибка базы данных,2025-01-15T10:15:00Z 

Модель правильно отфильтровала список и, что особенно важно, обновила заголовок до «events[2]». Декодируя этот ответ, вы получаете чистый, типобезопасный массив, готовый для логики вашего приложения.

Краткое содержание

TOON устраняет разрыв между удобочитаемостью для человека и эффективностью машины. Он учитывает ценовые ограничения LLM, обеспечивая при этом структуру, необходимую для надежной разработки программного обеспечения.

  1. Сохраняйте небольшой размер: используйте в примерах 2–5 строк; модель будет обобщающей.
  1. Будьте конкретны. Четко определяйте заголовки, чтобы модель знала схему.
  1. Строго проверяйте. Используйте метаданные формата, чтобы выявить ошибки генерации.

Отказываясь от JSON для оперативной полезной нагрузки, вы не просто экономите токены — вы создаете более надежный конвейер ИИ.