Обзор SupportAgent

SupportAgent - гибридный AI-ассистент, объединяющий поиск по базе знаний (RAG) и вызов инструментов. Он работает в чатах поддержки Telegram, ВКонтакте и Max.

Архитектура#

Компоненты#

Система состоит из трёх слоёв:

  1. SupportMessageDispatcher - принимает входящие сообщения из всех каналов, дедуплицирует запросы (один пользователь - одна активная обработка), резолвит userId по socialId.

  2. SupportRagService - основной сервис обработки запросов. Определяет намерение (вопрос vs команда), ищет в базе знаний, управляет историей диалога.

  3. SupportToolDispatcher - реестр инструментов. Принимает название инструмента и параметры, вызывает нужный ISupportTool.

Поток обработки#

Пользователь пишет сообщение
  → SupportMessageDispatcher
    → Определение userId по socialId
    → SupportRagService.AskAsync()
      → LM Studio: определить намерение (вопрос или команда?)
      ├─ Вопрос → поиск в базе знаний → формирование ответа через LLM
      └─ Команда → SupportToolDispatcher.RunAsync()
          → LM Studio + tool_calling → выбор инструмента
          → ISupportTool.ExecuteAsync()
          → результат → LLM формирует финальный ответ
  → отправить ответ пользователю

Определение намерения#

Перед обработкой агент анализирует сообщение: это вопрос или запрос на действие.

  • Вопрос: «Как создать розыгрыш?», «Что такое искры?» - агент ищет ответ в базе знаний через семантический поиск.
  • Команда: «Покажи мои активности», «Проверь баланс» - агент вызывает соответствующий инструмент.

Если языковая модель недоступна или не уверена в намерении - агент переходит в режим базы знаний как fallback.

База знаний (RAG)#

SupportAgent использует Retrieval-Augmented Generation:

  1. Запрос пользователя преобразуется в вектор через LM Studio Embeddings
  2. В векторном хранилище (km-storage) ищутся наиболее похожие фрагменты документов базы знаний
  3. Найденные фрагменты передаются языковой модели как контекст
  4. LLM формирует ответ строго на основе предоставленного контекста

Если подходящих фрагментов не найдено - агент отвечает fallback-сообщением и предлагает обратиться к живому специалисту.

История диалога#

Агент поддерживает контекст беседы. Последние N сообщений (вопрос + ответ) передаются в LLM при каждом новом запросе, что позволяет задавать уточняющие вопросы без повторения контекста.

История хранится в базе данных (таблица SupportChatHistory) и привязана к сессии.

Инструменты агента#

Инструменты - это реальные действия, которые агент может выполнить. Каждый инструмент реализует интерфейс ISupportTool.

Полный список инструментов и их описание: