Як використовувати TOON з LLM
Якщо ви коли-небудь вставляли великий масив JSON у ChatGPT або Claude, ви, ймовірно, відчували біль від закриття контекстного вікна. JSON є фантастичним для веб-API, але для великих мовних моделей (LLM) це неймовірно марнотратно. Повторення імен полів, таких як "id":, "name": і "timestamp": для кожного окремого запису не просто зайве; він пропалює токени, які коштують реальні гроші та цінний контекстний простір.
Ось де блищить TOON (нотація табличних об’єктів). Це не просто формат даних; це стратегія оптимізації взаємодії LLM. Усунувши синтаксис JSON і додавши явні структурні заголовки, TOON дозволяє передавати більше даних у ваші моделі та отримувати натомість більш надійні структуровані виходи.
Економіка жетонів TOON
Навіщо перемикати формати? Математика проста. У стандартному масиві об’єктів JSON схема повторюється для кожного рядка. Якщо у вас є список із 50 користувачів, ви платите за імена полів 50 разів.
TOON усуває цю надмірність, оголошуючи схему один раз у заголовку. Дані слідують у щільному, стрункому форматі. На практиці це зазвичай призводить до зменшення використання токенів на 30-60% для уніфікованих масивів порівняно з відформатованим JSON. Коли ви маєте справу з великими контекстними вікнами або великою кількістю викликів API, ця ефективність безпосередньо перетворюється на менші рахунки та меншу затримку.
Надсилання даних: правило «Покажи, не кажи».
Коли вам потрібен LLM для аналізу даних, ваша швидка стратегія має вирішальне значення. Початківці часто пишуть довгі абзаци, пояснюючи формат даних. З TOON вам не потрібно цього робити.
LLM — це механізми зіставлення шаблонів. Вони інтуїтивно розуміють TOON, оскільки він виглядає як гібрид YAML і CSV — форматів, які вони бачили мільярди разів під час навчання.
Щоб надіслати дані, просто загорніть їх у блок коду. Ви можете позначити його як toon, але навіть якщо підсвічувач синтаксису моделі офіційно не підтримує його, модель одразу розуміє структуру.
Приклад введення
Замість опису схеми просто вкажіть блок:
Заголовок users[3]{id,name,role,lastLogin} повідомляє моделі все, що їй потрібно знати: тип сутності, кількість (3 рядки) і порядок полів. Відступ керує ієрархією. Цей «самодокументований» характер звільняє вашу підказку, щоб зосередитися на фактичному логічному завданні, а не на інструкціях синтаксичного аналізу.
Ось журнал активності користувача. Дані наведено у форматі TOON (відступ 2 пробіли, чіткі заголовки).
користувачі[3]{id,name,role,lastLogin}:
1,Аліса,адміністратор,2025-01-15T10:30:00Z
2,Боб,користувач,2025-01-14T15:22:00Z
3,Charlie,user,2025-01-13T09:45:00Z
Завдання: проаналізуйте журнали та визначте, які користувачі не входили в систему протягом останніх 24 годин.
Створення надійного результату
Змусити LLM читати дані легко; змусити його генерувати дійсні структуровані дані — складна частина. Моделі люблять галюцинувати, скорочувати JSON або забувати закривати дужки.
TOON додає рівень безпеки через синтаксис заголовка, зокрема кількість [N]. Коли ви просите модель вивести TOON, ви просите її передати структуру перед тим, як вона згенерує дані.
Підказка для генерації
Щоб отримати найкращі результати, надайте очікуваний формат заголовка та вказуйте моделі заповнення рядків.
Попросивши модель обчислити [N], ви змушуєте процес "ланцюжка думок", коли модель повинна планувати вихідний розмір. Це, здавалося б, невелике обмеження значно зменшує ймовірність відсікання моделі на півдорозі списку.
Завдання: Повернути список активних користувачів з роллю «користувач».
Формат: використовуйте TOON. Установіть значення [N] у заголовку, щоб відповідати точним числам рядків, які ви створюєте.
Очікуваний формат:
користувачі[N]{id,name,role,lastLogin}:
Перевірка в строгому режимі
Коли ви отримуєте відповідь від LLM, ви не повинні просто довіряти їй. Саме тут суворий режим бібліотеки TOON стає надпотужністю для виробничих програм.
Якщо ви використовуєте бібліотеку TypeScript, декодування в строгому режимі перевіряє відповідність згенерованих рядків кількості заголовків:
Це дає змогу програмно виловлювати «ліниві» виходи моделі або мережеві скорочення негайно, а не виявляти погані дані у вашій програмі.
імпортувати {decode} з '@toon-format/toon';
спробувати {
// Якщо модель каже [5], але надає 4 рядки, це видає помилку.
const data = decode(modelOutput, { strict: true });
console.log('Отримано дійсні дані:', дані);
} catch (помилка) {
console.error('Виявлено галюцинацію або скорочення моделі:', error.message);
}
Розширена оптимізація: трюк вкладки
Якщо ви одержимі оптимізацією (а у світі LLM, мабуть, повинні бути), ви можете вичавити ще більше ефективності, вибравши розділювачі з розумом.
Коми є стандартними, але знаки табуляції (\t) часто представлені як одна лексема в багатьох словниках токенізерів. Крім того, вкладки рідко з’являються всередині звичайних текстових полів, що зменшує потребу в символах екранування (наприклад, перенесення рядків у лапки).
Ви можете закодувати свої дані за допомогою вкладок перед надсиланням їх у модель:
Просто не забудьте повідомити модель у підказці: "Data is tab-separated TOON." Це створює гіперкомпактне представлення, яке неймовірно легко аналізувати та генерувати моделлю.
const toonPrompt = кодувати (дані, { розділювач: '\t' });
Повний приклад робочого процесу
Давайте подивимося на реальний сценарій: фільтрація системних журналів. Ви хочете надіслати необроблені журнали до моделі та отримати назад структурований список помилок.
Підказка:
Вихід моделі:
Системні журнали у форматі TOON (розділені табуляцією):
події[4]{id,level,message,timestamp}:
1,помилка,Час очікування підключення,2025-01-15T10:00:00Z
2, попередження, повільний запит, 2025-01-15T10: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, забезпечуючи структуру, необхідну для надійної розробки програмного забезпечення.
- Зберігайте його невеликим: Використовуйте 2-5 рядків у своїх прикладах; модель буде узагальнювати.
- Будьте явними: Чітко визначте заголовки, щоб модель знала схему.
- Суворо перевіряйте: Використовуйте метадані формату, щоб виявити помилки генерації.
Відмовляючись від JSON для оперативних корисних навантажень, ви не просто зберігаєте токени — ви створюєте надійніший конвеєр ШІ.