Всем привет! Меня зовут Алексей Пронский, я отвечаю за архитектуру в AI-департаменте группы компаний БКС. Мы строим агентные системы, AI-ассистентов, OCR-системы, речевую аналитику и Classic ML модели. Поскольку мы работаем по принципам enterprise разработки, за каждым таким проектом стоит архитектурное решение (далее — арх.решение) — документ, который проходит согласование с бизнесом, корпоративной архитектурой, ИБ и владельцами смежных систем. Арх. решения мы ведём в Confluence, диаграммы рисуем в Draw.io. Типичный цикл от получения бизнес-требований до согласованного арх. решения в среднем занимает две-три недели.
За последний год LLM-ассистенты произвели настоящую революцию в написании кода. В этой статье я покажу, как добиться такого же эффекта в архитектуре — перейти на подход Architecture as Code и передать рутину LLM. Мы используем Structurizr для описания архитектуры и Claude Code как LLM-ассистента. Буду показывать примеры на их основе, демо-репозиторий можно будет посмотреть на GitHub.

Проблема: архитектор — это не тот, кто рисует квадратики
Давайте честно: традиционно большая часть времени архитектора уходит не на принятие решений, а на их оформление. Типичный рабочий день выглядит так:
Получил бизнес-требования (БТ) — прочитал, разобрал 40-шаговый BPMN-процесс.
Определил, какие системы затронуты, какие нужно создать, какие доработать.
Создал страницу с решением в Confluence, открыл плагин Draw.io, нарисовал контейнерную диаграмму, потом практически продублировал её в диаграмме инфопотоков.
Оформил информационные потоки в таблицу, где заполнил необходимые поля: код, объект данных, источник, потребитель, тип и т.д.
Заполнил обязательные разделы ИБ: ролевую модель, потоки с защищаемой информацией, статусы.
Написал НФТ, требования к реализации.
Отправил на согласование. Получил 15 замечаний. Половина — "не заполнены такие-то поля", "не указаны ответственные", "содержание раздела не соответствует стандартам". Исправил. Отправил снова.
Знакомо? Основная боль здесь — не в том, что работа сложная. Она механическая. Архитектурное решение принимается за час. А оформлять его приходится два дня. И ещё неделю итерироваться по замечаниям, половина из которых — очевидные неточности и несоответствия.
Что меняется с введением подхода Architecture as Code
Идея Architecture as Code проста: описывать архитектуру не в виде картинок, а текстом в виде кода на DSL. Диаграммы генерируются автоматически по коду. Мы используем Structurizr — инструмент для описания архитектуры в формате C4 Model.
Вместо рисования в Draw.io вы пишете модель:
// Определяем системы white_tower = softwareSystem "Белая Башня" "Главный зал общения с магами" bree_crossroads = softwareSystem "Перекрёсток Бри" "Узловая станция Средиземья" // Определяем связи с указанием протокола white_tower -> bree_crossroads "Запрашивает свитки через Перекрёсток" "MCP/HTTPS" white_tower -> radagast "Передаёт вопросы Радагасту" "REST/HTTPS"
Structurizr из этого кода генерирует диаграммы — IT-ландшафт, контекст выбранной системы (C1 уровень), контейнеры внутри системы (C2 уровень). Одна модель, много представлений.

