<!--
  Copyright (c) 2024-2025 Тарабанов Александр Викторович
  All rights reserved.
  
  This software is proprietary and confidential.
  Unauthorized copying, modification, or distribution is prohibited.
  
  For licensing inquiries: info@hb3-accelerator.com
  Website: https://hb3-accelerator.com
  GitHub: https://github.com/HB3-ACCELERATOR
-->

# Внедрение RAG-ассистента: поэтапный план

---

## Особенности проекта: разнообразие клиентов, каналов и данных

- **Клиенты:**
  - Различные сегменты: B2B, B2C, VIP, оптовые и розничные покупатели, корпоративные клиенты, частные лица и др.
  - Различные сценарии взаимодействия (покупка, поддержка, консультация, возврат и т.д.).

- **Каналы коммуникации:**
  - Веб-чат
  - Email
  - Telegram/мессенджеры
  - Возможна интеграция с другими каналами (WhatsApp, телефон и др.)

- **Типы данных:**
  - Текстовые сообщения
  - Аудио, видео, изображения (мультимодальные данные)
  - Вложения (документы, сканы, фото товаров и т.д.)

- **Языки:**
  - Русский
  - Английский
  - Испанский
  - Китайский
  - Возможность расширения на другие языки

- **Товары и услуги:**
  - Широкий ассортимент товаров (разные категории, бренды, характеристики)
  - Различные услуги (консультации, сервис, доставка, гарантия, возврат и др.)
  - Возможность кросс-продаж и рекомендаций

- **Требования к RAG:**
  - Гибкая фильтрация знаний по сегменту клиента, языку, категории товара/услуги, каналу обращения
  - Поддержка мультиязычности и мультимодальности
  - Масштабируемость для добавления новых ассистентов, сегментов, каналов и языков

---

## Этап 1. Проектирование и подготовка инфраструктуры
1. **Проектирование схемы хранения знаний (RAG):**
   - Описать структуру таблицы `knowledge_documents` (миграция).
   - Определить поля: id, content, language, type (текст/медиа), метаданные, дата, автор и т.д.
2. **Подготовка backend:**
   - Создать миграцию и модель для `knowledge_documents`.
   - Подготовить базовые CRUD-эндпоинты для работы с базой знаний.

---

## Этап 2. Интеграция векторного поиска (RAG)
1. **Реализация векторного хранилища:**
   - Реализовать методы инициализации и поиска (`initVectorStore`, `findSimilarDocuments`) в `ai-assistant.js`.
   - Настроить хранение эмбеддингов для документов.
2. **API для поиска знаний:**
   - Добавить эндпоинт для поиска релевантных знаний по запросу пользователя.

---

## Этап 3. Интеграция RAG в pipeline ассистента
1. **Модификация логики ответа ассистента:**
   - При получении сообщения пользователя — искать релевантные знания и включать их в prompt LLM.
   - Обеспечить мультиязычность поиска и генерации ответа.
2. **Логирование и трассировка:**
   - Сохранять, какие знания были использованы для ответа.

---

## Этап 4. Интерфейс для админа
1. **UI для управления знаниями:**
   - Добавить на фронте раздел для просмотра, добавления, редактирования и удаления знаний.
2. **UI для модерации ответов ассистента:**
   - Кнопки "Редактировать", "Отправить", "Добавить в RAG" для сообщений и ответов.
   - Возможность быстро добавить сообщение пользователя или ответ ассистента в базу знаний.

---

## Этап 5. Поддержка мультимодальности и мультиязычности
1. **Обработка вложений (аудио, видео, картинки):**
   - Решить, как хранить и индексировать такие данные (например, хранить ссылки и метаданные, а не сами файлы).
2. **Мультиязычный поиск и генерация:**
   - Проверить корректность работы эмбеддингов и LLM для разных языков.

---

## Этап 6. Тестирование и оптимизация
1. **Покрытие тестами ключевых сценариев (unit, интеграционные).**
2. **Оптимизация скорости поиска и генерации.**
3. **Документация для команды.**

---

## Бизнес-логика управления знаниями и тегами для RAG-ассистента

### 1. Гибкая система тегов и связей с пользователями
- Пользователь может создавать собственные таблицы тегов (например, "покупатель", "поставщик", "VIP-клиент" и т.д.).
- В таблице тегов должна быть возможность добавлять ссылки (relation) на пользователей из таблицы `users`.
- Для одного тега может быть привязано несколько пользователей (мультисвязь).
- Для одного пользователя может быть несколько тегов.

### 2. Управление знаниями (FAQ, инструкции, ответы)
- Пользователь может создавать таблицы с вопросами и ответами (например, FAQ для определённой группы клиентов).
- Каждая запись (вопрос-ответ) может быть связана с определённым тегом или группой тегов.
- Возможна фильтрация и поиск знаний по тегам, языку, типу клиента и другим параметрам.

