инструменты 1 мин

Как заставить 8B-модель вызывать функции без косяков: компилятор грамматик GBNF

Разработчик собрал AI-агента на Rust + llama.cpp с 50+ инструментами и решил проблему невалидного JSON от маленьких моделей через компиляцию JSON Schema в GBNF-грамматики. Модель физически не может сгенерировать неправильный формат — сэмплер ограничивает токены на лету. Плюс семантический роутер сужает выбор с 50 до 3 инструментов за раз.

Показывает, как обойти главную слабость маленьких моделей (невалидный вывод) инженерным способом — без костылей и без API. Это путь к дешёвым и приватным AI-агентам.

Автор проекта Eris (Rust + llama.cpp) столкнулся с классической болью локальных AI-агентов: маленькие модели не умеют нормально генерировать JSON для вызова функций. Модель заворачивает вывод в markdown-блоки, придумывает несуществующие имена инструментов, забывает скобки, дописывает текст после JSON.

Решение — компилятор JSON Schema → GBNF (грамматики llama.cpp). Для каждого инструмента на старте сессии генерируется набор правил, который строго описывает структуру валидного JSON: какие ключи, какие типы, какие значения enum. Сэмплер llama.cpp использует эти правила на уровне токенов — модель физически не может сгенерировать невалидный символ.

Второй трюк — семантический роутер. Перед каждым вызовом LLM грамматика сужается только до тех 3-5 инструментов, которые релевантны текущему запросу (из 50 общих). Модель видит меньше вариантов → меньше путается.

Результат: Gemma 4 12B (помещается в 16 ГБ VRAM обычной 4080) стабильно вызывает функции, работает с 32k контекста и vision. Проект Apache 2.0, живой код с примерами.

function-callingllama.cppлокальные-агентыconstrained-generationrust

Автор: Никита Громов · Источник: reddit.com

Разработчикам. Готовый паттерн для локальных агентов: JSON Schema → GBNF компиляция + семантический роутер для сужения выбора инструментов. Код на Rust, интеграция с llama.cpp, работает с Obsidian-хранилищем как память. Можно форкнуть и адаптировать под свои инструменты.

Бизнесу. Показывает, как собрать production-ready AI-агента на локальной инфре без зависимости от API. 50+ интеграций (почта, календарь, веб, память) на обычной игровой карте — подходит для внутренних инструментов компаний, где важна приватность и контроль затрат.

Инвесторам. Тренд на локальные агенты набирает обороты — решения вроде Eris показывают, что 8-12B модели уже достаточно умны для реальных задач, если правильно ограничить пространство вывода. Рынок tooling для constrained generation и локальных агентов будет расти.

Хайп15
Реальная польза70
Заработать65
  • Форкнуть проект и собрать вертикального агента (например, для юристов, бухгалтеров) с готовыми интеграциями
  • Продавать GBNF-компилятор как SaaS для команд, которые строят агентов на llama.cpp
  • Создать маркетплейс готовых GBNF-грамматик для популярных API (Stripe, Gmail, Notion)
  • Консалтинг по миграции с OpenAI Function Calling на локальные модели с constrained generation
  • Интеграция в корпоративные продукты — агенты, которые работают внутри периметра без утечки данных
  • GBNF-грамматики — специфика llama.cpp, не работают с другими рантаймами (vLLM, TGI) — риск vendor lock-in
  • Семантический роутер требует дополнительной модели или эмбеддингов — усложнение инфры
  • Маленькие модели всё ещё слабее GPT-4 в reasoning — для сложных цепочек вызовов может не хватить
  • Проект в активной разработке, API может меняться — риск для production

Это один из тех постов, где инженер не продаёт хайп, а делится рабочим решением реальной проблемы. Constrained generation через GBNF — не новая идея, но здесь она применена правильно: компиляция схемы в грамматику на старте + сужение выбора через роутер. Результат — маленькая модель работает как надо, а не как попало.

Если вы строите агента и думаете «может, просто попросить модель возвращать валидный JSON через промпт» — не тратьте время. Промпты не работают надёжно на 8B, а GBNF работает. Проект живой, код чистый, Apache 2.0 — можно брать и адаптировать. Единственный минус — привязка к llama.cpp, но для локальных агентов это пока лучший выбор.

Ещё по теме

Комментарии