Вот что это даёт на практике:
Единый источник правды. У нас 20+ систем в IT-ландшафте. Раньше каждое арх. решение содержало свои диаграммы — отдельные файлы, которые быстро устаревали и рассинхронизировались между собой. Чтобы вести ландшафт, приходилось просматривать множество последних арх. решений, формировать представление об изменениях в архитектуре по ним и обновлять диаграмму ландшафта вручную. Это большой объём работы. Теперь, после перехода на описание арх. решений в Structurizr, диаграмму ландшафта нашего департамента мы получаем бесплатно.
Структура в нашем архитектурном репозитории выглядит следующим образом:
structurizr/ workspace.dsl # Главный файл — собирает всё через !include workspace.json # Координаты элементов на диаграммах common.dsl # Общие акторы и внешние системы domains/ # Архитектурные домены - каждая команда владеет своим доменом genai/ agents/ ocr/ ...
Каждый домен — отдельная пара файлов: model.dsl (модель) + views.dsl (диаграммы). Общие элементы — акторы, внешние системы — вынесены в common.dsl. Команды работают со своим доменом, не трогая чужие.
Версионирование и diff. Архитектура хранится в git — можно смотреть историю, делать code review, сравнивать версии. С бинарными .drawio файлами это невозможно.
Разные диаграммы по одной модели. Представьте, что вам нужно показать системную архитектуру со связями, отражающими зависимости элементов, и тут же — движение инфопотоков по той же архитектуре. В Draw.io для этого придётся нарисовать две диаграммы с по-разному направленными и подписанными стрелками. А если для схем в арх. решениях нужно ещё и визуально выделять новые и изменяемые элементы, а в диаграмме ландшафта — нет? В Draw.io это означает ручное дублирование с раскрашиванием элементов в разные цвета.
В Structurizr DSL для этого есть механизм тегов. Модель остаётся единой, элементы модели помечаются тегами и по-разному отображаются в разных представлениях (view).
В коде это описывается следующим образом (в инфопотоках проставлен тег Dataflow):
// Связи контейнеров aragorn -> isengard_listeners "Забирает расшифровки из потока" "Kafka" aragorn -> moria_vault "Сохраняет в Хранилище" "TCP" aragorn -> ravens "Отправляет Воронов с заданиями" "AMQP" // Инфопотоки isengard_listeners -> aragorn "INF01. Расшифровки речей" "" "Dataflow" moria_vault -> aragorn "INF02. Расшифровки и результаты анализа" "" "Dataflow" aragorn -> ravens "INF03. Задания на обработку" "" "Dataflow"
И создаётся два view: один, исключающий связи с тегом Dataflow и второй, наоборот, включающий.
container aragorn_palantir "aragorn_palantir_containers" "Палантир Арагорна: архитектура" { include * exclude relationship.tag==Dataflow } container aragorn_palantir "aragorn_palantir_dataflow" "Палантир Арагорна: инфопотоки" { include * exclude relationship.tag!=Dataflow }
При изменении или добавлении компонентов в архитектуру, оба представления перерисовываются автоматически.
Контейнерная диаграмма — зависимости компонентов

Диаграмма инфопотоков — движение данных

