RAG-пайплайн
Как база знаний пополняется документами и как строится ответ ассистента.
RAG, не fine-tuning: веса Qwen3 не меняются. Обновляется база документов — текст и мета чанков в MongoDB, векторы в Qdrant. Две ветки: ingest (документ → чанки → векторы) и answer (вопрос → поиск → ответ).
Ветка ingest: пополнение базы знаний
Администратор загружает файл через портал или кладёт его в папку
private_knowledge — оба пути ставят одну задачу ingest:document в очередь
Asynq (см. Realtime).
Форматы: PDF, DOCX, TXT, XLSX, Markdown.
Парсинг
Worker извлекает текст и метаданные из документа по формату.
Нарезка на чанки
По смыслу — заголовки и абзацы, не фиксированные байты. Размер ~500–1000 токенов с перекрытием 10–15%, чтобы не рвать контекст. Таблицы — по строкам и логическим блокам.
Векторизация
Qwen3-Embedding через vLLM, батчами. Одна и та же модель для документов и вопросов — иначе векторные пространства не совпадут.
Сохранение в два хранилища
Текст и мета чанка → MongoDB, вектор → Qdrant. Связь — общий chunk_id.
Статус «обработан» — в реестре documents.
Ingest идемпотентен: повторная обработка doc_id сначала удаляет старые
чанки в обеих базах, затем пишет новые. Задача может выполниться дважды —
дублей быть не должно.
Ветка answer: ответ на вопрос
| Шаг | Что происходит | Параметры |
|---|---|---|
| Embedding | Вектор вопроса через Qwen3-Embedding | 1 вызов на вопрос |
| Поиск | Qdrant возвращает кандидатов с текстом в payload | K ≈ 20–40 |
| Rerank | bge-reranker-v2-m3 пересортировывает пары (вопрос, чанк) | N ≈ 4–8 |
| Промпт | Системная инструкция сценария + чанки + история | без ПДн |
| Генерация | Qwen3-32B в режиме stream | токены сразу наружу |
| Сохранение | Диалог, интересы, sabotage_score, analytics_tags | MongoDB |
Rerank важнее большого K: сначала качество отбора top-N, потом рост числа кандидатов. Пустой или слабый ретрив → честный ответ «нет данных», не галлюцинация.
Сценарии и ограничения диалога
Промпт собирается под scenario — профориентация, курс, возможности региона:
- 8–10 основных вопросов, по одному, не больше одного уточнения на шаг;
- рекомендации — варианты: 1–3 профиля, 3–7 профессий, маршруты;
- язык соответствует возрасту, без диагнозов и решений за ребёнка;
- антисаботаж: пустые и несерьёзные ответы повышают
sabotage_score.
Модерация
| Требование | Реализация |
|---|---|
| Обезличивание | Go на портале, до /v1/chat |
| Фильтрация запрещённого | NEURO CORE Service |
| Журнал диалогов | MongoDB |
| Аварийное отключение | NEURO CORE off → портал работает без чата |