8.9 KiB
8.9 KiB
AI Code Review Agent 🤖
AI агент для автоматического ревью Pull Request с поддержкой Gitea, GitHub и Bitbucket.
Работает на LangChain/LangGraph с локальной LLM через Ollama.
🌟 Особенности
- ✅ Поддержка множества Git платформ: Gitea (приоритет), GitHub, Bitbucket
- 🤖 AI-анализ кода: использует Ollama с моделью codellama
- 🔄 Real-time обновления: WebSocket для отслеживания прогресса
- 🎯 Умный анализ: находит баги, проблемы безопасности, нарушения best practices
- 🌐 Современный UI: React + TypeScript + Tailwind CSS
- 📊 Дашборд: статистика и мониторинг ревью
- 🪝 Webhook интеграция: автоматический запуск при создании/обновлении PR
🏗️ Архитектура
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Git Platform│─────▶│ Backend │─────▶│ Ollama │
│ (Webhook) │ │ FastAPI + │ │ (codellama)│
└─────────────┘ │ LangGraph │ └─────────────┘
└──────┬───────┘
│
▼
┌──────────────┐
│ Frontend │
│ React + WS │
└──────────────┘
📋 Требования
- Python 3.11+
- Node.js 18+
- Ollama (установлен и запущен)
🚀 Быстрый старт
1. Установка Ollama и модели
# Установите Ollama с https://ollama.ai/
# Загрузите модель codellama
ollama pull codellama
# Запустите Ollama
ollama serve
2. Backend (FastAPI)
cd backend
# Создайте виртуальное окружение
python -m venv venv
source venv/bin/activate # На Windows: venv\Scripts\activate
# Установите зависимости
pip install -r requirements.txt
# Создайте .env файл
cp .env.example .env
# Отредактируйте .env и установите:
# - SECRET_KEY (генерируйте случайную строку)
# - ENCRYPTION_KEY (генерируйте случайную строку)
# Запустите сервер
python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
Backend будет доступен на http://localhost:8000
Swagger документация: http://localhost:8000/docs
3. Frontend (React)
cd frontend
# Установите зависимости
npm install
# Запустите dev сервер
npm run dev
Frontend будет доступен на http://localhost:5173
🔧 Настройка
Backend (.env)
# Ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=codellama
# Database
DATABASE_URL=sqlite+aiosqlite:///./review.db
# Security
SECRET_KEY=your-secret-key-here
ENCRYPTION_KEY=your-encryption-key-here
# Server
HOST=0.0.0.0
PORT=8000
DEBUG=True
# CORS
CORS_ORIGINS=http://localhost:5173,http://localhost:3000
Frontend (.env)
VITE_API_URL=http://localhost:8000
VITE_WS_URL=ws://localhost:8000
📖 Использование
1. Добавление репозитория
- Откройте UI:
http://localhost:5173 - Перейдите на страницу Репозитории
- Нажмите + Добавить репозиторий
- Заполните форму:
- Название: имя вашего проекта
- Платформа: Gitea / GitHub / Bitbucket
- URL: полный URL репозитория
- API токен: токен доступа к Git платформе
2. Настройка webhook в Gitea
- Скопируйте Webhook URL из карточки репозитория
- В Gitea: Settings → Webhooks → Add Webhook
- Вставьте URL
- Выберите события: Pull Request
- Сохраните
3. Создание Pull Request
- Создайте PR в вашем репозитории
- Webhook автоматически запустит ревью
- Следите за прогрессом в UI (страница Ревью)
- Комментарии появятся в PR автоматически
🎯 Что анализирует AI
- 🐛 Потенциальные баги: логические ошибки, null/undefined
- 🔒 Безопасность: SQL injection, XSS, утечки данных
- 📝 Best practices: SOLID, чистый код, паттерны
- ⚡ Производительность: неэффективные алгоритмы, утечки памяти
- 📖 Читаемость: понятность кода, комментарии
📊 API Endpoints
Repositories
GET /api/repositories- список репозиториевPOST /api/repositories- добавить репозиторийPUT /api/repositories/{id}- обновитьDELETE /api/repositories/{id}- удалить
Reviews
GET /api/reviews- список ревьюGET /api/reviews/{id}- детали ревьюPOST /api/reviews/{id}/retry- повторить ревьюGET /api/reviews/stats/dashboard- статистика
Webhooks
POST /api/webhooks/gitea/{repository_id}- Gitea webhookPOST /api/webhooks/github/{repository_id}- GitHub webhookPOST /api/webhooks/bitbucket/{repository_id}- Bitbucket webhook
WebSocket
ws://localhost:8000/ws/reviews- real-time обновления
🛠️ Разработка
Backend
cd backend
# Запуск с hot reload
uvicorn app.main:app --reload
# Миграции (если используется Alembic)
alembic upgrade head
Frontend
cd frontend
# Dev сервер
npm run dev
# Сборка
npm run build
# Предпросмотр сборки
npm run preview
# Линтинг
npm run lint
🗂️ Структура проекта
platform/review/
├── backend/
│ ├── app/
│ │ ├── agents/ # LangGraph агенты
│ │ ├── api/ # API endpoints
│ │ ├── models/ # Database модели
│ │ ├── schemas/ # Pydantic схемы
│ │ ├── services/ # Git платформы
│ │ ├── webhooks/ # Webhook обработчики
│ │ ├── config.py
│ │ ├── database.py
│ │ └── main.py
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── api/ # API клиент
│ │ ├── components/ # React компоненты
│ │ ├── pages/ # Страницы
│ │ ├── types/ # TypeScript типы
│ │ └── App.tsx
│ └── package.json
├── cloud.md # План проекта
└── README.md # Этот файл
🔐 Безопасность
- API токены шифруются перед сохранением (Fernet)
- Webhook signature validation
- CORS настроен для конкретных доменов
- Rate limiting (рекомендуется для production)
🚀 Production развертывание
Docker (рекомендуется)
# TODO: Добавить Dockerfile и docker-compose.yml
Manual
- Используйте PostgreSQL вместо SQLite
- Настройте reverse proxy (nginx)
- Используйте HTTPS
- Настройте environment variables
- Используйте process manager (systemd/supervisor)
🤝 Вклад в разработку
Contributions welcome!
- Fork проект
- Создайте feature branch
- Commit изменения
- Push в branch
- Создайте Pull Request
📝 Лицензия
MIT License
🙏 Благодарности
- LangChain - фреймворк для LLM
- Ollama - локальный запуск LLM
- FastAPI - веб-фреймворк
- React - UI библиотека
📞 Поддержка
Возникли проблемы? Создайте Issue в репозитории.
Made with ❤️ and 🤖 AI