Перейти к содержанию

База знаний (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
  1. Pinned-записи (is_pinned=true) — всегда в контексте
  2. Hybrid search — два параллельных поиска:
  3. Vector search: cosine similarity по embeddings (pgvector)
  4. BM25 keyword search: точное совпадение ключевых слов (PostgreSQL full-text search)
  5. Результаты объединяются (reciprocal rank fusion)
  6. Re-ranking — найденные записи переранжируются cross-encoder моделью для повышения релевантности. Даёт +15-25% качества по сравнению с чистым vector search
  7. System prompt с conditions — выбор варианта по условиям (базовый или с приоритетами диагностики при активных инцидентах)
  8. Сборка промпта: роль → описание документов → ограничения → правила эскалации → логика ответа → формат команд
  9. LLM генерирует ответ с citations — каждый факт в ответе привязан к конкретной записи KB

Semantic caching

Многие клиенты задают одинаковые или похожие вопросы. Semantic cache сохраняет ответы и выдаёт их без повторного вызова LLM:

  • "Как подключить подписку Семья?" ≈ "Семейная подписка подключение" ≈ "Хочу семейный тариф" → один кэшированный ответ
  • Кэш на основе cosine similarity входящего вопроса к уже отвеченным (порог настраивается)
  • Хранение: Redis + vector similarity или pgvector
  • TTL кэша настраивается (по умолчанию 24 часа, для быстро меняющихся тем — короче)
  • Экономия: 20-40% LLM-вызовов при типичном потоке обращений

Версионирование

Каждое изменение сохраняется. Откат одним кликом.