При разработке AI‑продукта мы столкнулись с неожиданной задачей. Выбрать LLM оказалось проще, чем выбрать интерфейс для работы с ней. Готовые AI‑чаты хорошо подходят для диалога с одной моделью, но начинают ограничивать продукт, если в нем появляются несколько агентов, сложные сценарии и промежуточные этапы работы. В этой статье опишем суть задачи, требования и разберем Open WebUI.

Основная цель MVP заключается в демонстрации замысла продукта и проверке его жизнеспособности. На этом этапе важно сконцентрироваться на реализации основных функций, внешний вид порой не так важен. Но в AI‑продуктах есть нюанс: даже для MVP интерфейс нередко становится частью логики продукта и будущей архитектуры.

Если раньше AI‑решения были, по сути, одним чатом, в рамках которого пользователь общался с одной нейросетью, то современные решения включают цепочку или граф AI‑агентов, каждый из которых выполняет свою работу отдельно от остальных, иногда взаимодействуя с пользователем. В этом случае UI становится полноценным командным центром: состояние системы, динамика размышлений и работы, вызов внутренних функций (tool calling), точки взаимодействия с пользователем (human‑in‑the‑loop) и многое другое.

Поэтому выбор UI‑инструмента влияет и на скорость прототипирования, и на конечный результат, получится ли у пользователя органично работать в системе. В этой статье мы расскажем, как выбирали инструмент для фронтенда в проекте «Банк идей».

Что такое «Банк идей»?

«Банк идей» — это мультиагентная система, отвечающая за анализ и подготовку идей сотрудников компании. Сотрудник в чат‑боте описывает проблему, которую хочет решить, подает на вход свою идею, и затем она проходит множество ИИ‑агентов, каждый из которых выполняет отведенную ему роль:

  • Критик подсвечивает слабые места.

  • Безопасник удаляет конфиденциальную информацию, прежде чем идея перейдет во внешнюю LLM.

  • И другие агенты.

Под ИИ‑агентом принято понимать систему на базе искусственного интеллекта с набором инструментов для решения задачи пользователя.

Работая над «Банком идей», мы столкнулись с необходимостью быстро реализовать фронтенд для демонстрации работы сервиса.

Техническая реализация

Для реализации «Банка идей» мы использовали LangGraph, который позволяет представить логику агентов в виде графа: инструменты агента = узлы, соединенные ребрами, выстраивающими пайплайн агента, а каждый агент = узел в общем графе‑оркестраторе.

«Банк идей» подразумевает плотное взаимодействие с пользователем по ходу изменения идеи. У нас было конкретное видение: нам нужен привычный и интуитивно понятный интерфейс: чат‑бот с внедрением кастомных компонентов.

Какие нестандартные компоненты требовались:

  • Доски. На моменте анализа идеи доменными агентами‑экспертами каждый из них должен был передавать свое мнение на доску, где пользователь мог их все прочитать, сравнить и даже внести свои правки. После прохождения этапа оценки доски оставались висеть в чате для контекста.

  • Отображение графа. Полный пайплайн графа‑оркестратора отрабатывает от 15 до 20 минут. Чтобы пользователь не думал, что сервис завис, мы хотели отображать процесс прохождения всех этапов работы агентов.

Обычный чат‑интерфейс хорошо работает, когда весь результат можно представить одним потоком сообщений. Но если система должна показывать состояние процесса, прерываться для подтверждения действий, выводить tool results в виде интерактивных компонентов и сохранять контекст работы, архитектура UI‑слоя тоже важна.

Требования к инструменту

Исходя из специфики задачи, мы сформулировали требования:

  • Open‑source решение.

  • Простота внедрения в уже созданную систему.

  • Возможность быстрой и удобной кастомизации.

  • Продовый и понятный интерфейс.

  • Поддержка многошагового взаимодействия.

  • Возможность отображать не только ответы модели, но и промежуточные состояния.

  • Пригодность не только для демо, но и для дальнейшего развития.

Для внутренних MVP можно позволить себе временный интерфейс. Но если MVP показывает хорошие результаты, бизнес почти всегда хочет быстро перейти к пилоту с реальными пользователями, а затем и к промышленному внедрению. Слишком жесткий UI‑каркас может сэкономить время на старте, но создать дорогой рефакторинг уже через несколько недель.

Что попробовали

Исходя из требований, список сократился до двух вариантов:

  • Open WebUI — самодостаточная open‑source платформа с готовым веб‑интерфейсом для работы с моделями, документами, инструментами и knowledge base.

  • Assistant‑UI — открытая TypeScript/React‑библиотека, которая дает production‑ready компоненты и инструменты для построения чата, но предполагает, что продуктовый интерфейс вы собираете внутри собственного приложения.

Это два инструмента для разных сценариев. Мы сравнивали их не напрямую, а по удобству для разработки и пользователя и полученному бизнес‑результату.

Open WebUI

Именно Open WebUI мы использовали для первого варианта «Банка идей» с минимальной архитектурой, и поначалу казалось, что это лучший выбор.

пример интерфейса
пример интерфейса

Плюсы Open WebUI:

  • Понятный и привычный интерфейс чат‑бота, который не нужно писать с нуля. Присутствуют привычные функции: прикрепление файлов, выдача подсказок для запросов, создание рабочих пространств и так далее.

  • Поддерживает любые модели: от локальных до API. Можно обращаться к своим собственным агентам и в любой момент переключать чаты, модели и агентов без потери контекста.

  • Интеграция RAG.

  • Добавление пользовательских инструментов (Tools) — Python‑скриптов в самом веб‑интерфейсе, которые выполняются на вашем сервере и действуют по запросу LLM.

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

Open WebUI дает богатую функциональность «из коробки». Для команд, которым нужно быстро поднять внутренний AI‑чат или демостенд без отдельной фронтенд‑разработки, это действительно удобный вариант.

Где Open WebUI начал ограничивать нас

  1. Безопасность. Tools и Functions выполняют на вашем сервере произвольный Python‑код, поэтому нужно следить, кому передаются права создавать и импортировать инструменты.

  2. Невозможность редактировать базовый интерфейс. Большинство функций (левая панель, прикрепление вложений) полезны для обычного чат‑бота, но избыточны для «Банка идей». Чтобы их убрать, пришлось бы вносить изменения в код самого Open WebUI, что привязывало бы нас к определенной версии.

  3. Детальная кастомизация не предполагается. Мы так и не нашли способа реализовать доски и другие компоненты так, как мы задумали.

  4. Ограниченная поддержка многошагового взаимодействия. Несмотря на event‑систему, Open WebUI не предоставляет полноценной модели многошагового взаимодействия «из коробки». Поддерживался один эндпоинт, и мы не могли разделить случаи, когда нужно начать пайплайн заново и когда нужно просто его продолжить после прерывания для взаимодействия с пользователем.

Именно здесь стало понятно, что Open WebUI хорош, когда не хочется писать код и нужен готовый привычный AI‑чат. Но если проект требует собственного UX со сложным состоянием, human‑in‑the‑loop и доменными компонентами, платформа начинает ощущаться не ускорителем, а рамкой, которую приходится постоянно обходить.

В следующей части так же разберем Assistant‑UI и подведем итог по тому, в каких ситуациях какой инструмент выбрать.