Skip to content

Обзор архитектуры ​

Из каких частей состоит EVA, кто за что отвечает и как эти части связаны между собой.

Что такое EVA ​

EVA это платформа для работы с языковыми моделями внутри компании. Пользователь ведёт переписку с моделью в браузере, а платформа берёт на себя всё остальное: хранит историю, подключает нужную модель, даёт модели доступ к внешним инструментам, хранит файлы чата, скрывает персональные данные и считает расход.

Платформа не содержит собственной языковой модели. Модели подключаются как внешние сервисы. Инструменты тоже внешние, они подключаются по протоколу MCP и не обязательны для работы.

Три части платформы ​

EVA состоит из трёх приложений в одном репозитории.

ЧастьЧто делает
FrontendИнтерфейс в браузере. Одностраничное приложение на Vue 3.
APIУправляющий слой. Единственная часть, которая обращается к базе данных. Держит пользователей, права, чаты, файлы, настройки, статистику и внешний API. В production также раздаёт сам интерфейс.
RuntimeИсполняющий слой. Ведёт диалог с моделью, распределяет нагрузку и подключается к инструментам MCP. К базе данных не обращается.

Общая схема ​

Как читать схему ​

Пользователь работает только с API. Runtime закрыт и доступен только изнутри: у него нет проверки прав, поэтому его нельзя выставлять в интернет.

Когда пользователь отправляет сообщение, API готовит всё нужное для диалога и передаёт задачу в Runtime. Runtime поднимает рабочий процесс, тот обращается к модели, при необходимости вызывает инструменты и возвращает ответ по частям. API получает эти части, восстанавливает скрытые персональные данные, сохраняет сообщение в базу и отдаёт текст в браузер.

Инструменты MCP работают не с диском напрямую, а через отдельный слой доступа к файлам чата на стороне API. Ключи доступа для них выдаются на короткое время и только на один чат.

Что важно знать сразу ​

Платформа рассчитана на один экземпляр API. Часть состояния хранится в памяти процесса: кэш прав, счётчики внешнего API, обработчик очереди, модель поиска персональных данных. Запуск нескольких копий API без доработки приведёт к расхождениям.

API и Runtime должны видеть один и тот же каталог с файлами чатов. Runtime получает путь к этому каталогу и читает файлы напрямую.

Объектного хранилища в платформе нет. Файлы лежат в обычном каталоге на диске, а обращения в стиле S3 обслуживает сам API. Подробности в разделе Файлы и слой S3.

Стек ​

СлойТехнологии
FrontendVue 3, PrimeVue 4, Tailwind 4, vue-i18n, chart.js
APINode.js 22, Fastify 5, Drizzle ORM, PostgreSQL 16
RuntimeNode.js 22, Fastify 5, AI SDK, клиент MCP
Сборкаpnpm workspace, TypeScript, Vite

Документация платформы EVA