Дата публикации
ai_products

Как фронтенд берёт на себя интеграцию LLM: опыт DataLens и архитектура «нейро»-фич

Что нового

Команда DataLens в Yandex Cloud добавила в BI‑систему «Нейроаналитик» — чат‑ассистента на базе LLM, который:

  • строит графики по запросу пользователя;
  • пишет формулы для расчётов;
  • помогает решать аналитические задачи прямо в интерфейсе дашборда.

Главное не сам ассистент, а подход к его интеграции:

  • первый этап работы с LLM взяла на себя фронтенд‑команда;
  • интеграция вынесена в BFF‑слой (backend for frontend) на Node.js;
  • основной бэкенд DataLens при этом не меняли.

Для демонстрации подхода автор собрал открытый демо‑проект:

  • монорепозиторий на GitHub;
  • сервер на Express;
  • клиент на React;
  • слева — упрощённый дашборд, справа — чат с ИИ‑ассистентом;
  • типовой сценарий: пользователь просит, например, «топ‑5 продуктов», ассистент вызывает функцию getChartData, получает данные и формирует ответ.

Для интерфейса используется AIKit из Gravity UI — готовый UI‑кит для чат‑интерфейсов с корректной отрисовкой ответов и поддержкой стриминга.

Как это работает

Кто такие «фронтендеры» в этом контексте

В DataLens под фронтенд‑командой понимают не только людей, которые пишут React‑компоненты. Это скорее фуллстек‑инженеры с упором на UX и JavaScript/TypeScript:

  • отвечают за браузерный код и серверный код на Node.js;
  • поддерживают собственные CI/CD‑пайплайны;
  • делают DevOps для задач фронтенда;
  • но приоритет — интерфейсы и пользовательский опыт.

Архитектура с BFF

Между клиентским приложением и LLM добавляется слой BFF:

  • реализован на Node.js (в демо — Express; можно использовать Bun или другой рантайм, если команда готова его поддерживать);
  • живёт в зоне ответственности фронтенда как «бэкенд для фронтенда».

Что делает BFF:

  • хранит ключи доступа к LLM;
  • общается с API моделей;
  • реализует rate limiting;
  • настраивает CORS;
  • пишет логи и метрики;
  • инкапсулирует логику работы с LLM (prompt‑инг, стриминг, разбор ответов);
  • предоставляет фронтенду удобные эндпоинты, уже заточенные под конкретный UI.

При этом основной бэкенд DataLens остаётся как есть:

  • не нужно менять существующие сервисы на этапе экспериментов с ИИ;
  • бизнес‑логика и хранение данных не трогаются;
  • BFF просто обращается к уже существующим API и собирает нужный контекст.

Четыре ключевых компонента интеграции

Чтобы добавить LLM в продукт силами фронтенда, нужны четыре составляющие:

  1. UI‑кит — готовые компоненты для чат‑интерфейса.
  2. API SDK — библиотека для общения с LLM.
  3. Тулинг (tools) — механизм, который позволяет модели вызывать функции и получать данные из системы.
  4. Контекст — данные и состояние приложения, которые передаются вместе с запросом к LLM.

1. UI‑кит

Для фронтенда критично быстро собрать рабочий чат:

  • есть готовые решения вроде AI Elements от Vercel, Assistant UI, prompt‑kit, shadcn‑chatbot‑kit;
  • часть из них перегружена абстракциями и сложна в интеграции, особенно если нужно работать с опенсорс‑LLM;
  • важны не только фичи (стриминг, markdown, подсветка кода), но и простота встраивания в существующий дизайн‑систему.

В DataLens используют AIKit от Gravity UI:

  • визуально согласован с остальными компонентами Gravity UI;
  • корректно рисует ответы ассистента;
  • из коробки умеет работать с потоковыми ответами LLM.

2. API SDK

SDK берёт на себя техническую часть общения с LLM:

  • формирование запросов;
  • управление сессией диалога;
  • обработку стриминга токенов;
  • работу с ошибками и таймаутами.

Во фронтенд‑подходе SDK используют в BFF‑слое:

  • браузер общается только с BFF;
  • BFF — с LLM через SDK;
  • ключи и чувствительные настройки остаются на сервере.

3. Тулинг: функции и доступ к данным

Чтобы ассистент не просто «болтал», а реально помогал с аналитикой, ему нужны инструменты:

  • функции, которые модель может вызывать по ходу диалога;
  • доступ к данным дашборда, фильтрам, метрикам.

В демо‑проекте это реализовано так:

  • в BFF описывают функцию getChartData;
  • LLM получает в промпте описание этой функции и аргументов;
  • когда пользователь спрашивает, например, «покажи топ‑5 продуктов», модель решает, что нужно вызвать getChartData;
  • BFF выполняет функцию, получает данные от BI‑бэкенда и передаёт их обратно в LLM;
  • модель формирует человекочитаемый ответ и, при необходимости, структуру для визуализации.

Этот подход масштабируется:

  • можно добавить функции для создания графиков, изменения фильтров, расчёта метрик;
  • можно давать ассистенту доступ к метаданным (описания таблиц, полей, бизнес‑термины).

4. Контекст

Контекст — это всё, что модель должна «знать» о состоянии продукта и пользователя в момент запроса:

  • какие дашборды открыты;
  • какие фильтры применены;
  • какие метрики и измерения доступны;
  • в каком формате продукт ожидает данные для визуализации.

