База знаний (KB)¶
Структурированное хранилище информации, на основе которой AI формирует ответы. Заменяет текущие JSON-чанки в Qdrant и захардкоженные промпты в Go.
Три типа записей¶
| Тип | Что хранит | Аналог в текущей системе | Пример |
|---|---|---|---|
| Статьи | Развёрнутые инструкции, документация | RAG-чанки документации | "Как подключить подписку Семья", "Установка домофона серии ИО22" |
| Q&A-пары | Конкретный вопрос → конкретный ответ | RAG-чанки Q&A формата | "Можно ли установить ГОС22 на калитку?" → "Нет, серии ИО22 и ГОС22 не поддерживают установку на калитку" |
| Записи | Факты, правила, ограничения | Important embeddings, tech_status_guidelines | "При аварии всегда спрашивай адрес первым", "Серия X100 — баг прошивки 2.1.3" |
Разделение B2B / B2C¶
Каждая запись имеет scope: citizen (только B2C), partner (только B2B), all (оба). AI ищет только в записях, доступных для текущего типа клиента.
Pinned-записи¶
Аналог "important embeddings" в текущей системе. Всегда включаются в контекст AI, независимо от вопроса: - Правила обработки аварий - Текущие технические проблемы - Критические ограничения по безопасности
RAG pipeline¶
Расширенный pipeline с hybrid search и re-ranking для максимального качества ответов:
flowchart LR
Q["❓ Вопрос клиента"] --> EMB["Embedding<br/>Ada v2"]
EMB --> VS["Vector Search<br/>pgvector (cosine)"]
EMB --> BM["BM25 Search<br/>PostgreSQL FTS"]
PIN["📌 Pinned записи<br/>(всегда в контексте)"] --> MERGE
VS --> RRF["Reciprocal<br/>Rank Fusion"]
BM --> RRF
RRF --> RERANK["Cross-encoder<br/>Re-ranking"]
RERANK --> MERGE["Сборка контекста"]
SP["System Prompt<br/>(по условиям)"] --> PROMPT["Промпт"]
MERGE --> PROMPT
HIST["История<br/>диалога"] --> PROMPT
PROMPT --> LLM["🤖 RouterAI<br/>GPT-4.1"]
LLM --> RESP["Ответ +<br/>confidence +<br/>citations"]
CACHE[("🗄 Redis<br/>Semantic Cache")] -.->|"cache hit"| RESP
Q -.->|"similarity check"| CACHE
style Q fill:#7c3aed,color:#fff
style RESP fill:#22c55e,color:#fff
style LLM fill:#3b82f6,color:#fff
style CACHE fill:#f59e0b,color:#000
- Pinned-записи (
is_pinned=true) — всегда в контексте - Hybrid search — два параллельных поиска:
- Vector search: cosine similarity по embeddings (pgvector)
- BM25 keyword search: точное совпадение ключевых слов (PostgreSQL full-text search)
- Результаты объединяются (reciprocal rank fusion)
- Re-ranking — найденные записи переранжируются cross-encoder моделью для повышения релевантности. Даёт +15-25% качества по сравнению с чистым vector search
- System prompt с conditions — выбор варианта по условиям (базовый или с приоритетами диагностики при активных инцидентах)
- Сборка промпта: роль → описание документов → ограничения → правила эскалации → логика ответа → формат команд
- LLM генерирует ответ с citations — каждый факт в ответе привязан к конкретной записи KB
Semantic caching¶
Многие клиенты задают одинаковые или похожие вопросы. Semantic cache сохраняет ответы и выдаёт их без повторного вызова LLM:
- "Как подключить подписку Семья?" ≈ "Семейная подписка подключение" ≈ "Хочу семейный тариф" → один кэшированный ответ
- Кэш на основе cosine similarity входящего вопроса к уже отвеченным (порог настраивается)
- Хранение: Redis + vector similarity или pgvector
- TTL кэша настраивается (по умолчанию 24 часа, для быстро меняющихся тем — короче)
- Экономия: 20-40% LLM-вызовов при типичном потоке обращений
Версионирование¶
Каждое изменение сохраняется. Откат одним кликом.