31 июля 2025
Умная кодогенерация: как AI-платформа помогает строить микросервисную архитектуру
Лид backend-разработки red_mad_robot Илья Трусов создал инструмент Meroving, который помогает оптимизировать рутинные задачи, а иногда полностью их делает за разработчика. Например, монотонное написание однотипного кода или бесконечное перекладывание JSON-файлов. О том, как создавался и зачем нужен Meroving, Илья рассказывает в статье.
Все файлы с .gen.go полностью сгенерированы Meroving
В результате у нас получилась собственная AI-платформа, которая локально запускает API к LLМ, сервер для эмбеддингов с АPI и векторную базу данных. А ещё запускает Meroving — он уже интегрирован по АPI с AI-платформой.
Платформа получилась гибкой — модули могут работать как локально, так и удалённо. Например, для тяжёлых задач, требующих мощных ресурсов, LLМ можно запускать на удалённых серверах с десятками GPU, а менее ресурсоёмкие задачи выполнять локально.
После запуска всей обвязки запускается Watcher — компонент, который следит за изменениями в коде:
Какие проблемы хотелось решить с помощью Meroving
- Переиспользование кода С накоплением опыта и проектов появляется база кода, которая часто копируется из одного проекта в другой с минимальными изменениями. Это сложно поддерживать, но мы всё же пытаемся переиспользовать старые наработки.
- Создание единой архитектуры Хотелось разработать универсальный подход с едиными стандартами: общепринятыми архитектурными решениями, единой структурой проекта, линтерами, настройками и лучшими практиками разработки, и при этом не писать код.
- Оптимизация затрат и времени на разработку В современных реалиях сроки разработки сокращаются. То, на что раньше уходил год, теперь нужно сделать за несколько месяцев. Это требует автоматизации и оптимизации процесса. Meroving — это инструмент, который позволяет из одного конфигурационного файла автоматически собирать микросервисную архитектуру. Название проекта отсылает к фильму «Матрица»: как и персонаж Меровинген, наш инструмент умеет управлять другими.
- Через обычный бинарник с командой go install.
- Через Docker-образ, который позволяет поднять контейнер и работать через него.
Архитектура микросервисов
- Разделение на слои Каждый слой абстрагирован и может быть переиспользован в других сервисах.
- Service locator pattern Мы используем паттерн локатора, который автоматически прокидывает зависимости между слоями. Это особенно важно при кодогенерации, где сложно сделать это вручную.
- Синхронное и асинхронное взаимодействие Мы используем gRPC, Protocol Buffers и разные шины данных для обмена сообщениями между микросервисами.
Что умеет Meroving
Gateways
- Генерирует структуру, конфигурацию и запуск.
- Конфигурирует timeout, cache, rate limiting, cors, security как глобальные настройки, так и отдельно для каждого метода.
- Подключает провайдеры: Sentry, Jaeger, Prometheus, Grafana и т. д.
- Подключает gRPC-клиенты микросервисов.
- Генерирует сервер из Swagger.
- Создаёт обработчики из Swagger с возможностью агрегации данных из множества сервисов, возврата моковых данных.
- Создаёт структуру мапперов данных из gRPC-клиентов в Swagger-структуры.
Микросервисы
- Генерирует структуру, конфигурацию и запуск.
- Генерирует gRPC-сервер из protobuf.
- Подключает провайдеры: PostgreSQL, MongoDB, Redis, Kafka, Sentry, Jaeger, Prometheus, Grafana.
- Собирает обвязку для запуска тестов и генерирует сами тесты.
- Генерирует коннекторы, воркеры, топики, обработчики для CDC Debezium и MongoDB Change Streams.
- Генерирует Saga для отката транзакций: создаёт топики, обработчики в юзкейсах и конфигурирует шину данных.
- Генерирует из схем полноценный ORM с использованием entgo.
И ещё много чего
- Поднимает инфраструктуру в Yandex Cloud на основе используемых зависимостей в микросервисах.
- Собирает локальный деплой со всеми инфраструктуктурными зависимостями.
- Генерирует GitLab CI/CD.
- Генерирует Helm Charts и Ingress для деплоя в Kubernetes.
- Интегрируется с Vault для хранения секретов.
- Генерирует линтеры.
- Создаёт changelog на основе Swagger для вашего гейтвея с учётом изменений.
- Локальное окружение с 2–10 микросервисами для отладки.
- Линтеры и автоформатирование кода.
- Тесты автоматически создаются и не требуют настройки инфраструктуры для запуска.