Преимущество фронтенда:

  • именно в интерфейсе сходятся данные из разных бэкендов;
  • BFF легко собрать нужный контекст, не трогая исходные сервисы;
  • можно дозапрашивать недостающие данные по уже существующим API.

Что это значит для вас

Когда имеет смысл отдавать интеграцию LLM фронтенду

Подход, который использует DataLens, полезен, если:

  • вы хотите быстро проверить, как ИИ впишется в продукт, без долгих изменений в основном бэкенде;
  • у вас уже есть фронтенд‑команда, которая умеет работать с Node.js и BFF;
  • в интерфейсе сходятся данные из нескольких бэкендов, и именно там проще собрать контекст для LLM;
  • вам важно контролировать UX: от промптов до того, как именно ассистент взаимодействует с UI.

Фронтенд‑подход даёт:

  • быстрые итерации — можно быстро менять промпты, поведение ассистента, набор инструментов;
  • минимум координации на старте — BFF на Node.js не блокирует другие команды;
  • более тесную связку ИИ и интерфейса — команда, которая проектирует UX, одновременно управляет поведением ассистента.

Когда лучше подключать основной бэкенд

Полностью без бэкенда не получится. По мере взросления ИИ‑фичи появятся задачи, которые логичнее решить в основных сервисах:

  • тяжёлые расчёты и агрегации на больших данных;
  • сложные сценарии авторизации и аудита действий ассистента;
  • кэширование результатов на уровне доменных сервисов;
  • интеграция с внутренними шинами данных и очередями.

Практичный сценарий:

  1. Фронтенд‑команда поднимает BFF и собирает первый рабочий прототип ассистента.
  2. Продукт тестирует сценарии, собирает фидбек, уточняет, где ИИ реально полезен.
  3. Когда сценарии стабилизируются, часть логики переносят в основной бэкенд, если это даёт выигрыш в надёжности и производительности.

Для каких задач это особенно полезно

Подход хорошо работает:

  • в BI и аналитике, где много дашбордов и сложные фильтры;
  • в продуктах с насыщенным интерфейсом, где ассистент должен понимать контекст экрана;
  • в SaaS‑сервисах, где нужно быстро выкатывать и обкатывать ИИ‑фичи на ограниченной аудитории;
  • в внутренних корпоративных инструментах, где фронтенд‑команда часто ближе всего к пользователям.

Где он может не подойти:

  • если фронтенд‑команда ограничена только браузерным JavaScript и не готова поддерживать серверный код;
  • если архитектура запрещает отдельный BFF‑слой и все внешние интеграции жёстко контролируются основным бэкендом;
  • если продукт критичен по задержкам и каждое лишнее сетевое плечо нежелательно — тогда часть логики стоит сразу переносить ближе к данным.

Доступность

В материале описан архитектурный подход и демо‑проект. Конкретный выбор LLM и её провайдера зависит от вашей инфраструктуры и регуляторных ограничений. Для российских команд часто важен вопрос доступности без VPN и размещения данных в нужной юрисдикции — это нужно учитывать при выборе поставщика LLM.

Место на рынке

Материал описывает не конкретную модель вроде GPT‑4o или Claude 3, а способ интеграции LLM в продукт. Сравнивать его по скорости или цене с конкретными моделями некорректно:

  • BFF‑архитектура совместима и с коммерческими LLM, и с опенсорс‑решениями;
  • смена провайдера LLM в такой схеме происходит в основном в BFF‑слое и SDK;
  • фронтенд‑команда контролирует, какие именно API использовать и как строить промпты.

По сути, это конкурент не другим моделям, а классическому подходу «всё делает бэкенд». В сравнении с ним:

  • фронтенд‑первый подход ускоряет эксперименты с ИИ‑фичами;
  • снижает входной порог для команд, у которых сильный фронтенд и загруженный бэкенд;
  • требует от фронтенда большей ответственности за безопасность, хранение ключей и эксплуатацию BFF.

Как запустить

Автор выложил демо‑проект на GitHub в виде монорепозитория:

  • сервер на Express (Node.js);
  • клиент на React;
  • интерфейс — упрощённая BI‑система с дашбордом и чат‑ассистентом;
  • для интерфейса используется Gravity UI и AIKit.

Типовой сценарий использования в демо:

  1. Пользователь открывает страницу: слева видит дашборд, справа — чат.
  2. Пишет в чат запрос: например, «покажи топ‑5 продуктов по выручке».
  3. BFF получает запрос, формирует промпт для LLM и отдаёт модели описание доступной функции getChartData.
  4. LLM решает вызвать функцию и возвращает структуру вызова.
  5. BFF выполняет getChartData, получает данные и передаёт их обратно в LLM.
  6. LLM формирует текстовый ответ и, при необходимости, структуру для визуализации.
  7. Фронтенд отображает ответ ассистента и обновлённый график.

Код в статье не приводится целиком, но структура проста для любого разработчика, знакомого с Express и React. Идея в том, что базовую интеграцию с LLM фронтенд‑команда может реализовать самостоятельно, а дальше наращивать сложность: добавлять новые функции, расширять контекст, подключать продвинутые сценарии аналитики.


Читайте также