code-review-agent/docs/ARCHITECTURE.md

262 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Архитектура 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 интеграция