Перейти к контенту

ReVu — Open Source AI-ревьюер для ваших Pull Request

ReVu Иван Ашихмин 12

Из случайного разговора родился ReVu — self-hosted инструмент для автоматического код-ревью с помощью ИИ. В статье рассказываю, зачем он нужен, как работает и как запустить его у себя за пару минут.

ReVu — Open Source AI-ревьюер для ваших Pull Request
ReVu Иван Ашихмин 12

Всем привет!

Недавно мы с приятелем обсуждали, как устроены рабочие процессы в бигтех-компаниях и какую роль в них уже играет ИИ. Речь в основном шла о зарубежных компаниях — у него там есть знакомые, которые делились опытом изнутри. Один из самых любопытных моментов — использование искусственного интеллекта для предварительного код-ревью в Pull Request: прежде чем коллеги возьмутся проверять изменения, PR уже анализирует ИИ и указывает на потенциальные проблемы.

Эта идея меня зацепила, и я решил изучить, какие готовые решения уже существуют (кроме встроенного в GitHub Copilot). Из более-менее крупных нашёл только PR Agent. Я протестировал его, но по ряду причин он мне не подошёл: хотелось больше гибкости, настройки под свои нужды и возможности запускать всё самостоятельно, без передачи кода сторонним сервисам.

Так родился проект ReVuself-hosted инструмент для автоматического код-ревью в Pull Request с помощью ИИ. Он универсален, легко кастомизируется и не требует доверять исходный код внешним платформам.


ReVu

Наверняка вы спросите: почему именно ReVu?

Во-первых, название созвучно со словом review — короче, звучнее и проще запомнить.

Во-вторых, есть и шуточная версия (но с долей правды). Один из подписчиков моего чата как-то написал:

«Реву — это стабильное состояние моего ревьюера».

И в этом действительно есть смысл. Главная идея проекта — дать возможность ИИ “порыдать” над кодом первым 😅, чтобы выловить возможные ошибки и сомнительные решения ещё до того, как за дело возьмётся живой человек.

Процесс работы выглядит максимально просто:

  1. Разработчик пишет код.
  2. Коммитит изменения и открывает Pull Request.
  3. ИИ анализирует diff и оставляет комментарии по коду.
  4. Разработчик читает их, исправляет найденные косяки.
  5. Отправляет PR коллеге на финальное ревью.

Идея в том, чтобы повысить качество кода и ускорить процесс ревью. Человек-ревьюер сможет сосредоточиться на архитектуре, логике и сложных кейсах, а рутинные ошибки и очевидные проблемы будут отсеяны заранее. Это экономит время всей команды: PR уже “причесан” до того, как его увидит коллега.


Как ReVu работает?

ReVu — это self-hosted вебхук-сервис, который вы запускаете прямо у себя, без передачи кода внешним платформам.

Чтобы начать работу, нужно всего лишь настроить один конфигурационный файл:

  • Git-провайдер — может быть как публичный GitHub (в этом случае придётся настроить reverse-proxy, домен и SSL-сертификат), так и ваша собственная Gitea или GitLab, развернутая локально.
  • ИИ-провайдер — можно использовать облачные модели (например, OpenAI, DeepSeek, GigaChat), либо локальные решения, совместимые с API OpenAI или Ollama.

Дальше настраиваем вебхук на событие Pull Request в нужном репозитории или на уровне организации — и всё готово.

Дальнейший процесс выглядит так:

  1. Разработчик открывает PR.
  2. Git-провайдер отправляет вебхук в ReVu.
  3. ReVu принимает событие, проверяет подпись (чтобы убедиться, что запрос настоящий).
  4. Запрашивает у провайдера diff изменений.
  5. Передаёт diff в выбранную модель ИИ.
  6. Получает анализ и публикует его прямо в PR.

ReVu умеет оставлять комментарии в двух форматах:

  • Общий комментарий — один подробный отзыв по всему Pull Request.
  • Inline-комментарии — точечные замечания к конкретным строкам кода.

Так вы сами выбираете, что удобнее для вашего процесса: быстрый общий фидбек или детальное построчное ревью.


Запуск за 5 минут

Запустить ReVu проще простого:

Скачайте актуальный конфигурационный файл и отредактируйте его под свой проект:

mkdir -p config && wget -O settings.yaml https://raw.githubusercontent.com/proDreams/revu/refs/heads/main/config/settings.yaml.example

nano settings.yaml

Минимальная конфигурация:

# Формат ревью. Доступны варианты: "inline" и "comment"
REVIEW_MODE: "inline"  

GIT_PROVIDER_CONFIG:
  # Используемый git-провайдер.
  # Доступные варианты: "github" и "gitea"
  GIT_PROVIDER: "gitea"
  # Personal Access Token от учётной записи с правами repo
  GIT_PROVIDER_USER_TOKEN: "..."
  # Опциональный
  # URL git-провайдера. Применимо только к gitea.
  # Можно указать локальный инстанс, например, http://gitea:3000
  GIT_PROVIDER_URL: "https://..."
  # Секретный ключ для валидации вебхука
  GIT_PROVIDER_SECRET_TOKEN: "..."  

