📡 AI в GraphQL: единый слой данных
🔥 Проблема: AI в компонентах — это хаос
Типичная интеграция AI сегодня выглядит так: компонент дергает /api/ai/generate, сам формирует промпт, обрабатывает стриминг, кэширует ответ в локальном стейте.
На маленьком проекте это терпимо. Но как только появляются несколько AI-функций (суммаризация, перевод, генерация), несколько провайдеров (OpenAI, Anthropic), и нужно комбинировать AI-ответы с данными из БД — фронтенд превращается в спагетти.
Каждый компонент тащит свою логику, дублируются запросы, теряется контроль над кэшированием, а расходы на токены растут.
Корень проблемы: AI воспринимается как исключение, а не как рядовой источник данных.
🏗️ Решение: GraphQL как единая точка входа Добавляем AI в GraphQL-схему как обычный data source. Фронтенд отправляет один запрос, где одни поля приходят из БД, другие — генерируются AI. Фронтенд не знает, где какое поле взялось.
❌ Без GraphQL - 2-3 отдельных запроса - Фронтенд знает про AI (URL, промпт) - Кэширование ручное, в стейте - Объединение данных на фронтенде - Переиспользование только в компоненте
✅ С GraphQL - Один запрос на всё - Фронтенд не знает про AI (просто поле) - Кэширование авто, Apollo Client - Объединение данных на бэкенде - Переиспользование везде, где нужны данные