Conversational BI: Архитектура двухслойного LLM-агента с семантическим слоем

6 мин
Агентные системыLLMData BIАрхитектура

Внедрение генеративного AI в корпоративную аналитику долгое время шло по тупиковому пути прямой генерации кода (Text-to-SQL) одной монолитной языковой моделью. На практике этот подход сталкивается с тремя барьерами: галлюцинации в enterprise-метриках, риск SQL-инъекций и высокая стоимость запросов при обработке простых диалоговых фраз дорогой моделью.

Эффективное решение этих проблем — переход к мультиагентным системам с разделением ответственности и детерминированным контрактом данных. Ниже представлена архитектура Conversational BI, построенная по схеме Intent LLM, Smart LLM, Semantic Layer и Data Analysis Layer. Диалог поверх BI упирается в слой моделей, который предсказывает, а не только читает данные. Разработка систем предиктивной аналитики.

Обзор концептуальной архитектуры

Архитектура распределяет нагрузку между узкоспециализированными компонентами. Одна модель не справляется одновременно с диалогом, контекстом, структурой базы и генерацией кода. Система делит эти задачи на два слоя LLM и программную обвязку.

       [ Пользователь ]
               │
               ▼ (1. Живой язык: "Какая выручка по застройщику YoY?")
┌──────────────────────────────────────────────┐
│          1. Слой Диспетчеризации             │
│                (Intent LLM)                  │
├──────────────────────────────────────────────┤
│ • Память контекста и сессии пользователя     │
│ • Бизнес-ограничения темы (Локальный RAG)    │
│ • Реестр возможностей (Capabilities)         │
└──────────────────────┬───────────────────────┘
                       │
                       ▼ (2. Маршрутизация: только аналитический интент)
┌──────────────────────────────────────────────┐
│            2. Слой Аналитики                 │
│                (Smart LLM)                   │
├──────────────────────────────────────────────┤
│ • Валидация входных сущностей                │
│ • Выделение метрик, разрезов, фильтров       │
│ • Генерация Structured Output (Strict JSON)  │
└──────────────────────┬───────────────────────┘
                       │
                       ▼ (3. Детерминированный JSON-контракт)
┌──────────────────────────────────────────────┐
│           3. Семантический слой              │
│            (Semantic Layer / API)            │
├──────────────────────────────────────────────┤
│ • Валидация комбинаций параметров            │
│ • Динамическая сборка безопасного запроса    │
│ • Оркестрация Data Analysis Layer            │
└──────────────────────┬───────────────────────┘
                       │
                       ▼ (4. Безопасный SQL / Выполнение в DWH)
┌──────────────────────────────────────────────┐
│         4. Слой хранения и расчета           │
│             (Data Storage & OLAP)            │
└──────────────────────────────────────────────┘

Детальный разбор слоев и зон ответственности

1. Слой диспетчеризации (Intent LLM)

Этот слой работает как фронт-офис системы: он фильтрует входящий поток запросов и удерживает контекст беседы. Подходит легковесная модель с низкой ценой токена (GPT-4o-mini или Llama-3-8B). Она хранит историю переписки, поэтому если пользователь сначала спросил про Москву, а потом написал «а по застройщику?», слой соединяет оба запроса в один контекст. В локальной базе знаний лежат инструкции о темах, на которые система отвечать не должна, а реестр возможностей держит верхнеуровневый список инструментов: модель знает, что система работает с аналитикой, но не видит имён таблиц и колонок. На приветствии или смолл-токе слой отвечает сам, а при аналитическом интенте вызывает инструмент (Tool Calling) и передаёт задачу на второй слой.

2. Слой аналитики (Smart LLM)

Это бэк-офис системы, изолированный от пользователя. Его единственная задача — переводить живую речь в жёсткую структуру данных. Здесь работает тяжёлая модель с развитым логическим мышлением (GPT-4o или DeepSeek-V3), настроенная на Structured Output. Запрос делится на четыре части куба данных: метрики (выручка, прибыль, EBITDA, продажи), разрезы (город, регион, застройщик), фильтры (метро рядом, дата стройки, статус сдачи) и сравнения (год к году, месяц к месяцу). На выходе — только валидный JSON по строгой схеме, без свободного текста.

