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 интеграция
|
|
|