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

262 lines
7.3 KiB
Markdown

# Архитектура 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):
```python
cipher = Fernet(key)
encrypted = cipher.encrypt(token.encode())
```
### 2. Webhook Validation
Каждый webhook проверяется по signature:
```python
signature = hmac.new(secret, payload, hashlib.sha256)
```
### 3. CORS
Только разрешенные origins в `settings.cors_origins`
## Масштабирование
### Horizontal scaling
1. **Multiple workers**
```bash
uvicorn app.main:app --workers 4
```
2. **Queue system**
- Celery для background tasks
- Redis для очередей
3. **Database**
- Миграция на PostgreSQL
- Connection pooling
### Vertical scaling
- Увеличение ресурсов Ollama
- Использование более мощных GPU
- Оптимизация промптов
## Мониторинг
### Метрики
- Количество ревью
- Среднее время ревью
- Количество комментариев
- Ошибки
### Логи
```python
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 интеграция