Перейти к содержимому
arckep.ru — все нейросети в одном месте без VPN Перейти
>AISTUDY_
Поддержать
AUTHORСвежий выпуск №024 → Куда внедрять агентов: фронт или тыл

Модуль 6.2 · Урок 4

CI/CD и мониторинг автономных агентов

30 мин
Практика
6.2 / Урок 4 из 4

Цель

В прошлом уроке мы создали PROJECT.md и систему памяти. Теперь настроим все остальное:

  • AI-ревью каждого PR
  • Автоматический анализ упавших тестов
  • Автообновление документации
  • Мультиагентную работу
  • Чек-лист безопасности

После этого урока у вас будет полностью настроенная автономная рабочая среда.

Шаг 3: CI/CD с AI

AI Code Review

Настройка AI-ревьюера подробно разобрана в уроке CI/CD руками агента — готовые конфиги для Claude Code Action и PR-Agent. Используйте те YAML-файлы.

Анализ упавших тестов

Этот workflow срабатывает автоматически, когда CI-тесты падают. Он забирает лог ошибки и отправляет в LLM для анализа. На практике агент часто находит причину быстрее человека, потому что видит полный stacktrace без «замыливания глаз».

# .github/workflows/analyze-failures.yml
name: Analyze Test Failures
on:
  workflow_run:
    workflows: ["Tests"]
    types: [completed]
jobs:
  analyze:
    if: github.event.workflow_run.conclusion == 'failure'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Get logs
        run: gh run view ${{ github.event.workflow_run.id }} --log-failed > failure.log
      - name: Analyze
        run: |
          # Универсально: отправьте лог в любой LLM
          cat failure.log | your-ai-tool analyze \
            --prompt "Проанализируй причину падения тестов, предложи исправление"

Замените your-ai-tool analyze на конкретный инструмент: Claude Code CLI, Codex CLI или прямой вызов API. Важно: результат анализа лучше записывать в комментарий к PR, а не в отдельный issue, чтобы контекст не терялся.

Автообновление документации

Документация, которая расходится с кодом, хуже отсутствующей — она вводит в заблуждение. Workflow ниже отслеживает изменения в файлах роутов и запускает проверку актуальности документации.

# .github/workflows/auto-docs.yml
name: Update Docs
on:
  push:
    branches: [main]
    paths: ['src/**']
