В 2026 году иметь AI-агента без вменяемого UI — всё равно что купить Ferrari и поставить на него колёса от телеги. Агенты научились писать код, заказывать пиццу, резервировать столики, но если их выхлоп завёрнут в чёрный ящик — пользователь просто не поверит этой магии. CopilotKit и протокол AG-UI пытаются решить именно это: дать разработчикам стандартный способ втащить агента в интерфейс так, чтобы тот не казался глючным демо.
«Мы вложили $5 млн в открытый стандарт для агентных UI». Именно такую новость я прочитал в марте 2026, и сразу захотелось покопаться в деталях.
В чём соль: CopilotKit как реактивный мостик
CopilotKit — это React-библиотека, которая превращает обычный интерфейс в копайлот: поле ввода, контекстная панель, хинты. Никто не хочет писать свой ChatUI с нуля — а CopilotKit даёт готовые компоненты для AI-взаимодействия в стиле GitHub Copilot или ChatGPT. Но без протокола каждый такой копайлот живёт своей жизнью: одни дёргают API по REST, другие через WebSocket, третьи — вообще через iframe.
Тут и врывается AG-UI — открытый протокол, который стандартизирует, как агент «говорит» с фронтендом. Streaming токенов, state sharing (агент меняет поля формы, а UI подхватывает), approval-точки для человеко-в-цикле. CopilotKit — первый крупный потребитель этого протокола, но он не единственный: подключайтесь, кто хочет.
Как выглядит общение агента с UI по AG-UI
Представьте типовой сценарий: пользователь заказывает столик через интерфейс ресторана. Агент должен подтвердить время, проверить доступность, сгенерировать подтверждение. Без протокола вы пишете кастомный стейт-менеджмент, синхронизируете стриминг с SSE, обрабатываете конфликты. AG-UI делает это встроенным:
- Streaming — фраза агента льётся токен за токеном, UI обновляется постепенно, без моргания.
- State sharing — агент устанавливает дату и время в стейт интерфейса, React-form получает готовые значения.
- Human-in-the-loop — перед бронированием агент запрашивает подтверждение пользователя через виджет approval.
- Tool calls — вызов внешних API (например, бронирование в OpenTable) тоже идёт через протокол, UI видит статус и прогресс.
CopilotKit оборачивает этот протокол в хуки useCopilotAction и useCopilotChat. На практике это выглядит как обычный React-код, но за кулисами — машина состояний AG-UI.
Сравнение с альтернативами: кто ещё строит агентные UI?
| Решение | Стандартизация | Human-in-loop | Экосистема |
|---|---|---|---|
| CopilotKit + AG-UI | Открытый протокол | Встроен | React, Next.js |
| Vercel AI SDK (useAssistant) | Проприетарный | Через tool calls | React, Svelte, Vue |
| LangChain Callbacks | Только stream, нет state | Требуется костыли | Любой фронт |
| OpenAI Realtime API | Закрытый (WebRTC) | Неявный | Любой фронт |
Vercel AI SDK — хороший, но завязан на их бэкенд. CopilotKit с AG-UI — открытый, можно подцепить любого агента: от n8n с OpenRouter до кастомного Python. LangChain умеет стримить, но синхронизация состояния — боль. AG-UI решает это на уровне протокола.
Пример из жизни: сборщик заказа с подтверждением
Допустим, мы делаем интерфейс для агента, который собирает продуктовую корзину. Агент на бэкенде (можно на Python с LangGraph, Plano или OpenAI Agent SDK) присылает через AG-UI:
- Поток текста: «Я нашёл сыр за 300 руб и хлеб за 40…»
- Объект состояния:
{ cart: [{item: 'cheese', price: 300, qty: 1}] } - Запрос на действие: пользователь должен подтвердить корзину.
CopilotKit рендерит это в реальном времени: корзина обновляется без перезагрузки, кнопка «Подтвердить» появляется только когда агент запросил. Если пользователь отменяет — агент получает событие и корректирует.
Важно: AG-UI не требует, чтобы агент работал на той же машине. Протокол — HTTP/SSE, так что можно подключать локальных агентов или облачных через единый интерфейс.
Сложные сценарии: мультиагент и вложенные подтверждения
Когда у вас много агентов — один ищет товары, другой проверяет скидки, третий оформляет — протокол AG-UI позволяет агрегировать их стримы в единый UI. CopilotKit поддерживает мультитреды: можно видеть, какой агент что делает, и переключаться между ними. Human-in-the-loop работает на уровне каждого треда — агент не делает финальное действие без клика.
Звучит круто, но есть нюанс: AG-UI пока молодой. Документация CopilotKit подтянулась только под React. Если вы пишете на Kotlin Multiplatform или Vue — придётся либо делать адаптер, либо ждать. Но протокол открыт, спецификация на GitHub — возможно, скоро появятся клиенты и для других фреймворков.
Кому это вообще нужно?
- Стартапам, которые хотят встроить AI-ассистента в свой продукт за неделю, а не за полгода.
- Командам, уже использующим агентов, но страдающим от разрозненных UI (например, Open WebUI для администрирования, а CopilotKit — для пользовательского интерфейса).
- Разработчикам инструментов с human-in-the-loop — протокол делает approval-механики из коробки.
- Тем, кто пишет GUI-агентов — GUI-агенты видят пиксели, но для передачи намерения AG-UI — идеальный канал.
Если вы считаете, что агент может просто писать ответ в JSON и фронт сам всё нарисует — вы правы, но только для простых кейсов. Как только появляется стриминг, ошибки, ожидание подтверждения — кастомный код превращается в ад. CopilotKit с AG-UI берут эту боль на себя.
Лично меня бесит, когда «агентный UI» — это просто чат-окно на весь экран. CopilotKit даёт возможность встроить ассистента как панель, не ломая основной интерфейс. А AG-UI — это попытка сделать так, чтобы эти панели говорили на одном языке с агентами. Если протокол приживётся (а инвестиции это поддерживают), через год мы перестанем писать велосипеды для стриминга состояния.