Автоматизация. Как только архитектура превращается из картинки в код, она может стать таким же участником CI/CD-процесса, как и программный код.
На практике в CI/CD часто автоматизируют:
Валидацию архитектуры. Structurizr парсит DSL и ловит ошибки: несуществующие ссылки, дубликаты идентификаторов, нарушения правил C4. В Draw.io можно нарисовать стрелку в никуда — и никто не заметит до ревью.
Экспорт диаграмм. После мёржа в
mainзапускают скрипт, который рендерит все диаграммы в SVG и экспортирует их в confluence или заливают архитектуру на архитектурный портал (в нашем случае это Structurizr On-Prem)Аналитику. Поскольку модель — это структурированный код, можно программно анализировать архитектуру. Например, автоматически сгенерировать таблицу всех HTTP-взаимодействий для сетевиков.
Проверки для ИБ. Проверяют, что все вызовы в открытый интернет проходят через прокси, персональные данные передаются только по защищённым протоколам.
Детекцию архитектурного дрифта. Сравнивают связи сервисов из трейсинга (OpenTelemetry) со связями в DSL. Если в трейсах есть вызов, которого нет в архитектуре — алерт архитектору.
Связь с инфраструктурой. Генерируют из архитектурной модели скрипты для разворачивания инфраструктуры.
Всё это звучит хорошо. Но есть нюанс.
Писать DSL-код ощутимо тяжелее и дольше, чем рисовать квадратики мышкой, особенно для тех, кто не привык работать с кодом. Нарисовать диаграмму на 10 систем в Draw.io можно за 20 минут. Чтобы описать ту же модель в DSL, разобраться с синтаксисом, правилами видимости, ограничениями нужно уже час-полтора. Добавьте сюда создание views, настройку стилей, экспорт диаграмм. Architecture as Code даёт перечисленные выше преимущества — но приходится платить за это временем на кодирование.
И вот тут появляется LLM.
А что если добавить LLM?
Использование LLM меняет правила игры по двум основным направлениям.
1. LLM закрывает главную проблему Architecture as Code
Код — это родной язык для LLM. Языковым моделям всё равно, на чём писать: на Python, Java или на Structurizr DSL.
Для человека переход от визуального редактора к коду — это когнитивная нагрузка. Для LLM это, наоборот, упрощение. Модель может не просто генерировать DSL-код, но и понимать архитектуру, которая на нём описана. Она читает существующую модель, определяет контекст, добавляет новые контейнеры в правильные места, проставляет теги, соблюдая ваши конвенции.
Барьер входа, о котором я писал выше, исчезает. Вам не нужно писать DSL руками с нуля. Вы описываете архитектуру на естественном языке, а LLM транслирует их в валидный архитектурный код.
2. LLM выводит автоматизацию процессов на принципиально новый уровень
Мы привыкли, что автоматизация — это жесткие скрипты. Они детерминированы, т.е. делают ровно то, что написано. Но сейчас мы видим сдвиг парадигмы во многих областях — от жестких алгоритмов к агентскому подходу.
Автономные агенты уже торгуют на бирже, ведут сложные диалоги с клиентами в техподдержке и даже заказывают еду в офис. Агент не просто выполняет команду «нажми кнопку», он понимает цель: «найди дешевый билет», «разреши конфликт в расписании», «продай акции, если тренд изменится».
Поскольку архитектура теперь представлена как код, мы можем применить тот же агентский подход к архитектуре, создать своего рода «архитектурного агента». Мы не просто просим робота «сдвинуть квадратик». Мы ставим задачу на уровне смысла: «Проверь, соответствует ли эта архитектура требованиям ИБ», «Сравни реализацию с бизнес-требованиями» или «Подготовь решение к релизу».
Наш инструмент: Claude Code и Skills
В качестве основы для нашего архитектурного агента мы используем Claude Code — инструмент, который работает в терминале (или как плагин в IDE) и имеет доступ к файловой системе проекта.
Его киллер-фича для нас — Skills. Это не код, а кастомные команды, описанные на естественном языке (в Markdown). По сути, вы пишете промпт-инструкцию один раз, даёте ей имя, и Claude запоминает этот сложный алгоритм действий.
Мы описали в проекте 5 основных скиллов, которые закрывают основную нашу рутину:
Генерация арх. решения (
arch-generate-solution) — основной скилл. Принимает на вход файл с бизнес-требованиями, задаёт уточняющие вопросы, правит DSL-модель, валидирует её и генерирует готовый Markdown-документ с описанием решения.Архитектурное ревью (
arch-review-solution) — эмулирует работу 5-ти согласующих (Solution Architect, Enterprise Architect, ИБ, Бизнес, Смежники). Читает готовое решение и выдаёт список замечаний от каждой роли.Экспорт диаграмм (
arch-make-svg) — автоматизирует рендеринг. Проходит по всем view в Structurizr и при этом управляет видимостью элементов (например, скрывает то, что не доехало в прод) и сохраняет актуальные SVG-файлы.Сбор ресурсов (
arch-list-resources) — парсит DSL и собирает сводную таблицу по всем контейнерам с полями CPU/GPU/RAM/SSD/Replicas. Мы используем её для учёта железных ресурсов.Разрешение конфликтов (
arch-merge-conflict) — жизненно необходимый скилл для коллективной работы. В инструменте, с которым мы работаем локально (Structurizr Lite), есть огромная проблема. Файлworkspace.json(в котором проставляются вручную выставленные координаты элементов) постоянно вызывает жуткие конфликты при мёрже веток. Вручную решать их практически невозможно. Но на помощь приходит этот скилл, который прекрасно справляется с этой задачей.
В следующем разделе я детально разберу, как работают два наших главных скилла — генерация и ревью решения.
Разбор основных скиллов: как это работает изнутри
Давайте посмотрим, как устроена магия.
1. Skill: Генерация архитектурного решения (arch-generate-solution)
Это наш «тяжеловес». Скилл представляет собой сложный пайплайн из шести фаз, который превращает сырые бизнес-требования в арх. решение с готовым комплектом артефактов.
На вход скилл принимает входные данные: файл с бизнес-требованиями и схемы процессов (BPMN). На выходе генерирует:
Обновленный Structurizr DSL (новые системы, контейнеры, связи).
Набор SVG-диаграмм.
Черновик документа архитектурного решения (АР).

Вот как Claude Code проходит по фазам выполнения этого скилла:
Фаза 1: Контекст и понимание
Claude сканирует папку inputs/, читает бизнес-требования, изучает BPMN-процесс и загружает текущую архитектурную модель (файлы .dsl). На этом этапе он строит для себя карту изменений: «Ага, нужно добавить новый микросервис в домен AI, связать его с существующим API Gateway и положить данные в Postgres».

Фаза 2: Уточнение
Это критически важный этап. LLM не бросается писать код сразу. Скилл явно инструктирует модель задать вопросы архитектору. — «В какой домен добавить новый сервис?» — «Нужен ли отдельный инстанс БД или используем существующий?» — «По какому протоколу они общаются?»
Только получив ответы, агент переходит к кодированию.

Фаза 3: Модификация DSL
Агент вносит изменения в .dsl файлы. Здесь работают строгие конвенции, прописанные в наших инструкциях:
Новые элементы помечаются тегом
New.Изменяемые — тегом
Changed.Информационные потоки получают коды
INFXXX.
Если изменение затрагивает несколько систем, агент автоматически создает сводный view, объединяя нужные контейнеры на одной диаграмме.
Фаза 4: Валидация и Экспорт
Claude запускает shell скрипт валидации. Это не просто проверка синтаксиса. Скрипт стучится в Structurizr API (поднятый локально в докере), чтобы убедиться, что модель парсится корректно. Если есть ошибка (например, дубликат ID или циклическая зависимость), агент видит лог ошибки, исправляет DSL и пробует снова. Цикл повторяется до успеха. Такой автоматический Feedback Loop — это секрет качественного результата на выходе.
После успешной валидации запускается рендеринг SVG-диаграмм.
Фаза 5: Генерация документа
Агент создает файл АР-<Название>.md по нашему корпоративному шаблону. Он не просто копипастит требования, а заполняет специфические архитектурные разделы:
Реестр изменений: Таблица с новыми компонентами.
Интеграционные потоки: Таблица связей (Кто -> Кому -> Зачем -> Протокол).
Требования ИБ: Предварительно заполняет классификацию данных на основе контекста.
В итоге архитектор получает не пустой лист, а документ, готовый на 80%. Ему остается проверить логику, дописать нюансы и проставить ссылки на Jira и CMDB.

2. Skill: Архитектурное ревью (arch-review-solution)
Второй скилл решает проблему «замыленного глаза» и экономит время живых людей на ревью. Его задача — найти глупые ошибки до того, как документ увидят Enterprise-архитекторы или безопасники.
Мы настроили этот скилл так, чтобы он последовательно примерял на себя 5 разных ролей и смотрел на решение под разными углами.
Роли агента при проверке:
Solution Architect: Проверяет техническую целостность. Совпадают ли диаграммы с текстом? Все ли стрелки на схеме описаны в таблице интеграций? (Это самая частая причина возврата документов на доработку).
Enterprise Architect: Смотрит на соответствие корпоративным стандартам. Используются ли утвержденные в тех. радаре технологии? Нет ли дублирования функциональности с другими системами?
Специалист ИБ: Ищет уязвимости проектирования. Все ли внешние вызовы идут через шлюз? Где хранятся секреты? Есть ли аутентификация на межсервисных вызовах?
Владелец смежной системы: Оценивает влияние на свою систему. Не сломает ли это решение соседние сервисы?
Бизнес-заказчик: Проверяет покрытие требований. Реализованы ли все пункты из БТ?
Результат работы скилла — Markdown-таблица с замечаниями:
ID |
Роль |
Критичность |
Раздел |
Суть замечания |
|---|---|---|---|---|
SA-1 |
Solution Architect |
Medium |
1.2 |
В таблице потоков указан REST, на диаграмме — gRPC. Нужно синхронизировать. |
SEC-1 |
Security |
High |
2.1 |
Сервис ходит в интернет напрямую, минуя прокси. Нарушение стандарта. |
BIZ-1 |
Business |
Low |
3.0 |
Не описан сценарий обработки ошибок при недоступности внешнего API. |
На мой взгляд, особенно интересной оказывается таблица покрытия бизнес-требований. Т.к. зачастую такие ошибки обнаруживаются уже на поздних этапах внедрения, когда результат демонстрируется заказчику.
Требование из БТ |
Статус |
|---|---|
Генерация BPMN 2.0 XML из текста |
✅ Покрыто |
Генерация BRD по шаблону |
✅ Покрыто |
Импорт существующих BPMN XML |
❌ Не покрыто |
Редактирование через цепочку промптов |
⚠️ Частично |
Почему это круто
По нашему опыту, этот скилл отлавливает 60-70% типовых замечаний. Это значит, что с живыми людьми-согласующими мы обсуждаем суть архитектуры, а не тратим 30 минут на споры о том, почему «стрелочка не туда смотрит».
Наши результаты
Мы считаем, что LLM не может (и не должна) принимать архитектурные решения за человека. Выбор паттерна проектирования, компромиссы по CAP-теореме, переговоры со стейкхолдерами — это всё ещё наша работа.
Но LLM блестяще справляется с тем, что архитекторы ненавидят: оформлением, синхронизацией артефактов и первичной валидацией.
Мы провели несколько экспериментов, сравнив время создания арх. решения по старому процессу (Confluence + Draw.io) и по новому (Structurizr + Claude Code). Результаты предварительные, но показательные:
Этап |
Было (классический подход) |
Стало (LLM-агент) |
Экономия |
|---|---|---|---|
Анализ требований |
2-3 дня |
1-2 дня |
~30% (думать всё равно надо, но LLM в этом помогает) |
Отрисовка диаграмм |
1-2 дня |
2-3 часа |
~80% (генерация DSL + SVG) |
Написание текста АР |
1-2 дня |
2-3 часа |
~80% (генерация черновика) |
Предварительное ревью |
1 день |
10 минут |
~98% (авто-ревью по 5 ролям) |
Согласование + правки |
5-8 дней |
3-4 дня |
~40% (меньше глупых ошибок) |
ИТОГО |
~2-3 недели |
~1 неделя |
Ускорение в 2+ раза |
Главный выигрыш — мы перестали тратить дни на «передвигание квадратиков» и поиск опечаток в таблицах интеграций. Теперь это делает машина.
Как повторить это у себя: минимальный набор
Если вы хотите попробовать такой подход, не обязательно сразу строить сложную систему агентов. Вот минимальный набор, с которого можно начать:
Инструмент: Structurizr Lite (бесплатный, запускается в Docker).
LLM-ассистент: Claude Code (работает в терминале, нужен API ключ или подписка).
-
База знаний (
CLAUDE.md): Создайте в корне проекта файлCLAUDE.md. Это критически важно! В нём опишите:Структуру вашего репозитория (где лежат
.dsl, где картинки).Основные конвенции (например: «Мы используем C4 Model, новые элементы помечаем тегом
New»).Правила валидации (например: «Всегда запускай скрипт
./validate.shпосле правки DSL»).
Первый скилл: Начните с простого — автоматизируйте ревью. Создайте файл инструкции (например,
.claude/skills/review.md), где опишите, на что нужно обращать внимание при проверке архитектуры.
Этого достаточно, чтобы почувствовать разницу. Дальше можно добавлять генерацию диаграмм и полноценных документов.
Как работает всё, что описано в статье, можно посмотреть в демо-репозитории на github.
Ограничения и подводные камни
Будет неправильно сказать, что всё работает идеально. Мы набили много шишек (и всё ещё продолжаем набивать), прежде чем процесс стал отрабатывать автоматически.
workspace.json— хрупкий артефакт. Structurizr хранит координаты элементов в отдельном JSON-файле. Если два архитектора параллельно двигают блоки на схеме,git mergeпревращается в ад. Мы решили это написанием специального скилла для умного слияния JSON, но проблема всё равно требует внимания.Галлюцинации в DSL. Иногда Claude может придумать несуществующий синтаксис или попытаться связать контейнеры из разных областей видимости (что запрещено в Structurizr). Именно поэтому этап валидации через API обязателен. Без скрипта
validate-dsl.shагент примерно в трети случаев генерирует нерабочий код.Не все схемы генерируются идеально. Иногда плывёт нумерация инфопотоков (и тогда нужно дописывать инструкции в скилл или в CLAUDE.md), или подписи связей на диаграммах наезжают друг на друга (тогда нужно открывать UI Structurizr Lite и вручную передвигать квадратики), или возникают какие-то другие шероховатости. Ручная валидация и исправление недочётов всё ещё необходимы.
Контекстное окно. Если у вас большой IT-ландшафт, который описан в монолитном DSL-файле, LLM может начать «забывать» его детали. Мы решили это строгой модульностью: каждый домен — отдельный файл, а агент подгружает только нужные куски. Также стараемся делить большие скиллы на несколько меньшего размера. Эти решения значительно уменьшили масштаб проблемы, но контекст LLM всё ещё периодически переполняется.
Заключение: Архитектура как диалог
Мы начали с того, что архитектор тратит 80% времени на бюрократию и только 20% — на принятие архитектурных решений. Architecture as Code сам по себе не решал эту проблему (он просто менял мышку на клавиатуру).
Но добавление LLM-агента кардинально меняет всё. Наш процесс трансформировался из рутинного «нарисовал — описал — согласовал» в живой диалог с интеллектуальным помощником:
— «Добавь кафку в центр, свяжи с биллингом»
— «Готово. Учесть требования по репликации?»
— «Да, и проверь, не нарушаем ли мы паттерны ИБ»
Теперь мы буквально разговариваем со своей архитектурой. Это и есть будущее работы архитектора. Мы перестаем быть «рисователями» квадратиков и поднимаемся на уровень архитектурных смыслов, оперируя ими на естественном языке. И это будущее, которое уже наступило.
P.S. Пару слов про безопасность
Использование облачных LLM в корпоративной среде всегда вызывает много вопросов, связанных с безопасностью. «А не утекут ли наши секреты архитектуры в обучающую выборку Anthropic?» — вопрос более чем справедливый.
Мы в компании относимся к этому серьезно. У нас действует жесткий стандарт департамента ИБ: прямые запросы к публичным API облачных провайдеров недопустимы.
Для работы с LLM — будь то продуктовые фичи, AI-ассистенты в IDE или наш архитектурный агент — мы используем корпоративный шлюз AI Gateway.
Это единая точка входа, которая выполняет роль "умного прокси" и делает две вещи:
Маскирование данных: на лету вырезает или заменяет чувствительную информацию (ПДн клиентов, конкретные IP-адреса, пароли и другие чувствительные данные) перед отправкой во внешнее облако.
Аудит и контроль: логирует факты обращений, управляет квотами и позволяет централизованно управлять провайдерами моделей.
Поэтому, когда наш arch-generate-solution отправляет схему на анализ, он делает это через защищенный периметр, и «сырые» корпоративные данные пределы контура не покидают. Если вы планируете внедрять подобный подход у себя — озаботьтесь этим вопросом в первую очередь.
Если у вас остались вопросы, с удовольствием отвечу на них по почте или Телеграм:
pronskiyalexey@gmail.com
@AlexeyPronsky
Комментарии (18)

alegra
06.03.2026 06:33Респект, решение не от вайбкодера. Было бы полезно добавить в репу файл с бизнес - требованиями, чтобы можно было сразу что-то сгенерировать.

AlexeyPronsky Автор
06.03.2026 06:33Постараюсь добавить что-то шаблонное. Реальные БТ не могу выгружать по политикам компании.

alegra
06.03.2026 06:33Спасибо. Будет достаточно того, что ты используешь в статье, чтобы понять формат входных данных и уменьшить порог входа.

Dhwtj
06.03.2026 06:33А такого рода моделях или языках описания много недостатков.
Structurizr - почти нет поведения, чистая структура. Все существующие архитектурные DSL по сути декларативные описания: boxes and arrows.
А в реальности у архитектурной модели есть правила:
если поток несет ПДн, автоматически требуется шифрование канала и запись в раздел ИБ
если система внешняя, нужен API Gateway
если добавляешь новый контейнер, он должен попасть в реестр, получить код, владельца
если два контейнера в разных контурах безопасности - нужен межсетевой экран
Это бизнес-логика архитектурного процесса. Ни один существующий DSL это не покрывает. Поэтому все и делается руками - архитектор держит правила в голове и применяет при оформлении.
По сути нужна не схема как код, а архитектурная модель как программа - с валидацией, выводом, правилами. Ближайшая аналогия - не Mermaid, а скорее что-то вроде OPA/Rego поверх модели, или доменная модель в духе Влашина - make illegal states unrepresentable, но для архитектуры.
Такого готового инструмента я не знаю.
Нагрузка, латентность, бюджет, размер команды, time-to-market, объем данных. Это не булевы правила, а trade-offs - они влияют на выбор между вариантами.
Тут умная модель уже не просто валидирует, а помогает принимать решения. Условно: при <1000 RPS монолит допустим, при >10000 нужен горизонтальный масштаб, а между - зависит от других факторов.
Это уже была бы система поддержки принятия решений, не просто DSL. Decision framework поверх модели. Это ровно то знание, которое архитектор накапливает годами и носит в голове. Формализовать его целиком невозможно - слишком много контекста. Но типовые паттерны выбора ("при таких НФТ обычно делаем так") вполне кодируемы.
А пока что архитектура как код это только для отслеживания diff и то плохо. Версионирование, review process, автоматизация генерации документов - это реальные плюсы. Но без семантической модели с правилами это просто текстовый формат вместо Visio. Удобнее хранить в git, но суть та же - ручная работа архитектора, просто в другом формате.
AlexeyPronsky Автор
06.03.2026 06:33Спасибо за развёрнутый комментарий! У Structurizr DSL действительно есть ограничения. В первую очередь он про описание структуры, в нём ничего нет про логику и правила.
Но именно об этом и статья: о том как LLM позволяет преодолеть ограничения DSL.
В нашем подходе логика, правила, стандарты, шаблоны переносятся в слой инструкций к LLM-агенту. По сути, мы создаём тот самый Decision framework поверх модели на DSL, о котором вы пишете, только не на жестком языке типа OPA/Rego, а на естественном языке промптов. Цель не в том, чтобы полностью перенести знания из головы архитектора - а в том, чтобы описать типовые правила и снять рутину. Постепенно определить, стандартизировать и описать самую критичную логику и ограничения вполне возможно.
И здесь есть ещё один важный эффект: когда правила описаны явно - в промптах, в документах, в примерах - они становятся общими для всей команды. Когда на ландшафте работает 5-10 архитекторов, каждый со своим опытом, знаниями и представлениями о правилах в голове, это особенно ценно.
В нашем репозитории эти правила живут в нескольких местах:
CLAUDE.md - общие инструкции для проекта: стиль именования, структура репозитория, общие принципы.
Файл скилла SKILL.md - инструкции к конкретному сценарию. Здесь описывается логика: что проверять, какие разделы генерировать, какие правила применять.
Директория docs - стандарты ИБ, требования корпоративной архитектуры, шаблоны. LLM читает их и добавляет в контекст.
Директория solutions - примеры уже согласованных арх. решений. LLM распознаёт паттерны внутри них и применяет к новому решению.
Также в Structurizr DSL мы можем помечать элементы и связи метаданными через теги и properties. На основе этих метаданных LLM может понимать, какие правила нужно применить.
Как бы я решал описанные вами кейсы в нашем подходе:
Если поток несет ПДн - нужно шифрование и запись в раздел ИБ
В DSL на поток вешается тег "PDn". В инструкции скилла прописываем правило: "Проверь все связи с тегом PDn. Если протокол не TLS/mTLS - ошибка валидации. Если тег есть, убедись, что этот поток упомянут в разделе ИБ документа".Если система внешняя, нужен API Gateway
Внешние системы в модели уже помечены тегом External. В скилле прописываем правило: все связи от систем с тегом External к внутренним контейнерам должны идти через API Gateway.При добавлении нового контейнера, он должен попасть в реестр, получить код, владельца
Прописываем в скилл инструкцию: "для каждого нового контейнера заполни properties: code, owner и т.д. и создай запись в реестре; если увидишь контейнер без этих свойств - ошибка валидации".-
Два контейнера в разных контурах безопасности - нужен межсетевой экран
Для контейнеров прописываем property securityZone=zoneA/zoneB. В скилле пишем инструкцию "Если связь пересекает разные контуры безопасности, добавь запись в таблицу межконтурного взаимодействия".
Да, это не формальная система с гарантиями валидации - LLM может ошибаться, и архитектор всё ещё должен проверять результат глазами. Но роль архитектора всё больше смещается: от создания с нуля к ревью.
Описанный подход работает на наших кейсах - тех, что в статье. Попробуйте, может сработает и на ваших.
Dhwtj
06.03.2026 06:33Занятно...
Надо подумать
А у меня кейсов нет. Я теоретик. Обучился на архитектора, но что-то не тянет... Из-за слишком большой доли личных коммуникаций и вкусовщины, причем не меня а начальника.

AlexeyPronsky Автор
06.03.2026 06:33Понимаю вас. Вкусовщина и бесконечные совещания, к сожалению, слишком часто являются частью нашей профессии. Что несомненно демотивирует и мешает развиваться.

Dhwtj
06.03.2026 06:33Не совсем забросил, конечно. Сейчас 40% кодирования, 40% проектирования и 20% архитектуры. В небольшой команде можно не заниматься выматывающими согласованиями.

Yankee2d
06.03.2026 06:33То есть, вместо написания 10 строк dsl используем llm?
Про dsl всё прекрасно, но зачем ии тут?

AlexeyPronsky Автор
06.03.2026 06:33В наших кейсах 10 новых строк на dsl могут приводить к необходимости заполнить 10-ти страничный документ с обязательными разделами, таблицами и данными.
Также эти 10 строк должны быть написаны в соответствии со стандартами и результат должен быть провалидирован.
Всю эту рутину вместо вас может сделать ии.

diffnotes-tech
06.03.2026 06:33Самое ценное тут не скиллы а validate-dsl.sh в цикле. Треть генераций невалидна - агент по сути берёт количеством попыток. Тот же паттерн работает с terraform и k8s манифестами - если у DSL есть нормальный валидатор, LLM справляется. Если нет - бесполезно

