Last translated: 26 Jun 2025

Translation Not Available Yet

This repository's README hasn't been translated yet. Once translated, it will be easier to read and understand in your native language (中文).

After translating, add the links to README so others can view it directly.

Deutsch | English | Español | français | 日本語 | 한국어 | Português | Русский | 中文

AI Code Review Helper

Автоматизированный помощник для ревью кода на основе LLM. Отслеживает изменения в PR/MR через GitHub/GitLab Webhook, анализирует код с помощью ИИ и автоматически публикует комментарии с замечаниями в PR/MR, поддерживая различные каналы уведомлений.

Смотреть демонстрацию на Bilibili

Из-за ограничений GitHub встроенный видеоплеер недоступен.

Основные функции

  • Поддержка нескольких платформ: Интеграция с GitHub и GitLab Webhook для отслеживания событий Pull Request / Merge Request.
  • Режимы интеллектуального ревью:
    • Детализированный ревью (/github_webhook, /gitlab_webhook): ИИ анализирует каждый измененный файл, выявляя конкретные проблемы. Замечания публикуются в структурированном виде (с указанием строк кода, классификацией проблем, уровнем серьезности, анализом и рекомендациями) в виде отдельных комментариев к PR/MR. Модель ИИ выводит результаты анализа в формате JSON, которые система преобразует в независимые комментарии.
    • Общий ревью (/github_webhook_general, /gitlab_webhook_general): ИИ анализирует изменения в каждом файле в целом и генерирует сводный комментарий в формате Markdown для каждого файла.
  • Автоматизированный процесс:
    • Автоматическая публикация замечаний ИИ (в детализированном режиме — несколько, в общем — по одному на файл) в PR/MR.
    • После завершения ревью всех файлов автоматически публикуется сводный комментарий в PR/MR.
    • Даже если ИИ не обнаружил проблем, публикуется соответствующее уведомление и итоговый комментарий.
    • Асинхронная обработка задач ревью для быстрого ответа на Webhook.
    • Использование Redis для предотвращения дублирования ревью одного и того же коммита.
  • Гибкая настройка:
    • Базовая конфигурация через переменные окружения.
    • Веб-панель управления (/admin) и API (/config/*) для управления:
      • Webhook Secret и Access Token для репозиториев GitHub/GitLab.
      • Параметрами LLM (API Key, Base URL, Model).
      • URL Webhook для уведомлений (WeCom, пользовательские Webhook).
      • Просмотра истории ревью.
    • Хранение конфигурации и результатов в Redis.
  • Уведомления и логирование:
    • Отправка сводки ревью (с ссылкой на PR/MR, информацией о ветке и результатами) в WeCom и пользовательские Webhook.
    • Хранение результатов ревью в Redis (по умолчанию 7 дней), поддержка просмотра через панель управления и автоматическая очистка записей закрытых/мерженных PR/MR.
  • Развертывание: Поддержка Docker и запуска Python-приложения напрямую.

🚀 Быстрый старт

🐳 Быстрое развертывание

# 使用官方镜像
docker run -d -p 8088:8088 \
  -e ADMIN_API_KEY="your-key" \
  -e OPENAI_API_BASE_URL="https://api.openai.com/v1" \
  -e OPENAI_API_KEY="your-key" \
  -e OPENAI_MODEL="gpt-4o" \
  -e REDIS_HOST="your-redis-host" \
  -e REDIS_PASSWORD="your-redis-pwd"
  --name ai-code-review-helper \
  dingyufei/ai-code-review-helper:latest

📌 Обязательные переменные окружения:

  • ADMIN_API_KEY - Пароль для админ-панели (по умолчанию: change_this_unified_secret_key)
  • OPENAI_API_KEY - Ключ API ИИ-сервиса
  • REDIS_HOST - Адрес Redis

Настройка

1. Переменные окружения (ключевые)

  • ADMIN_API_KEY: Обязательно. Секретный ключ для защиты админ-интерфейса, по умолчанию change_this_unified_secret_key — обязательно измените.
  • OPENAI_API_KEY: Обязательно. Ключ API OpenAI.
  • OPENAI_MODEL: (по умолчанию: gpt-4o) Используемая модель OpenAI.
  • OPENAI_API_BASE_URL: (опционально) Базовый URL API OpenAI в формате: http(s)://xxxx/v1 (по умолчанию: https://api.openai.com/v1)
  • WECOM_BOT_WEBHOOK_URL: (опционально) URL Webhook для бота WeCom.
  • REDIS_HOST: Обязательно. Адрес сервера Redis. Без настройки или при невозможности подключения сервис не запустится.
  • REDIS_PORT: (по умолчанию: 6379) Порт сервера Redis.
  • REDIS_PASSWORD: (опционально) Пароль Redis.
  • REDIS_DB: (по умолчанию: 0) Номер базы данных Redis.
  • REDIS_SSL_ENABLED: (по умолчанию: true) Включение SSL для подключения к Redis. Установите false для отключения.
  • (Другие переменные, такие как SERVER_HOST, SERVER_PORT, GITHUB_API_URL, GITLAB_INSTANCE_URL и т.д., см. в логах запуска или исходном коде.)

2. Панель управления и API

  • Панель управления (/admin): Веб-интерфейс для:
    • Настройки Webhook Secret и Access Token для репозиториев GitHub/GitLab.
    • Управления глобальными параметрами LLM (OpenAI API Key, Base URL, Model).
    • Настройки URL Webhook для уведомлений (бот WeCom, пользовательские Webhook).
    • Просмотра истории ревью.
    • Все операции требуют аутентификации с помощью ADMIN_API_KEY.
  • API конфигурации: RESTful API (/config/*) для программного управления настройками, также требует заголовок X-Admin-API-Key для аутентификации.

Сохранение конфигурации:

  • Redis (обязательно): Хранит конфигурацию репозиториев/проектов, SHA обработанных коммитов, результаты ревью (по умолчанию 7 дней, записи очищаются после закрытия/мержа PR/MR). Сервис требует Redis для работы.
  • Переменные окружения: Используются для загрузки глобальных настроек (например, LLM Key/URL, параметры подключения Redis, Admin API Key). Изменения через панель управления применяются сразу, но при перезапуске сервиса настройки загружаются из переменных окружения. Рекомендуется использовать переменные окружения для важных глобальных настроек.

Использование

  1. Запуск сервиса: Используйте Docker или запустите Python-приложение, убедившись, что заданы необходимые переменные окружения (ADMIN_API_KEY, OPENAI_API_KEY, REDIS_HOST и т.д.).
  2. Настройка репозиториев/проектов: Через панель управления (/admin) или API добавьте конфигурацию для целевых репозиториев GitHub/GitLab, включая Webhook Secret и Access Token с правами на чтение/запись комментариев PR/MR.
  3. Настройка Webhook: В настройках репозитория/проекта GitHub/GitLab добавьте Webhook:
    • Payload URL: Укажите адрес вашего сервиса и соответствующий endpoint (см. ниже).
    • Content type: application/json.
    • Secret: Введите Webhook Secret, заданный в панели управления.
    • Events: Для GitHub выберите "Pull requests", для GitLab — "Merge request events".
  4. Запуск ревью: Создайте или обновите PR/MR, сервис автоматически проведет ревью кода.

Выбор режима ревью

  • Детализированный ревью (endpoints: /github_webhook, /gitlab_webhook):
    • ИИ анализирует изменения в каждом файле, генерируя структурированные замечания по конкретным строкам кода (если возможно).
    • Каждая проблема публикуется как отдельный комментарий к соответствующей строке или как часть общего комментария.
    • В этом режиме модель ИИ выводит результаты в формате JSON, которые система преобразует в комментарии PR/MR.
    • Подходит для моделей с хорошим следованием инструкциям и стабильным выводом JSON (например, GPT-4). При проблемах проверьте логи на соответствие вывода ожидаемому формату.
  • Общий ревью (endpoints: /github_webhook_general, /gitlab_webhook_general):
    • ИИ анализирует изменения в каждом файле в целом и генерирует один сводный комментарий в формате Markdown.
    • Подходит для общей оценки изменений или если детализированный режим работает нестабильно.

Режим разработки

# 1. 克隆仓库
git clone https://github.com/dingyufei615/ai-code-review-helper.git
cd ai-code-review-helper

# 2. 创建并激活虚拟环境
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 3. 安装依赖
pip install -r requirements.txt

# 4. 配置环境变量 (参考 .env.example 或 配置 部分)

# 5. 启动服务
python -m api.ai_code_review_helper

# 6. 运行测试 (可选)
python -m unittest discover tests

Важные замечания

  • Безопасность: Обязательно используйте сложный ADMIN_API_KEY и защищайте все токены и секреты.
  • Затраты: Учитывайте стоимость вызовов API используемого LLM-сервиса.
  • Логи: Сервис выводит подробные логи в консоль для диагностики проблем.
  • Зависимость от Redis: Сервис требует Redis для хранения конфигурации и результатов.

Вклад

90% кода создано с помощью Aider и Gemini. Приветствуются Pull Request и Issue.