3. Семантический слой (Semantic Layer)

Это критический компонент на классическом бэкенд-коде, без ИИ. Он отвечает за безопасность и бизнес-логику. При старте бэкенд сканирует базу данных и загружает матрицу разрешённых параметров. Полученный от Smart LLM JSON проверяется на совместимость параметров: если метрику выручки пытаются посчитать в неверном разрезе, слой прерывает запрос до обращения к базе. Доступ модели к структуре базы закрыт, она оперирует абстрактными терминами, а безопасный параметризованный SQL собирает сам слой.

4. Слой анализа и хранения данных (Data Analysis Layer)

Финальный этап агрегации. Семантический слой отправляет безопасный запрос в DWH или OLAP-куб (ClickHouse, PostgreSQL, Greenplum) и получает сырой массив данных. Метрики живут в ERP, а не в BI-кубе; интеграция решает, откуда их брать. Интеграция ИИ с ERP.

Жизненный цикл одного запроса (Data Flow)

Рассмотрим обработку аналитического запроса в динамике:

  1. Пользователь пишет в чат: «Какая выручка по застройщику в Москве в сравнении год к году?»
  2. Intent LLM определяет аналитический интент, собирает контекст и передает очищенный запрос на второй слой.
  3. Smart LLM анализирует текст и выдает JSON:
    {
      "metrics": "Revenue",
      "dimensions": ["zastroyshik"],
      "filters": [
        {"field": "city", "operator": "EQUALS", "value": "Moskva"}
      ],
      "comparison": "YoY"
    }
  4. Семантический слой проверяет JSON по матрице правил, собирает безопасный SQL-шаблон и отправляет его в базу данных.
  5. База данных выполняет расчет и возвращает цифры: [{zastroyshik: "ПИК", revenue_2025: 100M, revenue_2026: 112M, change: +12%}].
  6. Обратный поток:
    • Данные возвращаются в Smart LLM, которая формулирует текстовый инсайт («В Москве выручка застройщика ПИК выросла на 12% год к году…») и указывает тип UI-компонента ({"ui_component": "LineChart"}).
    • Intent LLM отправляет пользователю готовый виджет с графиком и пояснением.

Архитектурные преимущества

Модель передаёт семантическому слою параметры выборки и не вычисляет значения сама, поэтому цифры предсказуемы, а неверный запрос возвращает ошибку вместо галлюцинации. По нашим логам, около трети сообщений в корпоративных чатах — это приветствия, уточнения или опечатки, и маршрутизация их в дешёвый Intent LLM экономит до 60% бюджета на токены. Прямой доступ языковой модели к командам СУБД закрыт, что снимает риск SQL-инъекций. При изменении схемы базы не нужно переобучать модель: достаточно обновить маппинг в семантическом слое. Двухслойная схема — это проект разработки: семантический слой, API и оркестрация запросов. Разработка программного обеспечения.

Ограничения

Семантический слой не настраивается один раз и навсегда. При изменении структуры DWH маппинг обновляют вручную, и без владельца слоя он устаревает за несколько релизов. Набор доступных запросов ограничен описанной матрицей: ad-hoc-вопрос вне неё система не выполнит, даже если данные в базе есть.

Классификатор интентов ошибается на новых формулировках метрик. Если пользователи начинают называть выручку «оборотом», часть запросов уходит не в тот слой, и их приходится размечать заново. Две модели вместо одной дают два счёта. Дешёвый Intent LLM не отменяет расход на Smart LLM для сложных запросов, и экономия появляется только на потоках, где простых фраз около трети.

Поговорите о задаче

Разберём вашу задачу и покажем, что уже работает у клиентов из вашей отрасли.

Оставить заявку