262 lines
7.3 KiB
Markdown
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 интеграция
|
||
|