Frontend представляет собой современное React-приложение на базе React Admin для управления и взаимодействия с RAG-системой через веб-интерфейс.
- Фреймворк: React v19
- UI библиотека: Material-UI (MUI) v7
- Админ-панель: React Admin v5
- Сборщик: Vite v6
- Типизация: TypeScript
- Состояние: Встроенный state management React Admin
- Управление документами и эмбеддингами
- Мониторинг состояния системы
- Просмотр логов и метрик
- Настройка провайдеров LLM
Центральная панель с ключевыми метриками:
- Количество обработанных документов
- Статистика по провайдерам
- Производительность системы
- Состояние подключений
Управление источниками документов:
- Просмотр списка документов
- Фильтрация по типам и источникам
- Поиск по содержимому
- Управление метаданными
Интерфейс для тестирования поиска:
- Ввод поисковых запросов
- Просмотр результатов
- Анализ релевантности
- Сравнение разных провайдеров
Настройка системы:
- Управление провайдерами LLM
- Настройка параметров эмбеддингов
- Конфигурация базы данных
- Управление API ключами
frontend/
├── src/
│ ├── forms/ # Формы для ввода данных
│ ├── generated/ # Автогенерированный код OpenAPI
│ ├── services/ # Сервисы для API вызовов
│ ├── App.tsx # Главный компонент приложения
│ ├── AppAuthProvider.ts # Аутентификация
│ ├── AppDataProvider.ts # Провайдер данных
│ ├── Layout.tsx # Основной лэйаут
│ ├── index.tsx # Точка входа
│ └── vite-env.d.ts # Типы для Vite
├── public/ # Статические файлы
├── index.html # HTML шаблон
└── vite.config.ts # Конфигурация Vite
cd frontend
npm installnpm run devnpm run buildnpm run serve# Порт сервера
PORT=23001
# Базовый URL бэкенда
VITE_API_URL=http://localhost:23000
# API ключ (если требуется)
VITE_API_KEY=your-api-key
# Режим разработки
NODE_ENV=developmentimport { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
server: {
port: 23001,
proxy: {
'/api': {
target: 'http://localhost:23000',
changeOrigin: true
}
}
}
})// src/resources/MyResource.tsx
import { List, Datagrid, TextField, EditButton } from 'react-admin';
export const MyResourceList = () => (
<List>
<Datagrid>
<TextField source="id" />
<TextField source="name" />
<EditButton />
</Datagrid>
</List>
);// src/App.tsx
import { MyResourceList } from './resources/MyResource';
function App() {
return (
<Admin dataProvider={dataProvider}>
<Resource name="my-resource" list={MyResourceList} />
</Admin>
);
}npm run generateimport { ChatService } from './generated';
const response = await ChatService.chatControllerCreateCompletion({
requestBody: {
message: 'Hello world',
provider: 'openai'
}
});import { Button, Box, Typography } from '@mui/material';
const MyComponent = () => (
<Box sx={{ p: 2 }}>
<Typography variant="h6">Заголовок</Typography>
<Button variant="contained" color="primary">
Кнопка
</Button>
</Box>
);import { createTheme } from '@mui/material/styles';
const theme = createTheme({
palette: {
primary: {
main: '#1976d2',
},
},
});npm run type-checknpm run lintnpm run formatnpm run buildФайлы будут собраны в директорию dist/.
# Скопировать файлы на сервер
scp -r dist/* user@server:/var/www/frontend/
# Или использовать Docker
docker build -t rag-frontend .
docker run -p 80:80 rag-frontend// backend/src/main.ts
app.enableCors({
origin: ['http://localhost:23001', 'https://your-domain.com'],
credentials: true,
});// src/services/api.ts
const apiClient = axios.create({
baseURL: import.meta.env.VITE_API_URL,
timeout: 10000,
});// Добавление токена авторизации
apiClient.interceptors.request.use(config => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = Bearer ${token};
}
return config;
});
## Мониторинг и отладка
### React DevTools
Установите расширение React Developer Tools для браузера для отладки компонентов.
### Redux DevTools
Для отладки состояния приложения (если используется Redux).
### Логирование
```typescript
// src/utils/logger.ts
export const logger = {
info: (...args: any[]) => console.info('[INFO]', ...args),
error: (...args: any[]) => console.error('[ERROR]', ...args),
warn: (...args: any[]) => console.warn('[WARN]', ...args),
};
-
CORS ошибка
Access to fetch at 'http://localhost:23000' from origin 'http://localhost:23001' has been blocked by CORS policyРешение: Проверьте настройки CORS в бэкенде.
-
API недоступен
Network Error: Failed to fetchРешение: Проверьте, запущен ли бэкенд и правильность URL.
-
Типы не генерируются
Command failed with exit code 1Решение: Проверьте доступность Swagger документации бэкенда.
- Используйте функциональные компоненты с хуками
- Разделяйте логику и представление
- Используйте TypeScript для типобезопасности
- Мемоизируйте тяжелые компоненты
- Используйте lazy loading для роутов
- Оптимизируйте рендеринг списков
- Валидируйте все входные данные
- Не храните чувствительные данные в localStorage
- Используйте HTTPS в production
Эта документация охватывает все аспекты frontend части RAG-системы и может служить руководством для разработчиков интерфейсов.