Обзор SupportAgent
SupportAgent - гибридный AI-ассистент, объединяющий поиск по базе знаний (RAG) и вызов инструментов. Он работает в чатах поддержки Telegram, ВКонтакте и Max.
Архитектура#
Компоненты#
Система состоит из трёх слоёв:
SupportMessageDispatcher - принимает входящие сообщения из всех каналов, дедуплицирует запросы (один пользователь - одна активная обработка), резолвит userId по socialId.
SupportRagService - основной сервис обработки запросов. Определяет намерение (вопрос vs команда), ищет в базе знаний, управляет историей диалога.
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:
- Запрос пользователя преобразуется в вектор через LM Studio Embeddings
- В векторном хранилище (
km-storage) ищутся наиболее похожие фрагменты документов базы знаний - Найденные фрагменты передаются языковой модели как контекст
- LLM формирует ответ строго на основе предоставленного контекста
Если подходящих фрагментов не найдено - агент отвечает fallback-сообщением и предлагает обратиться к живому специалисту.
История диалога#
Агент поддерживает контекст беседы. Последние N сообщений (вопрос + ответ) передаются в LLM при каждом новом запросе, что позволяет задавать уточняющие вопросы без повторения контекста.
История хранится в базе данных (таблица SupportChatHistory) и привязана к сессии.
Инструменты агента#
Инструменты - это реальные действия, которые агент может выполнить. Каждый инструмент реализует интерфейс ISupportTool.
Полный список инструментов и их описание:
- get_balance - баланс пробирок, искр и энергии
- list_my_activities - список активностей
- get_activity_status - статус активности по коду
- create_activity_draft - создать черновик
- launch_activity - запустить активность
- stop_activity - остановить активность
- generate_image - сгенерировать изображение