AI_PROVIDER_CONFIG:
  # Используемый ИИ-провайдер.
  # Доступные варианты: "openai", "openai_compatible", "gigachat" и "yandexgpt"
  AI_PROVIDER: "yandexgpt"
  # API-ключ от ИИ провайдера
  AI_PROVIDER_API_KEY: "..."
  # Опциональный
  # Базовый URL ИИ-провайдера.
  # Применимо только к openai_compatible
  AI_PROVIDER_BASE_URL: "..."  
  # Используемая ИИ модель
  AI_PROVIDER_MODEL: "yandexgpt"
  # Опционально
  # Параметр области действия.
  # Применимо только к "gigachat"
  AI_PROVIDER_SCOPE: "GIGACHAT_API_PERS"
  # Опционально
  # Идентификатор рабочей директории.
  # Применимо только к "yandexgpt"
  AI_PROVIDER_FOLDER_ID

Скачайте docker-compose.yaml:

wget -O docker-compose.yaml https://raw.githubusercontent.com/proDreams/revu/refs/heads/main/docker-compose.yaml

Запустите контейнер:

sudo docker compose up -d

Настройте вебхук на событие Pull Request в вашем репозитории (или на уровне организации).

Готово — ReVu начнёт автоматически анализировать новые PR и публиковать ревью.


Технический стек

В основе ReVu лежит FastAPI — лёгкий, быстрый и современный Python-фреймворк для веб-приложений и API. Он принимает входящие вебхуки от Git-провайдеров и с помощью Pydantic валидирует данные: проверяет структуру событий, типы полей и корректность переданной информации.

Для общения с внешними сервисами — как с Git-провайдерами, так и с ИИ-моделями — используется HTTPX. Эта библиотека хорошо работает в асинхронных приложениях и позволяет гибко управлять таймаутами, повторными попытками запросов и обработкой ошибок.

Архитектурно проект строится по принципам Domain-Driven Design (DDD). Да, возможно не в «каноничном» виде, но этого уже достаточно, чтобы обеспечить модульность и масштабируемость. Благодаря разделению на домены, инфраструктуру и интерфейсы, добавление нового ИИ-провайдера или интеграция с другим Git-сервисом сводится к созданию отдельных адаптеров и портов без необходимости переписывать ядро приложения.

Сборка и развёртывание автоматизированы с помощью Docker — проект можно поднять в пару команд без ручной настройки окружения. А CI/CD на основе GitHub Actions упрощает публикацию новых версий: при каждом обновлении кода создаются и загружаются готовые контейнерные образы, а также прогоняются проверки линтером (в будущем и тесты).


Планы на развитие

Развивать ReVu есть куда — и список идей уже внушительный.

Первая приоритетная цель — расширить поддержку провайдеров. Сейчас реализованы GitHub и Gitea, а в планах — добавить интеграции с GitLab, Bitbucket и другими популярными сервисами. Аналогично и для ИИ: хочется, чтобы ReVu работал не только с OpenAI, GigaChat и ЯндексGPT, но и с Gemini, Anthropic, DeepSeek, Qwen и другими моделями, включая локальные. Чем больше вариантов, тем проще будет встроить ReVu в существующий процесс без компромиссов.

Дальше — «чистовая» доработка проекта. Сейчас ReVu во многом вырос из эксперимента и проверки гипотезы, поэтому пока не хватает хорошего покрытия тестами и docstring-комментариев. План — привести код в порядок, сделать его более дружелюбным для контрибьюторов и надёжным в продакшене.

Есть и более амбициозная цель — поддержка нескольких Git-провайдеров на одном инстансе. Сейчас один развернутый ReVu работает только с одним провайдером. Я хочу, чтобы можно было подключать разные источники кода одновременно, что упростит жизнь командам, где смешаны GitHub, Gitea и, например, внутренние GitLab-сервера.

Отдельная задача — гибкая настройка промптов. Возможность менять системный промпт уже заложена, но пока не задокументирована. Нужно протестировать и продумать, как сделать её безопасной: чтобы пользователь мог адаптировать тон и формат ревью под себя, но при этом не ломал структуру данных, возвращаемых ИИ.

И ещё одна интересная идея — формат GitHub Action. Хотелось бы дать возможность запускать ReVu прямо в пайплайне GitHub Actions без необходимости поднимать отдельный сервер. Это особенно удобно для небольших проектов и open source.


Документация и репозиторий

На данный момент вся документация проекта находится прямо в README.md — там есть полноценная инструкция по запуску, описание конфигурации и список поддерживаемых провайдеров.

В будущем планирую вынести материалы в отдельную Wiki: добавить больше примеров, сценариев использования и расширенных гайдов по настройке.

Исходники и документацию можно найти здесь:

Если проект вам понравился, буду рад вашим звёздочкам ⭐️ на GitHub и любым идеям по улучшению. Pull Request’ы приветствуются!


Заключение

Так из случайного разговора с приятелем вырос целый проект. Я просто хотел разобраться, как ИИ может ускорить и упростить процесс ревью, а в итоге появился ReVu — инструмент, который уже помогает мне самому и, надеюсь, будет полезен и другим разработчикам, особенно тем, кто ценит качество кода и не хочет зависеть от сторонних сервисов.

Сейчас я отправил ReVu на конкурс open source-проектов «Код без границ», который проводят Хабр и GitVerse. Для меня это хороший повод показать работу сообществу и собрать обратную связь.

Аватар автора

Автор

Иван Ашихмин

Программист, фрилансер и автор гайдов. Занимаюсь разработкой ботов, сайтов и не только.

Войдите, чтобы оставить комментарий.

Комментариев пока нет.