7.3 KiB
7.3 KiB
Архитектура 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 endpointsapp/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 APIapp/services/github.py- GitHub APIapp/services/bitbucket.py- Bitbucket API
4. Data Layer
Отвечает за:
- Хранение данных
- ORM операции
Модели:
Repository- репозиторииPullRequest- PRReview- ревью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
-
Multiple workers
uvicorn app.main:app --workers 4 -
Queue system
- Celery для background tasks
- Redis для очередей
-
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
Будущие улучшения
-
Множественные LLM
- Поддержка OpenAI, Anthropic
- Выбор модели на уровне репозитория
-
Настраиваемые правила
- YAML конфиг с правилами
- Custom промпты
-
Кеширование
- Redis для результатов анализа
- Избежание повторного анализа
-
Metrics & Analytics
- Prometheus metrics
- Grafana dashboards
-
Notifications
- Email уведомления
- Slack/Discord интеграция