jobs:
  update:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Check if docs need update
        run: |
          CHANGED=$(git diff HEAD~1 --name-only src/modules/*/routes.py | wc -l)
          if [ "$CHANGED" -gt 0 ]; then
            echo "API routes changed -- checking docs"
            # Агент проверяет соответствие docs/ актуальному коду
            # и создает PR при необходимости
          fi

Шаг 4: Мультиагентная настройка

AGENTS.md (для сред, поддерживающих субагентов)

Файл AGENTS.md описывает роли субагентов — специализированных помощников, каждый со своими правами и ограничениями. Принцип минимальных привилегий: ревьюер не может менять код, а кодер не может деплоить. Это работает в Claude Code (нативная поддержка), а в других средах можно реализовать через отдельные конфиги.

# AGENTS.md

## code-writer
Роль: Пишет код по спецификации
Инструменты: чтение/запись файлов в src/, запуск тестов
Ограничения: не менять конфиги, не удалять файлы, не трогать .env
Модель: быстрая (sonnet / gpt-4o / gemini-flash)

## code-reviewer
Роль: Ревью кода на баги, безопасность, стиль
Инструменты: только чтение файлов
Ограничения: не вносить изменения, только комментарии
Модель: мощная (opus / gpt-4o / gemini-pro)

## ops-monitor
Роль: Мониторинг CI/CD, анализ логов
Инструменты: чтение логов, GitHub API (read-only)
Ограничения: не менять код, не деплоить
Модель: средняя (sonnet / gpt-4o-mini)

Для LangChain/CrewAI/AutoGen

Если вы строите мультиагентную систему программно, те же роли описываются в коде. Обратите внимание на max_iter — это страховка от зацикливания: без лимита агент может бесконечно «улучшать» код. Reviewer получает только FileRead() — физически не может внести изменения, даже если prompt injection попытается его заставить.

from crewai import Agent, Crew, Task

writer = Agent(
    role='Code Writer',
    goal='Написать чистый код по спецификации',
    tools=[FileWrite(), RunTests()],
    llm='gpt-4o',
    max_iter=5  # Лимит попыток
)

reviewer = Agent(
    role='Code Reviewer',
    goal='Найти баги и проблемы',
    tools=[FileRead()],  # Только чтение
    llm='claude-sonnet',
    max_iter=3
)

crew = Crew(
    agents=[writer, reviewer],
    tasks=[
        Task(description="Реализуй endpoint...", agent=writer),
        Task(description="Проведи ревью...", agent=reviewer),
    ],
    verbose=True
)

Шаг 5: Чек-лист безопасности

Файловая система

  • .cursorignore / .gitignore содержит: .env, secrets/, *.key, *.pem
  • Агент работает только в директории проекта
  • Production-конфиги недоступны агенту

Git

  • Branch protection на main: требуется PR + approve
  • Агент коммитит только в feature-ветки
  • Подпись коммитов для различения человек/агент

CI/CD

  • AI-ревьюер имеет permissions: read + pull-requests: write
  • Секреты НЕ доступны в контексте AI-ревьюера
  • Есть alert на >20 файлов изменений от агента

Мониторинг

  • Логируются все действия агента
  • Есть dashboard с метриками: кол-во PR, изменений, тестов
  • Алерт при аномальной активности

«Один день с автономным агентом»

08:00  Вы приходите на работу
       -> Агент за ночь:
         - Отсортировал 5 новых issues (лейблы + приоритеты)
         - Обнаружил уязвимость в зависимости, создал issue
         - Проверил, что ночной деплой прошел без ошибок

09:00  Вы начинаете кодить
       -> Агент в IDE:
         - Предлагает дополнения с учетом PROJECT.md
         - Помнит решение про Valkey из .memory/decisions.md
         - Автоматически создает тесты для нового кода

11:00  Вы создаете PR
       -> Агент в CI:
         - Автоматический ревью через 2 минуты
         - Нашел потенциальный N+1 запрос, оставил комментарий
         - Тесты зеленые
         - Документация обновлена автоматически

14:00  Тесты на staging упали
       -> Агент:
         - Проанализировал лог ошибки
         - Определил: несовместимость после обновления библиотеки
         - Создал PR с фиксом
         - Вам остается только approve

17:00  Вы уходите
       -> Агент на дежурстве:
         - Мониторит логи production
         - Если аномалия -- отправит alert в Slack/Telegram
         - Новые issues будут отсортированы к утру

Итоговая структура проекта

my-project/
├── PROJECT.md                    # Единый источник правды
├── CLAUDE.md                     # -> сгенерирован из PROJECT.md
├── .cursorrules                  # -> сгенерирован из PROJECT.md
├── .github/
│   ├── copilot-instructions.md   # -> сгенерирован из PROJECT.md
│   └── workflows/
│       ├── ai-review.yml         # AI code review
│       ├── auto-docs.yml         # Автообновление документации
│       └── analyze-failures.yml  # Анализ упавших тестов
├── AGENTS.md                     # Описание субагентов
├── .memory/
│   ├── decisions.md              # Архитектурные решения
│   ├── learnings.md              # Накопленные знания
│   └── patterns.md               # Паттерны проекта
├── .cursorignore                 # Конфиденциальные файлы
├── mcp-config.json               # MCP-серверы (если используются)
├── scripts/
│   └── generate-agent-configs.sh # Генерация конфигов
├── src/                          # Код проекта
└── tests/                        # Тесты

Финальный чек-лист

Практическое задание
  1. Настройте AI code review для одного из ваших репозиториев (Claude Code Action или PR-Agent)
  2. Создайте AGENTS.md с описанием минимум 2 субагентов
  3. Пройдите чек-лист безопасности — отметьте статус каждого пункта
  4. Проведите «учебный день» с автономным агентом: создайте PR, проверьте качество AI-ревью, настройте алерт

Что дальше

Вы настроили автономную среду. Теперь важно:

  1. Мониторить первую неделю — смотрите все комментарии AI-ревьюера. Они адекватны? Настройте промпты.
  2. Обновлять .memory/ — после каждого значимого решения добавляйте запись.
  3. Пересматривать раз в месяц — PROJECT.md устарел? Обновите.
  4. Расширять постепенно — начните с review-only, потом добавьте auto-docs, потом auto-fix.

Мы размещаем рекламу, так как это позволяет нам готовить для вас свежие материалы и покрывать наши расходы. Рекламодателей выбираем адекватных.

Скачать урок

Есть идея или нашли ошибку?

// Обсуждение

Можно писать анонимно. Укажите email, чтобы получать уведомления об ответах.