113 lines
7.7 KiB
Markdown
113 lines
7.7 KiB
Markdown
<!--
|
||
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-ассистента для бизнеса с поддержкой продуктов, сегментов клиентов и 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-ответы для администратора, которые можно редактировать и отправлять вручную. |