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

Взаимодействие компонентов🔗

Этот раздел содержит описание типовых сценариев обмена между микросервисами и логики обработки событий в системе.


Входящее сообщение с платформы (VK, WhatsApp)🔗

Сценарий начинается с получения вебхука от внешней платформы. Далее:

  1. Сервис интеграции (*_microservice) получает входящее сообщение по вебхуку.
  2. Он запрашивает data_service для получения профиля по platform + profile_id (в каждом микросервисе он свой, например в VK это айди группы).
  3. Полученное сообщение ставится в очередь Redis.
  4. Через установленное время юзером (асинхронно) запускается обработка очереди:
    • Извлекается до 9 последних сообщений
    • Формируется системное пояснение (итого 10)
    • Отправляется запрос в gpt_service
  5. Если GPT запрашивает tool_call, gpt_service вызывает tools_service
  6. Полученный ответ от GPT возвращается:
    • в канал (через API VK / WhatsApp)
    • в data_service для создания транзакции расходов

Работа виджета (streaming)🔗

  1. Пользователь отправляет сообщение в виджет, он шлёт запрос в widget_service
  2. widget_service проверяет домен через data_service
  3. Сообщение сохраняется во временное хранилище (TTLCache)
  4. После этого вызывается стриминговый запрос в gpt_service
  5. Ответ возвращается чанками по SSE в браузер
  6. После завершения — данные о расходе передаются в data_service

Учет токенов и транзакций🔗

  • После каждого успешного ответа GPT:
  • gpt_service возвращает токены, модель, данные запроса
  • микросервис отправляет POST-запрос на /tokens/add в data_service
  • data_service создает транзакцию