code-review-agent/ARCHITECTURE.md
Primakov Alexandr Alexandrovich 09cdd06307 init
2025-10-12 23:15:09 +03:00

7.3 KiB
Raw Permalink Blame History

Архитектура AI Code Review Agent

Общая схема

┌─────────────────────────────────────────────────────────────┐
│                         User                                 │
└───────────────────────────┬─────────────────────────────────┘
                            │
                            ▼
                   ┌────────────────┐
                   │   Frontend     │
                   │   React + WS   │
                   └────────┬───────┘
                            │
                            ▼
                   ┌────────────────┐
                   │   FastAPI      │
                   │   Backend      │
                   └────┬───┬───┬───┘
                        │   │   │
        ┌───────────────┘   │   └───────────────┐
        ▼                   ▼                   ▼
┌───────────────┐  ┌────────────────┐  ┌───────────────┐
│ Git Platform  │  │   LangGraph    │  │   Database    │
│  (Webhook)    │  │     Agent      │  │   SQLite      │
└───────────────┘  └────────┬───────┘  └───────────────┘
                            │
                            ▼
                   ┌────────────────┐
                   │    Ollama      │
                   │  (codellama)   │
                   └────────────────┘

Backend архитектура

1. FastAPI Layer

Отвечает за:

  • HTTP endpoints
  • WebSocket connections
  • CORS и middleware
  • Request validation

Компоненты:

  • app/main.py - главное приложение
  • app/api/ - REST endpoints
  • app/database.py - DB session management

2. Agent Layer (LangGraph)

Отвечает за:

  • Workflow управление
  • Анализ кода через LLM
  • Генерация комментариев

Компоненты:

  • app/agents/reviewer.py - главный агент
  • app/agents/tools.py - инструменты (анализ кода)
  • app/agents/prompts.py - промпты для LLM

Граф агента:

START
  │
  ├─► fetch_pr_info     (получение PR)
  │
  ├─► fetch_files       (список файлов)
  │
  ├─► analyze_files     (анализ через Ollama)
  │
  ├─► post_comments     (отправка комментариев)
  │
  └─► complete_review   (завершение)
  │
END

3. Service Layer

Отвечает за:

  • Интеграция с Git платформами
  • API запросы к Gitea/GitHub/Bitbucket

Компоненты:

  • app/services/base.py - базовый класс
  • app/services/gitea.py - Gitea API
  • app/services/github.py - GitHub API
  • app/services/bitbucket.py - Bitbucket API

4. Data Layer

Отвечает за:

  • Хранение данных
  • ORM операции

Модели:

  • Repository - репозитории
  • PullRequest - PR
  • Review - ревью
  • Comment - комментарии

Frontend архитектура

1. Router Layer

React Router для навигации:

  • / - Dashboard
  • /repositories - управление репозиториями
  • /reviews - список ревью
  • /reviews/:id - детали ревью

2. State Management

TanStack Query для сервер-стейта:

  • Кеширование данных
  • Auto-refetch
  • Optimistic updates

3. WebSocket Layer

Real-time обновления:

  • Singleton WebSocket клиент
  • Event-based подписки
  • Auto-reconnect

4. UI Components

Переиспользуемые компоненты:

  • RepositoryForm - форма добавления
  • ReviewProgress - прогресс бар
  • CommentsList - список комментариев
  • WebSocketStatus - статус подключения

Поток данных

Webhook → Review flow

1. Git Platform отправляет webhook
   POST /api/webhooks/{platform}/{repo_id}
   
2. Webhook handler создает Review
   - Сохраняет PR в DB
   - Создает Review запись
   - Запускает background task
   
3. Background task запускает LangGraph агент
   - Получает информацию о PR
   - Скачивает измененные файлы
   - Анализирует через Ollama
   - Генерирует комментарии
   
4. Agent сохраняет комментарии в DB
   
5. Agent отправляет комментарии в PR
   
6. WebSocket broadcast обновлений
   
7. Frontend обновляет UI

Безопасность

1. Encryption

API токены шифруются перед сохранением (Fernet):

cipher = Fernet(key)
encrypted = cipher.encrypt(token.encode())

2. Webhook Validation

Каждый webhook проверяется по signature:

signature = hmac.new(secret, payload, hashlib.sha256)

3. CORS

Только разрешенные origins в settings.cors_origins

Масштабирование

Horizontal scaling

  1. Multiple workers

    uvicorn app.main:app --workers 4
    
  2. Queue system

    • Celery для background tasks
    • Redis для очередей
  3. Database

    • Миграция на PostgreSQL
    • Connection pooling

Vertical scaling

  • Увеличение ресурсов Ollama
  • Использование более мощных GPU
  • Оптимизация промптов

Мониторинг

Метрики

  • Количество ревью
  • Среднее время ревью
  • Количество комментариев
  • Ошибки

Логи

import logging
logger = logging.getLogger(__name__)
logger.info("Review started", extra={"review_id": id})

Deployment

Development

  • SQLite
  • Local Ollama
  • Dev сервер

Production

  • PostgreSQL
  • Redis
  • Nginx reverse proxy
  • Systemd services
  • HTTPS
  • Rate limiting

Будущие улучшения

  1. Множественные LLM

    • Поддержка OpenAI, Anthropic
    • Выбор модели на уровне репозитория
  2. Настраиваемые правила

    • YAML конфиг с правилами
    • Custom промпты
  3. Кеширование

    • Redis для результатов анализа
    • Избежание повторного анализа
  4. Metrics & Analytics

    • Prometheus metrics
    • Grafana dashboards
  5. Notifications

    • Email уведомления
    • Slack/Discord интеграция