Проблема enterprise-генерации SQL
Большие языковые модели (LLM) часто генерируют «правдоподобный», но нерабочий SQL. Для корпоративного сектора это неприемлемо: нужны не просто тексты, а гарантированно валидные запросы, соответствующие схеме БД и политикам безопасности (RBAC). Традиционные методы пост-обработки или мягких ограничений не дают строгих гарантий и замедляют генерацию.
Техническое ядро GRID
GRID (Grammar-Railed Decoding) решает проблему через ограниченное декодирование на основе грамматики. Ключевая инновация — использование LALR(1) парсера как оракула допустимых префиксов. Движок вычисляет маски следующих токенов, опираясь на состояние лексера и стек парсера, а не на историю токенов. Это позволяет:
- Исключить запрещенные токены: Ролевой доступ (RBAC) и ограничения схемы встраиваются в грамматику. Запрещенные глаголы и идентификаторы физически недоступны на уровне маски.
- Обеспечить кэшируемость: Использование байтового трие (byte-level trie) с разделением на контекстно-зависимые и независимые части гарантирует корректность ключей кэша.
- Гарантировать завершение: Алгоритм обладает свойствами soundness, completeness и termination.
Производительность и бенчмарки
Ядро GRID написано на Rust, что обеспечивает экстремально низкие задержки. Стоимость проверки одного токена (guard cost) остается плоской (position-flat) даже при длине последовательности 16 000 токенов. В сравнении с популярным инструментом llguidance, GRID показывает лучшие результаты на перцентилях p50 и p90.
| Метрика | Результат / Характеристика |
|---|---|
| Задержка маски токена | 3.6–6.7 мкс (медиана) |
| Сравнение с llguidance | Превосходство на p50 и p90, 0 ложных отказов |
| Точность (Spider, 0.5B) | +13 пунктов execution-accuracy при constrained decoding |
| Исполняемость (Spider, 7B) | 94.5% после одного шага проверки (checker-guided repair) |
| Аудит | Hash-chained trail: 100% обнаружение подделок |
Ограничения и выводы
Авторы честно указывают пределы применимости: GRID не гарантирует верность распределению (distribution faithfulness), не поддерживает RBAC на уровне отдельных столбцов (только на уровне токенов/терминалов) и работает только с языками, описываемыми LALR(1). Тем не менее, для генерации SQL в enterprise-среде это шаг от «попытка угадать» к «доказуемая корректность».
Источник: arXiv cs.AI ↗