### 3. Использование тегов и знаний в RAG-ассистенте
- При обработке запроса пользователя RAG-ассистент определяет его теги (по связям в таблице тегов).
- Для генерации ответа ассистент использует только те знания (вопросы/ответы), которые соответствуют тегам пользователя.
- Администратор может добавлять новые теги, связывать их с пользователями, а также создавать и редактировать знания для каждой группы.

### 4. UI/UX требования
- В интерфейсе создания/редактирования пользовательских таблиц должен быть доступен тип столбца "relation" (связь с users).
- Для ячеек типа "relation" реализовать выпадающий список с поиском по пользователям.
- Для таблиц знаний — возможность выбора одного или нескольких тегов для каждой записи.

**Пример структуры:**
- Таблица `user_tags`:  id, name, [user_id (relation, мультисвязь)]
- Таблица `faq`:  id, question, answer, [tag_id (relation, мультисвязь)]

**Применение:**
- RAG-ассистент использует связи между пользователями, тегами и знаниями для персонализации ответов и поиска релевантной информации.

### 5. Безопасность и контроль
- Только администратор может создавать и редактировать системные теги и знания.
- Обычные пользователи могут видеть только свои теги и связанные с ними знания.

---

## Требования к CRM-интерфейсу для работы с контактами, тегами и настройками RAG-ассистента

### 1. Раздел "Контакты" в CRM
- **Фильтры:**
  - Новые пользователи (по дате создания или статусу "новый").
  - Новые входящие сообщения (по наличию непрочитанных/неотвеченных сообщений).
  - Теги (мультиселект по тегам пользователя).
- **Детали контакта:**
  - Просмотр истории сообщений.
  - Список тегов пользователя.
  - Добавление/удаление тегов через выпадающий список или автокомплит (создание связи в таблице user_tags).

### 2. Настройки ИИ-ассистента
- **Выбор RAG-таблиц:**
  - В настройках ассистента отображается список всех доступных RAG-таблиц.
  - Администратор выбирает (чекбоксами или мультиселектом), какие таблицы использовать для поиска ответов.
  - Для каждой выбранной таблицы отображается список тегов, которые она содержит.
- **Связь с тегами:**
  - При генерации ответа ИИ использует только те RAG-таблицы и записи, которые соответствуют тегам пользователя.

### 3. Рекомендации по интерфейсу (Vue)
- Компоненты:
  - `ContactList.vue` — фильтры, список пользователей
  - `ContactDetails.vue` — история сообщений, теги, добавление тегов
  - `AssistantSettings.vue` — выбор RAG-таблиц
  - `RagTableSelector.vue` — список таблиц с чекбоксами
  - `TagList.vue` — просмотр тегов в выбранной таблице

### 4. Схема действий администратора
1. В разделе "Контакты" находит нового пользователя/сообщение через фильтры.
2. В деталях контакта добавляет нужные теги пользователю.
3. В настройках ассистента выбирает, какие RAG-таблицы использовать для поиска по тегам.
4. ИИ-ассистент при ответе использует только релевантные RAG-таблицы и теги.

### 5. Пример структуры таблиц для RAG и тегов
- `users` — пользователи
- `messages` — сообщения
- `tags` — справочник тегов
- `user_tags` — связь пользователей и тегов (user_id, tag_id)
- `rag_tables` — таблицы знаний (например, FAQ, инструкции)
- `rag_entries` — записи в таблицах знаний (content, rag_table_id, ...)
- `rag_entry_tags` — связь записей знаний и тегов (rag_entry_id, tag_id)

---

## План внедрения RAG-ассистента в CRM

1. **Создать RAG-таблицы для ИИ-ассистента**
   - Таблицы для хранения знаний о компании, продуктах, услугах (например, `rag_tables`, `rag_entries`).
   - Возможность добавлять, редактировать, удалять записи через UI.
   - Каждая запись может быть связана с тегами (например, категория продукта, язык, сегмент клиента).

2. **Создать таблицы с тегами для пользователей**
   - Таблица тегов (`tags`).
   - Связующая таблица `user_tags` (user_id, tag_id).
   - UI для управления тегами и их привязкой к пользователям.

3. **Отредактировать страницу настройки ИИ-ассистента**
   - Добавить выбор, какие RAG-таблицы использовать для поиска.
   - Отображать список тегов, связанных с выбранными таблицами.
   - Возможность быстро подключать/отключать таблицы и теги.

4. **Добавить в раздел "Контакты" фильтры (отдельные компоненты)**
   - Фильтр по новым пользователям.
   - Фильтр по новым входящим сообщениям.
   - Фильтр по тегам (мультиселект).
   - Каждый фильтр реализовать отдельным Vue-компонентом для переиспользования.

5. **В "Детали контакта" добавить инлайн-кнопки**
   - Кнопки:
     - Сгенерировать (ответ с помощью ИИ)
     - Редактировать (отредактировать сгенерированный ответ)
     - Отправить (отправить ответ пользователю)
     - Добавить в RAG-таблицу (сделать сообщение или ответ частью базы знаний)
   - Кнопки должны быть доступны для каждого сообщения в истории.

---

**Этот документ будет дополняться по мере реализации каждого этапа.** 