3-Tier Архитектура и Устройство Движка

Движок ForjBot Engine спроектирован по трехзвенной архитектуре с полным декуплированием внешних мессенджеров от бизнес-логики ИИ.

graph TD subgraph Layer1 ["1. Слой Каналов (Channel Layer)"] TG["Telegram (aiogram)"] VK["VK (Callback API)"] WC["WebChat (WebSocket / REST)"] end subgraph Layer2 ["2. Слой Адаптеров (Adapter Layer)"] TA["TelegramAdapter"] VA["VKAdapter"] WA["WebChatAdapter"] end subgraph Layer3 ["3. Ядро ИИ (Core Engine Layer)"] Disp["core_dispatcher.py"] Pipe["Pipeline Middleware"] LLM["LLM Client & Prompt Composer"] RAG["Vector RAG & Agent Loop"] end TG -->|TelegramUpdateConverter| TA VK -->|VKPayloadParser| VA WC -->|WebChatPayloadParser| WA TA -->|IncomingMessage| Disp VA -->|IncomingMessage| Disp WA -->|IncomingMessage| Disp Disp --> Pipe --> LLM --> RAG RAG -->|Abstract BasePlatformAdapter| TA & VA & WA

Главный Инвариант Ядра

Ядро системы (app/bot/core_dispatcher.py) никогда не импортирует сторонние библиотеки мессенджеров (aiogram, vk_api и т.д.). Оно работает исключительно с абстрактным объектом IncomingMessage:

IncomingMessage(
    platform="telegram",
    platform_user_id="123456789",
    chat_id="123456789",
    message_id="9981",
    text="Привет! Расскажи о возможностях системы.",
    media=[],
    metadata={}
)

Абстрактный Адаптер Платформы (BasePlatformAdapter)

Все действия отправки контента нормализованы через контракт класса BasePlatformAdapter:

  • send_text(chat_id, text, reply_to_message_id)
  • send_photo(chat_id, photo_bytes, caption)
  • send_voice(chat_id, voice_bytes)
  • send_tool_status(chat_id, text, draft_id) — отправка промежуточных статусов визуала (“Поиск…”, “Загрузка…”)
  • clear_tool_status(chat_id)