ваше сообщение коммита

This commit is contained in:
2025-07-18 11:59:17 +03:00
parent 2ca2827b7d
commit 1a4f2283b7
19 changed files with 5105 additions and 69 deletions

View File

@@ -0,0 +1,101 @@
# Интеграция RAG-ассистента для бизнеса с поддержкой продуктов, сегментов клиентов и LLM
## Цель
Реализовать интеллектуального ассистента для бизнеса, который:
- Использует RAG-таблицы для хранения вопросов, ответов, уточняющих вопросов, ответов на возражения и дополнительного контекста.
- Поддерживает фильтрацию по продуктам, сегментам клиентов (тегам), приоритету, дате и другим бизнес-полям.
- Интегрируется с LLM (Ollama/OpenAI) для генерации финального ответа на основе найденного контекста.
- Позволяет настраивать системный промт с плейсхолдерами для гибкой персонализации ответов.
- Позволяет генерировать draft-ответ для администратора, который может быть отредактирован и отправлен вручную.
---
## Основные требования
1. **Гибкая структура RAG-таблицы**
- Пользователь может создавать таблицы с произвольными столбцами и назначать им специальное значение (purpose) через выпадающий список:
- Вопрос (`question`)
- Ответ (`answer`)
- Ответ с уточняющим вопросом (`clarifyingAnswer`)
- Ответ на возражение (`objectionAnswer`)
- Теги пользователя/сегмента (`userTags`)
- Продукт/услуга (`product`)
- Дополнительный контекст (`context`)
- Приоритет (`priority`)
- Дата (`date`)
- Для каждого столбца указывается назначение при создании/редактировании.
- Можно добавлять дополнительные столбцы для бизнес-атрибутов.
2. **Фильтрация и поиск**
- При поступлении вопроса пользователя:
- Фильтровать строки по продукту, тегам пользователя, приоритету, дате и другим полям.
- Выполнять векторный поиск (embedding) только по релевантным строкам (по столбцу "Вопрос").
3. **Интеграция с LLM**
- После поиска по RAG-таблице формировать системный промт с подстановкой найденных данных (через плейсхолдеры).
- Передавать промт и вопрос пользователя в LLM (Ollama/OpenAI).
- Возвращать финальный ответ пользователю.
4. **Плейсхолдеры для промта**
- Поддерживаются плейсхолдеры:
- `{context}` — дополнительная информация
- `{answer}` — основной ответ
- `{clarifyingAnswer}` — уточняющий вопрос
- `{objectionAnswer}` — ответ на возражение
- `{question}` — вопрос пользователя
- `{userTags}` — теги пользователя
- `{product}` — продукт/услуга
- `{priority}` — приоритет
- `{date}` — дата
- `{rules}` — описание применённых правил
- `{history}` — история диалога
- `{model}` — используемая LLM
- `{language}` — язык ответа
5. **Кэширование embedding**
- Для ускорения поиска embedding для вопросов кэшируются в БД.
- При изменении вопроса embedding обновляется.
6. **Логирование и аналитика**
- Логируются все этапы работы ассистента: запрос пользователя, найденный контекст, результат LLM, время ответа, id пользователя и т.д.
- Вся информация сохраняется для последующего анализа и улучшения качества ответов.
7. **Автоответ и draft-ответ**
- Если найден релевантный вопрос (score > 0.95) — ассистент автоматически отвечает пользователю.
- Если нет — ассистент генерирует draft-ответ для администратора (через роут `/ai-draft`), который подставляется в поле ввода и ожидает отправки админом. Draft генерируется всегда, даже если нет точного совпадения в RAG.
- Draft-ответ строится с учётом промта, истории и всех доступных данных из RAG.
---
## Пример бизнес-сценария
- Клиент B2B интересуется продуктом "ProductX".
- Вопрос: "Как интегрировать ваш продукт с нашей ERP?"
- Система фильтрует строки по `product = "ProductX"` и тегу `B2B`.
- Векторный поиск проводится только по релевантным строкам.
- В системном промте используются плейсхолдеры для подстановки найденных данных.
- LLM генерирует финальный ответ с учётом контекста, уточняющих вопросов и ответов на возражения.
- Если точного совпадения нет — draft-ответ для администратора формируется на основе промта и истории.
---
## Пример системного промта
```
Ты — ассистент компании. Пользователь интересуется продуктом: {product}, сегмент: {userTags}.
Используй только релевантные ответы и контекст для этого продукта и типа клиента.
Контекст: {context}
Ответ: {answer}
Уточняющий вопрос: {clarifyingAnswer}
Ответ на возражение: {objectionAnswer}
```
---
## Результат
- Персонализированные, точные и масштабируемые ответы для разных продуктов и сегментов клиентов.
- Гибкая настройка ассистента через UI и системный промт.
- Возможность расширения под любые бизнес-сценарии.
- Draft-ответы для администратора, которые можно редактировать и отправлять вручную.