Большинство BI Copilot, вышедших в 2024-2025, ударились об одну стену: вопрос "топ-5 самых прибыльных филиалов прошлого месяца" LLM переводит в синтаксически верный, но семантически неверный SQL. "Прибыльность филиала" интерпретирует LLM, а не определения организации. Решение — не другой бренд LLM, а семантический слой в середине.
Что такое семантический слой?
Семантический слой переводит между сырой формой таблиц и колонок и языком бизнеса. Три блока:
- EntityMap: какая таблица представляет какую бизнес-сущность.
- MetricDefinition: одна формула на один KPI.
- BusinessTerm: корпоративный глоссарий.
Рядом — ColumnPolicy (видимые/маскированные колонки) и сертифицированные few-shot-примеры.
Поток NL → SQL
Поток BI Copilot, построенного на семантическом слое:
- Intent: запрос данных, объяснение KPI, поиск глоссария?
- Retrieve: векторный поиск тянет EntityMap, MetricDefinition и прошлые примеры.
- Plan: LLM выдаёт QuerySpec JSON — таблицы, колонки, фильтры, группировка, сортировка. Не SQL.
- Validate: QuerySpec проверяется по семантическому слою и каталогу.
- Synthesize: QuerySpec компилируется в параметризованный read-only SQL.
- Execute: запуск в sandbox под выделенным read-only DB-аккаунтом.
- Mask: ColumnPolicy выполняет маскирование с учётом роли.
- Narrate: LLM-нарратор даёт нарратив с sanitization.
Почему прямая генерация SQL проваливается
LLM легко производит синтаксически верный SQL, но не знает, какая таблица — "филиал", как считается "прибыльность", какая колонка — PII. Три класса ошибок:
- Неверный JOIN: похожие названия, не та FK.
- Неверная метрика: net_amount вместо profit_amount.
- PII-утечка: ID клиента попадает в результат.
QuerySpec-промежуточный слой ставит структурный шлюз против этих ошибок.
Сертифицированные few-shots
Few-shot-примеры — живая память семантического слоя. Хороший стартовый набор для банка:
- "Топ-5 самых прибыльных филиалов прошлого месяца" → QuerySpec → SQL.
- "Уровень одобрения потребительских кредитов за неделю" → QuerySpec → SQL.
- "Объём портфеля PEP-сегмента YTD" → QuerySpec → SQL.
Хранятся по языкам (TR / EN / AZ / RU); LLM получает few-shot на языке вопроса.
Banking domain pack
Чтобы корректно отвечать на "в каких филиалах концентрируются VIP-клиенты", нужна организационная терминология. Domain pack: глоссарий BusinessTerm, набор MetricDefinition, сертифицированные few-shot. Banking-tr и banking-en стартуют с общей базы; каждый банк обогащает её своим словарём.
Операционная дисциплина
Конвейер NL → SQL становится операционным с тремя точками контроля:
- Suggestion inbox: новый QuerySpec/метрика — на approve admin-у.
- PromptAuditLog: каждая стадия в аудит; 90 дней KVKK или 7 лет RegulatedFinance.
- Confidence threshold: запросы с низкой уверенностью маршрутизируются человеку.
Заключение
Успех BI Copilot — это успех семантического слоя, а не LLM-бренда. 70% инвестиций — определения таблиц и метрик, 20% — few-shots, 10% — выбор модели. При таком соотношении NL-запрос становится устойчивой аналитической поверхностью, снимающей IT-бутылочное горлышко.
