# Улучшение генерации тегов AI

## Обзор изменений

Реализовано улучшение системы генерации тегов AI, которое позволяет избежать дублирования тегов и создавать более согласованную систему тегов для каждого пользователя.

## Основные изменения

### 1. Новый сервис AiPromptService

Создан новый сервис `AiPromptService` для подготовки AI промптов с учетом существующих тегов пользователя.

**Файл:** `app/Services/AiPromptService.php`

**Основные методы:**
- `prepareTagsPrompt(array $existingTags = [])` - подготовка промпта для генерации тегов
- `prepareSummaryPrompt(int $maxLength)` - подготовка промпта для генерации саммари
- `prepareVideoSummaryPrompt(int $maxPoints)` - подготовка промпта для генерации видео саммари

### 2. Модификация AiService

Обновлен `AiService` для использования нового `AiPromptService` и добавлен параметр `existingTags` в метод `generateTags`.

**Изменения:**
- Добавлена зависимость от `AiPromptService`
- Метод `generateTags` теперь принимает третий параметр `array $existingTags = []`
- Улучшена логика подготовки промптов для всех методов

### 3. Обновление ProcessAiJob и ProcessVideoAiJob

Оба джоба теперь передают существующие теги пользователя в `AiService::generateTags()`.

**Изменения:**
- Получение существующих тегов пользователя: `$this->link->user->tags()->pluck('name')->toArray()`
- Передача тегов в AI сервис: `$aiService->generateTags($text, $user, $existingTags)`
- Логирование информации о существующих тегах

## Логика работы

### Без существующих тегов
Если у пользователя нет тегов, AI работает по старому сценарию:
```
Ты помощник для создания тегов. Создай ровно 5 релевантных тегов на русском языке для текста. Возвращай только теги через запятую, без дополнительных слов.
```

### С существующими тегами
Если у пользователя есть теги, AI получает расширенный промпт:
```
Ты помощник для создания тегов. Создай ровно 5 релевантных тегов на русском языке для текста. Возвращай только теги через запятую, без дополнительных слов.

У пользователя уже есть следующие теги: API, веб-разработка, JavaScript

При генерации тегов:
1. Если подходящий тег уже существует - используй его точное название
2. Создавай новые теги только если их нет среди существующих
3. Избегай дублирования и похожих названий
4. Возвращай ровно 5 тегов через запятую
```

## Преимущества

1. **Избежание дублирования** - AI знает о существующих тегах и не создает похожие
2. **Консистентность** - Используется уже сложившаяся система тегов пользователя
3. **Экономия ресурсов** - Меньше новых тегов = меньше записей в базе
4. **Лучшая организация** - Пользователь получает более структурированную систему тегов
5. **Обратная совместимость** - Старый функционал продолжает работать

## Примеры работы

### Пример 1: Использование существующего тега
**Существующие теги:** "API", "веб-разработка", "JavaScript"
**Текст:** "Руководство по REST API"
**Результат AI:** "API, REST, документация, руководство, веб-сервисы"

### Пример 2: Избежание дублирования
**Существующие теги:** "веб-разработка", "frontend", "JavaScript"
**Текст:** "Современные подходы к веб-разработке"
**Результат AI:** "веб-разработка, современные-подходы, архитектура, паттерны, best-practices"

## Тестирование

### Unit тесты
- `tests/Unit/Services/AiPromptServiceTest.php` - тесты для нового сервиса
- `tests/Unit/AiServiceTest.php` - обновленные тесты для AiService

### Основные сценарии тестирования
1. Генерация тегов без существующих тегов (обратная совместимость)
2. Генерация тегов с существующими тегами
3. Проверка корректности промптов
4. Проверка отсутствия дублирования

## Конфигурация

Настройки промптов находятся в `config/services.php`:

```php
'openrouter' => [
    'tags_prompt' => 'Ты помощник для создания тегов. Создай ровно 5 релевантных тегов на русском языке для текста. Возвращай только теги через запятую, без дополнительных слов.',
    // ... другие настройки
],
```

## Обратная совместимость

Все изменения полностью обратно совместимы:
- Если `existingTags` не передан, используется пустой массив
- Старые промпты продолжают работать
- Существующий код не требует изменений

## Будущие улучшения

1. **Нормализация тегов** - приведение к единому формату (убирание #, @, приведение к нижнему регистру)
2. **Поиск похожих тегов** - fuzzy search для объединения похожих названий
3. **Анализ семантической близости** - более умный поиск дублирующихся тегов
4. **Предложение объединения** - AI может предлагать объединить похожие теги
