Source: https://aiprimetech.io/ru/blog/ui-open-source-ai/ 14 июня, 2026 · 8 мин · Открытый исходный код # Ui: подробный разбор популярного ИИ-проекта для разработчиков (2026) A Автор: [AI Prime Tech](https://aiprimetech.io/ru/) · При участии ИИ ## Ui: подробный разбор популярного ИИ-проекта для разработчиков (2026) В 2:17 утра с моделью всё было в порядке. С продуктом — нет. Наш ассистент с дополненной поиском генерацией выдавал ответы, подкреплённые источниками, примерно за 1.8 секунд по p95, корректно передавал токены потоком и показывал достойные результаты оценок. Но интерфейс вокруг него тормозил работу команды: оформление сообщений в чате было несогласованным, ссылки на источники было трудно просматривать, индикаторы загрузки перескакивали, выдвижная панель настроек нарушала навигацию с клавиатуры, а каждое «быстрое исправление интерфейса» превращалось в очередной спор о дизайн-системе. Именно эту инженерную задачу shadcn-ui/ui успешно решает: не «сделать ИИ умнее», а упростить создание, сопровождение и изменение интерфейса продукта вокруг ИИ-систем. Репозиторий GitHub shadcn-ui/ui стал одним из важнейших UI-проектов с открытым исходным кодом для команд, создающих современные веб-приложения, включая ИИ-продукты. Он описывает себя как «набор красиво оформленных, доступных компонентов и платформу распространения кода» с поддержкой популярных фреймворков и тем, связанных с base-ui, components, laravel, nextjs, radix-uiи react. Ключевая идея обманчиво проста: вместо того чтобы устанавливать закрытую библиотеку компонентов как зависимость и бороться с её абстракциями, вы копируете исходный код компонентов в свой проект. Он принадлежит вам. Вы можете его редактировать. Вы можете удалить всё ненужное. Эта модель особенно важна для ИИ-приложений, где интерфейс — не просто оформление. Это панель управления промптами, инструментами, трассировками, загрузками файлов, ссылками на источники, согласованиями, потоковым выводом, восстановлением после ошибок и обратной связью от пользователей. ## Инженерная задача: ИИ-приложениям быстро нужен интерфейс уровня полноценного продукта Большинство команд, разрабатывающих ИИ-приложения, недооценивают масштаб интерфейса. «Простое приложение для чата» обычно превращается в: - Ленту сообщений с потоковым выводом - Элементы управления промптами и системными инструкциями - Выбор модели среди GPT, Claude, Gemini, Llama, Qwen, DeepSeek, Kimi или внутренних конечных точек - Загрузку файлов и отображение состояния их разбора - Отображение источников, найденных при поиске - Просмотр вызовов инструментов - Панели оценки и отладки - Состояния аутентификации и оплаты - Процессы согласования с человеком - Обработку ошибок из-за ограничений частоты запросов, тайм-аутов, переполнения контекста и фильтров безопасности Бэкенд может быть сложнее интеллектуально, но именно фронтенд принимает на себя все шероховатости, которые пользователи ощущают на практике. Традиционные библиотеки компонентов помогают, но часто создают другие издержки: - Вы зависите от абстракций на уровне пакета, которые непросто изменить. - Переопределения стилей становятся хрупкими. - Доступность обеспечивается лишь частично, если вы не понимаете базовые компоненты. - Вы поставляете больше кода, чем необходимо. - Ваше приложение начинает выглядеть как любое другое приложение на той же библиотеке. shadcn-ui/ui предлагает иной подход: компоненты — это не продукт, который вы используете во время выполнения, а исходный код, который вы включаете в свой проект. На практике это меняет модель сопровождения. Если отступы кнопок не подходят для вашего процесса проверки с помощью ИИ, вы редактируете components/ui/button.tsx. Если вашему меню команд нужны индикаторы задержки моделей, вы изменяете его напрямую. Если карточка источника должна показывать оценки релевантности поиска или фрагменты документов, вы полностью контролируете разметку. Это звучит обыденно, пока вам не приходится каждую неделю выпускать специализированный ИИ-интерфейс. ## Что означает shadcn-ui/ui на самом деле Проект лучше всего рассматривать как две связанные составляющие: - Коллекция компонентов - Платформа распространения кода Коллекция компонентов предоставляет переиспользуемые строительные блоки UI: кнопки, диалоговые окна, карточки, поля ввода, таблицы, меню, выдвижные панели, формы, палитры команд и другие подобные примитивы, встречающиеся в современных веб-приложениях. Необычным этот проект делает модель распространения. Вместо такого подхода: ``` npm install some-ui-library ``` и импорта компонентов с непрозрачной реализацией из node_modules, типичный shadcn/ui рабочий процесс добавляет исходные файлы компонентов в ваше приложение: ``` npx shadcn@latest init npx shadcn@latest add button card dialog input textarea ``` Затем вы импортируете их из своего локального проекта: ``` import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle, } from "@/components/ui/card" ``` Разница здесь архитектурная, а не косметическая. Компонент становится частью вашей кодовой базы. Вы можете изучать его, проводить рефакторинг, адаптировать к своим дизайн-токенам или интегрировать в соответствии с соглашениями своего фреймворка. Экосистема проекта часто пересекается с React, Next.js, Radix UI, утилитарными классами в стиле Tailwind CSS и интеграциями с фреймворками. Среди тем репозитория также есть Laravel, что отражает более широкую цель: это не просто набор React-компонентов, а подход к распространению кода для переиспользуемого UI в разных стеках приложений. ## Архитектура: компоненты в вашей кодовой базе вместо абстракций времени выполнения Проще всего объяснить архитектуру через сравнение границ владения кодом. | Подход | Где находятся компоненты | Модель настройки | Модель обновления | Лучше всего подходит для | Традиционный пакет UI | node_modules | Пропсы, темы, переопределения | Обновление пакета | Стандартизированные приложения с ограниченными возможностями настройки | Примитивы без готового визуального оформления | node_modules плюс разметка приложения | Самостоятельная сборка поведения | Обновление пакета | Команды с глубокой экспертизой во фронтенде | shadcn/ui стиль | Ваше дерево исходного кода | Прямое редактирование кода компонентов | Повторное добавление, сравнение изменений или ручное обновление | Продуктовые команды, которым нужны скорость и контроль | Полностью собственная дизайн-система | Ваше дерево исходного кода / пакеты | Полное владение | Внутренний процесс | Крупные организации с командами, отвечающими за дизайн-системы shadcn-ui/ui занимает промежуточное положение между библиотекой компонентов и стартовым набором для дизайн-системы. Вы получаете работающие компоненты, но проект не предполагает, что они должны оставаться неизменными. Типичный стек выглядит так: ``` app/ chat/ page.tsx components/ ai/ model-picker.tsx message-list.tsx citation-card.tsx tool-call-panel.tsx ui/ button.tsx card.tsx dialog.tsx input.tsx sheet.tsx textarea.tsx lib/ ai/ stream.ts models.ts retrieval.ts ``` Ключевая граница — components/ui. Это универсальные примитивы. Ваши интерфейсы, специфичные для ИИ, располагаются уровнем выше, в components/ai. Полезное практическое правило: - components/ui: универсальные, переиспользуемые, без излишеств - components/ai: специфичные для продукта сценарии взаимодействия с ИИ - lib/ai: маршрутизация моделей, потоковая передача, поиск, выполнение инструментов - app/: маршрутизация фреймворка, серверные действия, компоновка страниц Это не позволяет превратить примитивы UI в свалку поведения, специфичного для отдельных моделей. ## Реалистичный рабочий процесс: создание консоли проверки ответов ИИ Предположим, вы создаёте внутреннюю консоль проверки ответов ИИ для обращений в службу поддержки. Бэкенд выполняет поиск по предыдущим обращениям и готовит предлагаемые ответы с помощью модели, такой как GPT-5.5, Claude Sonnet 4.6, Gemini 3, или эндпоинта открытой модели. Фронтенд должен показывать: - Обращение клиента - Сгенерированный черновик - Найденные подтверждающие материалы - Индикатор уверенности - Действие для одобрения человеком - Выбор модели для отладки Начните с добавления базовых компонентов UI: ``` npx shadcn@latest init npx shadcn@latest add button card badge textarea select separator skeleton ``` Затем явно задайте конфигурацию модели. Не скрывайте её в подписях интерфейса. ``` // lib/ai/models.ts export type ModelId = | "gpt-5.5" | "claude-sonnet-4.6" | "gemini-3" | "qwen" | "deepseek" export const models: Array<{ id: ModelId label: string contextHint: string }> = [ { id: "gpt-5.5", label: "GPT-5.5", contextHint: "General reasoning and agentic workflows", }, { id: "claude-sonnet-4.6", label: "Claude Sonnet 4.6", contextHint: "Long-form drafting and coding workflows", }, { id: "gemini-3", label: "Gemini 3", contextHint: "Multimodal and general assistant tasks", }, { id: "qwen", label: "Qwen", contextHint: "Open-model route", }, { id: "deepseek", label: "DeepSeek", contextHint: "Open-model route", }, ] ``` Теперь соберите панель проверки из локальных компонентов UI: ``` import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle, } from "@/components/ui/card" import { Textarea } from "@/components/ui/textarea" type Evidence = { title: string snippet: string score?: number } export function TicketReviewCard({ ticket, draft, evidence, isStreaming, }: { ticket: string draft: string evidence: Evidence[] isStreaming: boolean }) { return ( AI Draft Review
Customer ticket

{ticket}

{isStreaming ? "Generating" : "Draft ready"}