/
Вопросы и ответы
/
Промт-инжиниринг
/

LLM для архитектурных решений

LLM для архитектурных решений

9 часов назад

Никита Вихров

Ответы

0

LLM для архитектурных решений

ИИ не принимает архитектурные решения вместо тебя — он помогает быстрее перебрать варианты, найти слабые места и сформулировать trade-offs. Это как иметь умного собеседника для обсуждения без записи в calendar.


Разбор trade-offs перед решением

from anthropic import Anthropic

client = Anthropic()


def analyze_architectural_decision(
    problem: str,
    options: list[str],
    constraints: list[str]
) -> str:
    options_text = "\n".join(f"- {opt}" for opt in options)
    constraints_text = "\n".join(f"- {c}" for c in constraints)

    response = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=2048,
        system="""Ты — опытный software architect.
Анализируешь архитектурные решения честно: плюсы, минусы, риски.
Не выбираешь «правильный» ответ — показываешь trade-offs.
Для каждого варианта: когда подходит, когда нет, скрытые риски.""",
        messages=[{
            "role": "user",
            "content": f"""Задача: {problem}

Варианты:
{options_text}

Ограничения проекта:
{constraints_text}

Разбери каждый вариант."""
        }]
    )
    return response.content[0].text


analysis = analyze_architectural_decision(
    problem="Нужно реализовать уведомления пользователей (email, push, SMS)",
    options=[
        "Синхронная отправка прямо в HTTP-запросе",
        "Очередь задач (Celery + Redis)",
        "Отдельный микросервис уведомлений",
        "Managed-сервис (AWS SES + SNS)",
    ],
    constraints=[
        "Команда 3 человека",
        "MVP, нужно быстро",
        "До 10 000 пользователей в ближайший год",
        "Нет DevOps в команде",
    ]
)
print(analysis)

Поиск слабых мест в архитектуре

def find_architectural_weaknesses(architecture_description: str) -> str:
    response = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=2048,
        system="""Ты — security и reliability инженер.
Ищешь слабые места в архитектуре: single points of failure, узкие места производительности,
проблемы безопасности, сложность поддержки, скрытые зависимости.
Приоритизируй по критичности. Конкретно, без воды.""",
        messages=[{
            "role": "user",
            "content": f"Найди слабые места в этой архитектуре:\n\n{architecture_description}"
        }]
    )
    return response.content[0].text


weaknesses = find_architectural_weaknesses("""
Веб-приложение: FastAPI + PostgreSQL на одном сервере.
Все файлы пользователей хранятся на том же сервере в /uploads.
Сессии в памяти приложения.
Бэкапы БД раз в день через cron.
Один инстанс приложения, nginx перед ним.
Деплой: rsync файлов на сервер, перезапуск systemd.
""")
print(weaknesses)

Генерация ADR (Architecture Decision Record)

ADR — документ фиксирующий архитектурное решение, контекст и последствия. ИИ помогает не забыть написать:

def generate_adr(
    title: str,
    context: str,
    decision: str,
    alternatives_considered: list[str]
) -> str:
    alts_text = "\n".join(f"- {alt}" for alt in alternatives_considered)

    response = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=1024,
        system="""Пишешь Architecture Decision Record (ADR) в формате Michael Nygard.
Структура: Title, Status, Context, Decision, Consequences (positive и negative).
Конкретно, без маркетинга. Последствия — честные, включая негативные.""",
        messages=[{
            "role": "user",
            "content": f"""Заголовок: {title}
Контекст: {context}
Решение: {decision}
Рассматривались альтернативы:
{alts_text}"""
        }]
    )
    return response.content[0].text


adr = generate_adr(
    title="Использование PostgreSQL вместо MongoDB",
    context="Нужно хранить данные пользователей и их транзакции. Схема данных стабильная.",
    decision="Выбрали PostgreSQL как основную БД",
    alternatives_considered=[
        "MongoDB — гибкая схема, но ACID только в транзакциях",
        "MySQL — хорошо известен команде, но хуже с JSON и полнотекстовым поиском",
        "SQLite — только для разработки, не для продакшна",
    ]
)

# Сохраняем в docs/adr/
with open("docs/adr/001-postgresql-over-mongodb.md", "w") as f:
    f.write(adr)
print(adr)

Оценка сложности рефакторинга

Перед тем как брать задачу — оцени масштаб:

def estimate_refactoring_complexity(
    current_architecture: str,
    target_architecture: str,
    codebase_size: str
) -> str:
    response = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=1024,
        system="""Оцениваешь сложность архитектурного рефакторинга.
Давай реалистичную оценку: что придётся изменить, какие риски, сколько времени.
Разбей на фазы с оценкой каждой. Укажи что можно сделать параллельно с основной разработкой,
а что требует остановки фич.""",
        messages=[{
            "role": "user",
            "content": f"""Текущая архитектура: {current_architecture}
Целевая архитектура: {target_architecture}
Размер кодовой базы: {codebase_size}

Оцени сложность и план миграции."""
        }]
    )
    return response.content[0].text


estimate = estimate_refactoring_complexity(
    current_architecture="Монолит на Django, всё в одном репозитории, 3 года разработки",
    target_architecture="Микросервисы: сервис пользователей, сервис заказов, сервис уведомлений",
    codebase_size="~50 000 строк кода, 800 тестов, 5 разработчиков"
)
print(estimate)

ИИ хорошо работает как собеседник для обдумывания архитектуры — но финальное решение остаётся за командой. Модель не знает специфику твоего бизнеса, историю команды и реальные ограничения.

На курсе «ИИ для разработчиков» на Хекслете разбирают как использовать ИИ-агентов для проектирования и реализации — от API-контракта до деплоя на реальном проекте.

9 часов назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845