249 lines
8.3 KiB
Markdown
249 lines
8.3 KiB
Markdown
# Система очереди AI запросов
|
||
|
||
## Обзор
|
||
|
||
Система очереди AI запросов предназначена для управления нагрузкой на Ollama и обеспечения стабильной работы AI ассистента. Она предотвращает перегрузку модели, обеспечивает приоритизацию запросов и предоставляет мониторинг производительности.
|
||
|
||
## Архитектура
|
||
|
||
### Компоненты
|
||
|
||
1. **AIQueueService** (`backend/services/ai-queue.js`) - основной сервис очереди
|
||
2. **AI Queue Routes** (`backend/routes/ai-queue.js`) - API маршруты для управления очередью
|
||
3. **AIQueueMonitor** (`frontend/src/components/AIQueueMonitor.vue`) - компонент мониторинга
|
||
4. **Обновленный Chat Route** - поддержка очереди в чате
|
||
|
||
### Технологии
|
||
|
||
- **better-queue** - библиотека для управления очередью
|
||
- **Node.js** - серверная часть
|
||
- **Vue.js** - клиентская часть
|
||
- **Chart.js** - визуализация статистики
|
||
|
||
## Конфигурация очереди
|
||
|
||
### Основные параметры
|
||
|
||
```javascript
|
||
{
|
||
concurrent: 2, // Количество одновременных запросов
|
||
maxTimeout: 180000, // Максимальное время выполнения (3 мин)
|
||
afterProcessDelay: 1000, // Задержка между задачами (1 сек)
|
||
maxRetries: 2, // Максимальное количество повторных попыток
|
||
retryDelay: 5000 // Задержка между повторными попытками (5 сек)
|
||
}
|
||
```
|
||
|
||
### Приоритизация
|
||
|
||
Система автоматически определяет приоритет задач:
|
||
|
||
- **Администраторы**: +10 к приоритету
|
||
- **Срочные запросы**: +20 к приоритету
|
||
- **Чат**: +5 к приоритету
|
||
- **Анализ**: +3 к приоритету
|
||
- **Генерация**: +1 к приоритету
|
||
- **Короткие запросы** (<100 символов): +2 к приоритету
|
||
- **Долгое ожидание** (>30 сек): +5 к приоритету
|
||
|
||
## API Endpoints
|
||
|
||
### Получение статистики
|
||
```http
|
||
GET /api/ai-queue/stats
|
||
```
|
||
|
||
### Добавление задачи в очередь
|
||
```http
|
||
POST /api/ai-queue/task
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"message": "Текст сообщения",
|
||
"language": "ru",
|
||
"history": [...],
|
||
"systemPrompt": "...",
|
||
"rules": {...},
|
||
"type": "chat"
|
||
}
|
||
```
|
||
|
||
### Получение статуса задачи
|
||
```http
|
||
GET /api/ai-queue/task/:taskId
|
||
```
|
||
|
||
### Управление очередью (только для админов)
|
||
```http
|
||
POST /api/ai-queue/control
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"action": "pause|resume|clear"
|
||
}
|
||
```
|
||
|
||
### Информация о производительности
|
||
```http
|
||
GET /api/ai-queue/performance
|
||
```
|
||
|
||
## Использование в чате
|
||
|
||
### Обычный режим (без очереди)
|
||
```http
|
||
POST /api/chat/message
|
||
```
|
||
|
||
### Режим с очередью
|
||
```http
|
||
POST /api/chat/message-queued
|
||
```
|
||
|
||
## Мониторинг
|
||
|
||
### Компонент AIQueueMonitor
|
||
|
||
Компонент предоставляет:
|
||
|
||
- **Статус очереди**: активна, ожидает, пуста, ошибка
|
||
- **Количество задач**: в очереди и выполняющихся
|
||
- **Производительность**: успешность, среднее время обработки
|
||
- **Детальная статистика**: общее количество, ошибки, время
|
||
- **Управление**: пауза, возобновление, очистка (для админов)
|
||
- **График производительности**: реальное время
|
||
|
||
### Интеграция в интерфейс
|
||
|
||
```vue
|
||
<template>
|
||
<AIQueueMonitor :isAdmin="userIsAdmin" />
|
||
</template>
|
||
|
||
<script>
|
||
import AIQueueMonitor from '@/components/AIQueueMonitor.vue'
|
||
|
||
export default {
|
||
components: {
|
||
AIQueueMonitor
|
||
}
|
||
}
|
||
</script>
|
||
```
|
||
|
||
## Ограничения и защита
|
||
|
||
### Rate Limiting
|
||
|
||
- **Ограничение по пользователю**: 10 запросов в минуту
|
||
- **Размер сообщения**: максимум 10,000 символов
|
||
- **Валидация**: проверка обязательных полей
|
||
|
||
### Фильтрация
|
||
|
||
- Проверка формата сообщения
|
||
- Валидация ID запроса
|
||
- Проверка размера сообщения
|
||
- Контроль частоты запросов
|
||
|
||
### Слияние задач
|
||
|
||
- Объединение одинаковых запросов от одного пользователя
|
||
- Обновление метаданных при повторных запросах
|
||
|
||
## Производительность
|
||
|
||
### Оптимизации
|
||
|
||
1. **Кэширование**: ответы кэшируются на 5 минут
|
||
2. **Проверка здоровья**: мониторинг состояния модели
|
||
3. **Ограничение ресурсов**: Docker контейнер с лимитами
|
||
4. **Таймауты**: защита от зависших запросов
|
||
|
||
### Мониторинг
|
||
|
||
- Время обработки запросов
|
||
- Успешность выполнения
|
||
- Размер очереди
|
||
- Количество ошибок
|
||
- Статистика по пользователям
|
||
|
||
## Устранение неполадок
|
||
|
||
### Частые проблемы
|
||
|
||
1. **Медленные ответы**
|
||
- Проверить размер очереди
|
||
- Увеличить количество concurrent задач
|
||
- Проверить ресурсы Ollama
|
||
|
||
2. **Ошибки таймаута**
|
||
- Увеличить maxTimeout
|
||
- Проверить состояние модели
|
||
- Очистить очередь
|
||
|
||
3. **Высокая нагрузка**
|
||
- Уменьшить concurrent задачи
|
||
- Включить rate limiting
|
||
- Добавить задержки между задачами
|
||
|
||
### Логи
|
||
|
||
```bash
|
||
# Просмотр логов очереди
|
||
docker logs dapp-backend | grep AIQueue
|
||
|
||
# Статистика очереди
|
||
curl http://localhost:8000/api/ai-queue/stats
|
||
|
||
# Проверка здоровья
|
||
curl http://localhost:8000/api/health
|
||
```
|
||
|
||
## Настройка для продакшена
|
||
|
||
### Рекомендуемые параметры
|
||
|
||
```javascript
|
||
{
|
||
concurrent: 1, // Один запрос за раз для стабильности
|
||
maxTimeout: 300000, // 5 минут таймаут
|
||
afterProcessDelay: 2000, // 2 секунды между запросами
|
||
maxRetries: 1, // Одна повторная попытка
|
||
retryDelay: 10000 // 10 секунд между попытками
|
||
}
|
||
```
|
||
|
||
### Мониторинг
|
||
|
||
- Настройка алертов при высокой нагрузке
|
||
- Логирование всех операций
|
||
- Метрики производительности
|
||
- Автоматическое масштабирование
|
||
|
||
### Безопасность
|
||
|
||
- Аутентификация для всех endpoints
|
||
- Авторизация для управления очередью
|
||
- Валидация всех входных данных
|
||
- Защита от DDoS атак
|
||
|
||
## Разработка
|
||
|
||
### Добавление новых типов задач
|
||
|
||
1. Обновить функцию `getTaskPriority`
|
||
2. Добавить обработку в `processTask`
|
||
3. Обновить документацию
|
||
|
||
### Расширение мониторинга
|
||
|
||
1. Добавить новые метрики в `getStats`
|
||
2. Обновить компонент `AIQueueMonitor`
|
||
3. Добавить новые API endpoints
|
||
|
||
### Интеграция с другими сервисами
|
||
|
||
1. Подключение к Redis для персистентности
|
||
2. Интеграция с системами мониторинга
|
||
3. Подключение к лог-агрегаторам |