Структурований вивід від LLM: як зробити невалідну відповідь фізично неможливою

💡 Усі статті, обговорення, новини про Mobile — в одному місці. Приєднуйтесь до Mobile спільноти!

API очікує дані, а не мову людини

Коли ми інтегруємо LLM, як ядро прийняття рішень у якийсь застосунок, робочий процес суттєво відрізняється від звичайного чат-бота. Модель тут не співрозмовник, а детермінований генератор конфігурацій. Ми очікуємо отримати чітку структуру, JSON чи XML.

Якщо це дійсно велика модель, то ще можна покластись на її уважність, хоча навіть така модель може одного разу не закрити дужку, чи не оголосити якесь поле. Коли ж ми хочемо інтегрувати невеличку модельку у середину застосунку, то на точність її виводу годі й рахувати. Але вихід є!

Apple проти llama.cpp: порівняння двох підходів до затискання LLM у рамки

У пошуках нових ідей я натрапив не це відео з WWDC 25, де доволі непогано пояснювались принципи Guided Generation, які Apple презентувала у своєму фреймворку Foundation Models.

Guided Generation (Apple)

З появою Apple Intelligence в iOS та macOS з’явилися макроси @Generable та @Guide, які дозволяють описувати Swift-структури для генеративних моделей.

import FoundationModels

@Generable
struct PhotoFilterRecipe {
    @Guide(description: "Brightness adjustment between -1.0 and 1.0")
    var brightness: Double

    @Guide(description: "Overall style preset")
    var style: StylePreset
}

enum StylePreset: String, Generable {
    case warmSunset
    case cinematicDrama
    case blackAndWhite
}

Swift-компілятор генерує схему, яку системна модель використовує для обмеження токенів прямо під час генерації.

Плюси:

  • Нуль байтів у бандлі: Модель та її рантайм вже є в операційній системі iOS.
  • Простота розробки: Жодних C++ файлів чи написання граматик вручну — ви просто описуєте Swift-структуру.
  • Нативна інтеграція: Працює безпосередньо з типами Swift.

Мінуси:

1) Купа обмежень:

  • Моделі iPhone 15 Pro й iPhone 16 або новіші моделі
  • Моделі iPad mini (A17 Pro) та iPad із чипом M1 і новіші моделі
  • Комп’ютери Mac із чипом Apple
  • Мовою пристрою має бути: англійська, данська, нідерландська, французька, німецька, італійська, норвезька, португальська, іспанська, шведська, турецька, китайська (спрощене письмо), китайська (традиційне письмо), японська, корейська і в’єтнамська. Також Apple Intelligence доступна тільки для певних регіонів. Чесно кажучи, в мене вдалось хоч щось запустити тільки у комбінації: регіон пристрою — Сполучені Штати, мова — English (US).

2) Доволі тупа, хоч і займає 3 мільярди параметрів

І після слова «тупа» я можу зловити жорсткий хейт, але мої чисельні дослідження показали, що багацько модельок з Hugging Face розміром у 1 мільярд параметрів, дають значно точніші відповіді.

2. GBNF Constrained Decoding (llama.cpp / GGML)

GBNF (GGML BNF) — це формат опису контекстно-вільних граматик, розроблений під керівництвом Георгія Герганова. Цей формат використовується в рушії інференсу моделей llama.cpp, а це означає, що ви з легкістю можете портувати цю технологію у свій iOS проєкт. Після чого Вам треба створити текстовий файл граматики, який передається прямо у семплер.

root  ::= "{" ws "\"style\"" ws ":" ws style ws "}"
style ::= "\"" ("black and white" | "golden hour" | "cinematic drama") "\""
ws    ::= [ \t\n\r]*

Плюси:

  • 100% контроль та кросплатформеність: Працює на будь-якому девайсі, де запускається C++ (iOS, Android, macOS, Linux).
  • Гнучкість опису: Можна описати будь-яку динамічну граматику, рекурсію, складні регулярні вирази чи кастомні текстові формати (не лише JSON).

Мінуси:

  • Треба шукати власну локальну LLM чи VLM, а це може роздути розмір застосунку на гігабайти!
ПараметрApple Guided GenerationGBNF Constrained Decoding
Гарантія формальної структури100% (32/32 влучність)100% (32/32 влучність)
Стриманість виводу (Sparse)0/32 (заповнює все сміттям)Висока (залежить від промпту)
Розмір застосунку (Bundle)0 МБ (системна модель)+Розмір вашої моделі (в моєму випадку це додало аж 2GB)
Сумісність з пристроямиТільки iPhone 15 Pro+ / M-чипиБудь-який iPhone (залежить від RAM)
Підтримка мов та екосистемТільки Swift / iOSC++, Swift, Rust, Python, Kotlin
Контроль над рантаймом«Чорна скринька»Повний доступ до логітів та семплінгу

Підсумок

Якщо ваша мета — швидкий прототип під нові моделі iPhone, де структура даних проста, Guided Generation від Apple допоможе швидко розпочати.

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

P.S.

Якщо комусь цікаво, як саме можна застосувати такий структурований вивід від локальної LLM, то можете подивитись мій застосунок Smart Filter для iPhone, iPad та Mac. Це фоторедактор, який замість ручних налаштувань, очікує на словесний опис від користувача, як саме той хоче відретушувати фото, і накладає відповідні модифікації. Можна попросити зробити світліше, насиченіше, чи просто зробити фото рожевим, і модель трансформує намір користувача у набір інструкцій для бібліотеки CoreImage.

Використання локальної моделі дозволило зробити застосунок автономним від інтернету і безкоштовним в плані використання токенів для LLM. Всі обчислення відбуваються прямо на вашому пристрої. Додатки такого типу дозволять суттєво зменшити навантаження на сервера всесвітньо відомих AI компаній, та зекономити грошей.

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі