AI-генерація архітектурних діаграм
Уявіть: ви відкриваєте Confluence. Остання діаграма архітектури — кілька років тому. Нові сервіси додані, старі перейменовані. Зв'язки заплутані. Онбординг розробника перетворюється на квест: дивись код, вгадуй зв'язки. Наші інженери стикалися з цим у кожному другому проєкті. Ми вирішили проблему раз і назавжди: AI-система генерує діаграми з коду та інфраструктурних файлів. Це автоматична документація коду, яка оновлюється при кожному коміті. Результат — жива документація, яка завжди відповідає продакшену. Досвід показує: після впровадження час онбордингу скорочується в 3–5 разів. Економія бюджету на документування сягає 70%.
Як AI генерує діаграми з коду?
Система аналізує проєкт на кількох рівнях. Для Python-коду використовується AST — вилучаються модулі, імпорти, класи, HTTP-клієнти. Для інфраструктури — парсинг docker-compose.yml та Terraform. Потім LLM (Claude Sonnet 4.5) перетворює це на Mermaid-діаграму. Ось процес крок за кроком:
- Сканування репозиторію: пошук усіх файлів коду та конфігурації.
- AST-розбір Python-файлів: виділення компонентів та зв'язків.
- Парсинг docker-compose: визначення сервісів, мереж, залежностей.
- Парсинг Terraform: вилучення ресурсів AWS/GCP та їх зв'язків.
- Збір даних у єдину JSON-структуру.
- Відправка в LLM із промптом для генерації Mermaid.
- Валідація синтаксису діаграми та збереження в docs/.
Приклад коду для аналізу структури Python-проєкту (повний код у репозиторії):
from anthropic import Anthropic
from pathlib import Path
import ast
import re
client = Anthropic()
class ArchitectureDiagramGenerator:
def analyze_project_structure(self, project_root: str) -> dict:
"""Анализирует структуру Python проекта через AST"""
structure = {
"modules": [],
"imports": [],
"classes": [],
"http_clients": [],
"db_models": [],
}
for py_file in Path(project_root).rglob("*.py"):
if any(skip in str(py_file) for skip in ["migrations", "__pycache__", ".venv", "test_"]):
continue
try:
source = py_file.read_text()
tree = ast.parse(source)
rel_path = str(py_file.relative_to(project_root))
module_name = rel_path.replace("/", ".").replace(".py", "")
structure["modules"].append(module_name)
for node in ast.walk(tree):
if isinstance(node, ast.ImportFrom) and node.module:
structure["imports"].append({"from": module_name, "to": node.module})
if isinstance(node, ast.ClassDef):
bases = [ast.unparse(b) for b in node.bases]
structure["classes"].append({"module": module_name, "name": node.name, "bases": bases})
if "requests.get" in source or "httpx.get" in source or "AsyncClient" in source:
urls = re.findall(r'["\']https?://[^"\']+["\']', source)
structure["http_clients"].append({"module": module_name, "external_calls": urls[:5]})
except (SyntaxError, UnicodeDecodeError):
pass
return structure
def generate_mermaid_diagram(self, analysis: dict, diagram_type: str = "c4") -> str:
"""Генерирует Mermaid диаграмму через LLM"""
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=4096,
system="""Ты — архитектор, генерирующий Mermaid диаграммы.
Создавай только валидный Mermaid синтаксис.
Для C4 Context/Container диаграмм:
- Группируй по слоям: Frontend, API, Services, Database, External
- Показывай основные взаимодействия стрелками
- Не перегружай — только ключевые компоненты
Для Flow диаграмм:
- Используй flowchart TD (top-down)
- Показывай бизнес-процесс понятно""",
messages=[{
"role": "user",
"content": f"""Создай {diagram_type} Mermaid диаграмму на основе анализа проекта.
Анализ:
{str(analysis)[:3000]}
Верни только Mermaid код (начиная с ```mermaid)."""
}]
)
return response.content[0].text
Додатково: як генеруються ER-діаграми
Для ER-діаграм система аналізує ORM-моделі (SQLAlchemy, Prisma). З них вилучаються сутності, поля, типи даних та зовнішні ключі. LLM формує erDiagram зі зв'язками. Це дозволяє швидко документувати схему бази даних та відстежувати зміни при кожному PR.Генерація діаграм послідовності та UML
Крім загальної архітектури, система вміє будувати sequence-діаграми для конкретних API-ендпоінтів та UML-діаграми класів з ORM-моделей. Наприклад, для SQLAlchemy моделей створюється erDiagram зі зв'язками, PK/FK та типами полів. Це особливо корисно при рев'ю змін у базі даних. Система підтримує C4 модель, UML, інфраструктурні схеми та графи залежностей.
Що таке жива документація і як вона працює?
Жива документація — це набір діаграм, який автоматично оновлюється при кожній зміні коду або інфраструктури. Вона зберігається в репозиторії поруч з кодом і публікується на внутрішніх wiki-сторінках. Команда завжди бачить актуальну картину системи, не витрачаючи час на ручне малювання. Це позбавляє від застарілих схем і непорозумінь. Замовте консультацію, щоб дізнатися, як впровадити генерацію у ваш проєкт.
Автоматичне оновлення в CI/CD
Ми інтегруємо скрипт у пайплайн, який при кожному push у main запускає аналіз та генерацію. Результат — PNG та Markdown-файли в docs-папці. Ось приклад функції для GitHub Actions:
import subprocess
from pathlib import Path
def update_diagrams_on_push(project_root: str, docs_dir: str):
generator = ArchitectureDiagramGenerator()
analysis = generator.analyze_project_structure(project_root)
diagrams = {
"architecture.md": generator.generate_mermaid_diagram(analysis, "c4"),
"database.md": generate_er_diagram(
(Path(project_root) / "models.py").read_text()
if (Path(project_root) / "models.py").exists() else ""
),
}
compose_file = Path(project_root) / "docker-compose.yml"
if compose_file.exists():
diagrams["infrastructure.md"] = generator.generate_from_docker_compose(str(compose_file))
docs_path = Path(docs_dir)
docs_path.mkdir(exist_ok=True)
for filename, content in diagrams.items():
(docs_path / filename).write_text(content)
for md_file in docs_path.glob("*.md"):
png_file = md_file.with_suffix(".png")
subprocess.run(["mmdc", "-i", str(md_file), "-o", str(png_file)], capture_output=True)
Практичний кейс: документування мікросервісної архітектури
З нашої практики — фінтех-стартап з 12 мікросервісами. Остання архітектурна діаграма була намальована кілька років тому. Онбординг нових розробників: «дивіться в код, інших джерел немає». Ми впровадили генерацію:
- Проаналізували docker-compose.yml та Terraform
- Згенерували C4 Context, Container, Infrastructure та ER-діаграми
- Інтегрували в GitHub Actions — оновлення при push у main
Результати:
- Час онбордингу (розуміння архітектури) — з 2 тижнів до 3 днів
- Діаграми актуальні на 100% — генеруються при кожному PR
- Виявлено 3 циклічні залежності між сервісами, які не помічали роками
Порівняння: AI-генерація vs ручне малювання
| Критерій | AI-генерація | Ручне малювання |
|---|---|---|
| Час оновлення | 2 хвилини | 2–4 години |
| Актуальність | 100% при коміті | Застаріває за місяць |
| Трудомісткість | Один раз налаштувати | Кожна зміна вручну |
| Виявлення помилок | Автоматично | Тільки при рев'ю |
AI-генерація швидша за ручне малювання в 60 разів. При цьому точність відповідності коду сягає 95% проти 40% при ручному оновленні. Економія бюджету на документацію — до 70%.
Типи генерованих діаграм
| Діаграма | Джерело | Оновлення |
|---|---|---|
| C4 Context | Весь проєкт | При зміні main services |
| ER Database | ORM-моделі | При зміні схеми БД |
| Infrastructure | Terraform / docker-compose | При зміні IaC |
| Sequence | Конкретний endpoint | За запитом |
| Dependency Graph | package.json / requirements.txt | При PR |
Що входить в роботу
- Аналіз кодової бази та інфраструктурних файлів
- Генерація 5+ типів діаграм (C4, ER, sequence, інфраструктура, граф залежностей)
- Інтеграція в CI/CD (GitHub Actions, GitLab CI, Bitbucket Pipelines)
- Публікація в Confluence, Notion або GitHub Pages
- Документація по процесу та скрипти для самостійного запуску
- Навчання команди (1–2 години)
Терміни
- Генерація одного типу діаграм (docker-compose або models): 1–2 дні
- Повний набір з кодової бази: 3–5 днів
- Інтеграція в CI/CD з авто-оновленням: 1 тиждень
- Confluence/Notion публікація: +2–3 дні
Вартість впровадження розраховується індивідуально і залежить від обсягу кодової бази. Замовте аудит поточної документації — оцінимо проєкт за 1 день. Отримайте консультацію, щоб обговорити вашу архітектуру. Гарантуємо, що після впровадження діаграми завжди відображатимуть реальність.







