# Анализ оптимизации генерации визарда **Дата:** 2025-01-XX **Текущее время генерации:** ~30-40 секунд **Цель:** Сократить до 5-15 секунд --- ## 🎯 Вариант 1: Двухэтапный подход (твоя идея) ### Концепция: 1. **ИИ только классифицирует** случай и выдаёт список нужных документов/полей 2. **Бэкенд строит визард** по шаблонам на основе классификации ### Архитектура: ``` Описание → ИИ (классификация) → Бэкенд (шаблоны) → Визард ``` **ИИ возвращает:** ```json { "case_type": "product_defect", // или "service_issue", "delay", "conflict" "required_fields": ["item", "purchase_date", "purchase_amount", "warranty_info"], "required_documents": ["contract", "payment", "photos"], "optional_documents": ["correspondence", "diagnosis"], "extracted_data": { "item": "Смартфон", "seller": "DNS", "purchase_date": "2024-12-15" } } ``` **Бэкенд использует шаблоны:** ```python WIZARD_TEMPLATES = { "product_defect": { "questions": [ {"name": "item", "label": "Как называется товар?", ...}, {"name": "purchase_date", "label": "Когда купили?", "control": "input[type=\"date\"]", ...}, {"name": "purchase_amount", "label": "Сколько стоил?", ...}, {"name": "warranty_info", "label": "Есть ли гарантия?", ...}, {"name": "problem_description", "label": "Опишите проблему", "control": "textarea", ...}, {"name": "documents_available", "label": "Какие документы есть?", "control": "input[type=\"checkbox\"]", ...}, {"name": "desired_outcome", "label": "Что хотите получить?", "control": "input[type=\"radio\"]", ...} ], "documents": [ {"id": "contract", "name": "Договор", "required": true, ...}, {"id": "payment", "name": "Чек", "required": true, ...}, {"id": "photos", "name": "Фото дефекта", "required": true, ...} ] }, "service_issue": { ... }, "delay": { ... }, "conflict": { ... } } ``` ### Плюсы: ✅ **Скорость:** ИИ только классифицирует (5-10 сек) + бэкенд мгновенно (0.1 сек) = **5-10 сек всего** ✅ **Предсказуемость:** Визарды всегда структурированы одинаково ✅ **Контроль:** Легко менять вопросы/документы без изменения промпта ✅ **Кеширование:** Можно кешировать шаблоны в памяти ✅ **Тестирование:** Легко тестировать шаблоны отдельно от ИИ ### Минусы: ❌ **Гибкость:** Сложные/уникальные случаи могут не попасть в шаблоны ❌ **Разработка:** Нужно создать и поддерживать библиотеку шаблонов ❌ **Классификация:** ИИ должен точно определить тип дела ### Реализация: 1. Создать `wizard_templates.py` в бэкенде с шаблонами 2. Упростить промпт для ИИ (только классификация + список полей/документов) 3. Создать `WizardBuilder` сервис, который собирает визард из шаблона 4. Обновить n8n workflow для упрощённого ответа **Ожидаемое время:** 5-10 секунд --- ## 🚀 Вариант 2: Гибридный подход ### Концепция: 1. **ИИ классифицирует** и выдаёт список полей/документов (быстро) 2. **Бэкенд использует шаблоны** для стандартных случаев 3. **ИИ достраивает** уникальные вопросы для сложных случаев (опционально) ### Плюсы: ✅ **Баланс:** Скорость + гибкость ✅ **Fallback:** Если шаблон не подходит, ИИ достраивает ### Минусы: ❌ **Сложность:** Нужно решать, когда использовать шаблон, а когда ИИ **Ожидаемое время:** 5-15 секунд (зависит от сложности) --- ## ⚡ Вариант 3: Кеширование готовых визардов ### Концепция: 1. **Кешировать** готовые визарды по типу дела 2. **ИИ только извлекает** данные из описания для автозаполнения ### Плюсы: ✅ **Максимальная скорость:** 1-2 секунды для стандартных случаев ✅ **Простота:** Минимальные изменения в коде ### Минусы: ❌ **Ограниченность:** Только для типовых случаев ❌ **Хранение:** Нужно хранить кеш визардов **Ожидаемое время:** 1-2 секунды (кеш) или 30 сек (первый раз) --- ## 🔥 Вариант 4: Упрощение промпта + быстрая модель ### Концепция: 1. **Сократить промпт** до минимума (убрать примеры, оставить только структуру) 2. **Использовать `gpt-4o-mini`** вместо `gpt-4.1-mini` 3. **Убрать неиспользуемые поля** из ответа ### Плюсы: ✅ **Простота:** Минимальные изменения ✅ **Скорость:** 10-15 секунд ### Минусы: ❌ **Качество:** Может снизиться качество визардов ❌ **Ограничение:** Всё ещё зависит от скорости ИИ **Ожидаемое время:** 10-15 секунд --- ## 🎨 Вариант 5: Предгенерированные шаблоны + ИИ только для извлечения ### Концепция: 1. **Все визарды предгенерированы** в бэкенде (шаблоны) 2. **ИИ только извлекает** данные из описания для автозаполнения 3. **Бэкенд выбирает** подходящий шаблон на основе ключевых слов ### Плюсы: ✅ **Максимальная скорость:** 1-3 секунды ✅ **Предсказуемость:** Всегда одинаковые визарды ### Минусы: ❌ **Ограниченность:** Только для типовых случаев ❌ **Классификация:** Нужна простая классификация (можно без ИИ) **Ожидаемое время:** 1-3 секунды --- ## 📊 Сравнение вариантов | Вариант | Время | Гибкость | Сложность | Рекомендация | |---------|------|----------|-----------|--------------| | **1. Двухэтапный** | 5-10 сек | ⭐⭐⭐⭐ | ⭐⭐⭐ | ✅ **Лучший баланс** | | **2. Гибридный** | 5-15 сек | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ✅ Хорошо для сложных случаев | | **3. Кеширование** | 1-2 сек | ⭐⭐ | ⭐⭐ | ✅ Для типовых случаев | | **4. Упрощение** | 10-15 сек | ⭐⭐⭐⭐ | ⭐ | ✅ Быстрая реализация | | **5. Предгенерированные** | 1-3 сек | ⭐⭐ | ⭐⭐ | ✅ Для простых случаев | --- ## 🎯 Рекомендация ### Для начала: **Вариант 1 (Двухэтапный)** **Почему:** 1. **Оптимальный баланс** скорости и гибкости 2. **Масштабируемость:** Легко добавлять новые типы дел 3. **Контроль:** Все визарды структурированы и предсказуемы 4. **Тестируемость:** Шаблоны легко тестировать ### План реализации: #### Этап 1: Классификация (ИИ) ```python # Упрощённый промпт для ИИ """ Проанализируй описание проблемы и определи: 1. Тип дела (product_defect, service_issue, delay, conflict, other) 2. Какие поля нужно собрать (item, purchase_date, purchase_amount, warranty_info, ...) 3. Какие документы нужны (contract, payment, photos, correspondence, ...) 4. Что уже известно из описания (для автозаполнения) Верни JSON: { "case_type": "product_defect", "required_fields": ["item", "purchase_date", "purchase_amount", "warranty_info"], "required_documents": ["contract", "payment", "photos"], "optional_documents": ["correspondence"], "extracted_data": { "item": "Смартфон", "seller": "DNS" } } """ ``` #### Этап 2: Шаблоны (Бэкенд) ```python # ticket_form/backend/app/services/wizard_builder.py class WizardBuilder: TEMPLATES = { "product_defect": { "questions": [...], "documents": [...] }, "service_issue": {...}, "delay": {...}, "conflict": {...} } def build_wizard(self, classification: dict) -> dict: template = self.TEMPLATES[classification["case_type"]] # Собираем визард из шаблона # Добавляем автозаполнение из extracted_data return wizard_plan ``` #### Этап 3: Интеграция - Обновить n8n workflow для упрощённого ответа - Создать эндпоинт `/api/v1/wizard/build` в бэкенде - Обновить фронтенд для работы с новым форматом --- ## 💡 Дополнительные идеи ### 1. Параллельная обработка - ИИ классифицирует - Параллельно бэкенд готовит шаблоны - Собираем результат ### 2. Инкрементальная генерация - Сначала показываем базовые вопросы (из шаблона) - Потом достраиваем уникальные (если нужно) ### 3. Умное кеширование - Кешировать классификации по хешу описания - Кешировать готовые визарды по типу дела ### 4. Предзагрузка шаблонов - Загружать шаблоны в память при старте - Не обращаться к БД/файлам каждый раз --- ## 🚀 Следующие шаги 1. **Создать шаблоны** для основных типов дел (5-7 типов) 2. **Упростить промпт** для классификации 3. **Реализовать WizardBuilder** в бэкенде 4. **Обновить n8n workflow** 5. **Протестировать** на реальных случаях 6. **Измерить скорость** и сравнить с текущей **Ожидаемый результат:** 5-10 секунд вместо 30-40 секунд