AlexeyPronsky Автор
06.03.2026 06:33Да, вы правы! Автоматический Feedback Loop тут просто необходим. Иначе человеку на каждый шаг пришлось бы самому открывать схемы в UI и валидировать, что получилось.

olku
06.03.2026 06:33Structurizr Lite уже переведён в архив. BPMN как вход тяжело анализируется. Мы попробовали вместо него Event Storming Diagram. Ограниченный контекст собирается лучше, в значит упрощается прыжок в C4

AlexeyPronsky Автор
06.03.2026 06:33Как альтернативу Lite, рассматриваем плагины в VSCode и общий Structurizr On-Prem. На Event Storming Diagram, спасибо, посмотрим!
AriaQA
Роль Владельца смежной системы — самая тонкая. Как вы обеспечиваете агента актуальным контекстом (RAG) о соседних сервисах? Ведь если агент не "видит" API соседа в реальном времени, он выдаст галлюцинацию о том, что "всё совместимо", а на интеграционном тесте всё упадет. У вас есть единая векторная база данных (Knowledge Base) всей корпоративной архитектуры?
AlexeyPronsky Автор
Сейчас решаем эту проблему только частично - вручную подкладываем спецификации смежных систем в соответствующую папку input. Агент учитывает документы из неё при генерации арх. решения и при ревью.
Но согласен с вами, следующий шаг должен быть в автоматизации этого процесса.
У нас в компании есть корпоративная База Знаний для Искусственного Интеллекта (БЗИИ) и реализован RAG по ней. В том числе, там есть статьи из корпоративного Confluence со спецификациями систем. Плюс, сейчас в разработке корпоративные MCP сервера по Confluence и Jira. Эти сервисы можно подключить как тулы к Claude Code и тогда агент сможет искать релевантную документацию и получать полный текст статей.
Это в планах есть.
AriaQA
Согласна, ручной input — это всегда риск потери актуальности, особенно в динамичных системах (привет 1С и ERP). Но круто, что смотрите в сторону MCP‑серверов и автоматизации RAG через Confluence. Это действительно единственный путь сделать агента «зрячим» в реальном времени. Буду следить за вашими успехами в этом направлении, тема архиважная!