Что остаётся разработчикам
- Написать эндпоинт в шлюзе и микросервисе.
- Реализовать мапперы данных между gRPC и Swagger.
- Сосредоточиться на бизнес-логике микросервиса.
- Выпить кофе. Обо всём остальном позаботится Meroving.
Автоматизируем написание кода
Итак, мы решили проблему с автоматизацией инфраструктуры и микросервисной архитектуры, но остаётся вопрос: как автоматизировать написание бизнес-кода? Попробуем пойти по классическому пути:- GenAI, например ChatGPТ или другая LLМ.
- RAG (Retrieval-Augmented Generation), где мы индексируем весь код, векторизуем его, а затем используем для генерации нужного результата.
- Код ≠ Текст В отличие от текста, код не имеет смысла на уровне отдельных строк, он требует контекста. Одна функция может зависеть от десятков других функций, библиотек и конфигураций. Без этого контекста AI не понимает сути происходящего.
- Разные стили и подходы Одна и та же задача может быть решена множеством способов с использованием разных архитектур, библиотек и подходов. Это создаёт трудности для AI при генерации корректного кода, особенно если используются собственные библиотеки, которые неизвестны модели.
- Многообразие файлов В проекте есть не только код (Go, Python), но и конфигурационные файлы (YAML, JSON), HTML-шаблоны и многое другое. Для человека эти элементы взаимосвязаны, но для AI это разные типы данных, которые сложно анализировать в комплексе.
- Шаблоны — заранее подготовленные структуры файлов, которые могут быть адаптированы под разные проекты. Этот подход позволяет ускорить процесс разработки, но требует определённой настройки и поддержки.
- Динамическая кодогенерация в реальном времени — в зависимости от конфигурационного файла и состояния проекта система генерирует код на лету. Этот подход предоставляет большую гибкость, но требует более сложных алгоритмов для обработки данных.
- Зависимости кода: построить дерево зависимостей функций, классов и библиотек, включая open-source и внутренние библиотеки.
- Объяснение кода: пользовательский промпт может содержать как код, так и смысловой запрос. Наша AI-платформа должна уметь искать и по совпадениям в кодовой базе, и по смысловым совпадениям.
Собственная AI-платформа
Чтобы исключить все эти проблемы, мы решили разработать контекстный движок. Вот что он должен уметь:
- Автоматически переиндексирует файлы при изменении.
- Обновляет векторную базу данных и дерево зависимостей проекта в реальном времени.
Преимущества Meroving для разработчиков
- Можно сфокусироваться на бизнес-коде: AI-платформа и Meroving берут на себя всю рутинную работу: сборку микросервисов, настройку инфраструктуры, построение зависимостей. Разработчику остаётся писать только бизнес-логику, что повышает продуктивность и снижает вероятность ошибок.
- Снижаются требования к квалификации специалистов: проекты теперь могут разрабатывать джуны и мидлы, так как большая часть сложной работы автоматизирована. Сеньоры выполняют роль менторов и код-ревьюеров, что снижает затраты на команду разработки.
Преимущества Meroving для бизнеса
- Быстрый старт проектов: микросервисная архитектура теперь стартует за считанные часы.
- Меньше расходов на инфраструктуру и зарплаты за счёт автоматизации через AI.
- Оптимизация ресурсов: Meroving позволяет эффективно распределять задачи, например, локальная инфраструктура решает простые задачи, а удалённые ресурсы повышают качество работы AI-платформы.
Ценные советы
Наш подход — это не серебряная пуля для всех и каждого. Meroving, о котором мы говорим, — это наш внутренний инструмент, который продолжает активно развиваться и пока не готов к публичному использованию. Мы делимся опытом создания фреймворков, ориентируясь на современные тенденции в AI и LLМ, чтобы показать, что подобные задачи по силам не только крупным корпорациям, но и небольшим командам. Пусть наши советы станут для вас отправной точкой, вдохновляя заняться своей разработкой внутренних платформ, инструментов и движков:- Не бойтесь разрабатывать свои инструменты Разработка собственной AI-платформы или контекстного движка может показаться сложной задачей, но это вполне реально даже для небольших команд. Важно помнить, что ключ к успеху — это понимание своих задач и создание инструментов для их решения. Экспериментируйте, оптимизируйте процессы, используйте наработки открытых сообществ и крупных игроков рынка как фундамент для собственных решений.
- Не конкурируйте с гигантами Не стоит пытаться разрабатывать низкоуровневые библиотеки или конкурировать с крупными корпорациями и open-source сообществом. Фокусируйтесь на создании внутренних инструментов, которые оптимизируют вашу работу.
- RАG-платформы для кода — будущее разработки И это будущее за тем, кто научится эффективно использовать контекст, грамотно сочетая доступные знания с собственными идеями и находками. Грамотное понимание контекста, кода и минимизация объёма передаваемой информации — ключ к качественной кодогенерации и успешной автоматизации разработки.
Оригинал статьи опубликован на Хабре