Загрузка...

Open Code Review через RouterAI: AI-ревью кода в терминале и CI

Open Code Review

Open Code Review (команда ocr) — CLI для AI-ревью кода от Alibaba, написанный на Go. Он читает git-диффы, отправляет изменённые файлы модели через агента с инструментами (чтение файлов, поиск по репозиторию) и выводит замечания с привязкой к строкам, категорией и серьёзностью. Работает как отдельная команда ocr review, как плагин Claude Code (/open-code-review:review) и в CI (GitHub Actions, GitLab CI). Репозиторий: alibaba/open-code-review.

ocr не привязан к одному вендору: модель задаётся как провайдер в конфиге. RouterAI подключается как custom provider с OpenAI-совместимым Base URL, поэтому для ревью доступны Claude, GPT, DeepSeek, GLM и Qwen из каталога моделей, работа из России без VPN и оплата в рублях.

Важно: ocr review использует собственную конфигурацию провайдера, а не подписку Claude Code. Даже если вы запускаете его из Claude Code, запросы к модели идут через настроенный в ocr провайдер, то есть через RouterAI.

Требования

  • Git 2.41 или новее (указано в README) и репозиторий с изменениями
  • npm (Node.js) либо Homebrew, либо установочный скрипт
  • API-ключ RouterAI из личного кабинета
  • Модель с нативным вызовом инструментов (tool calling): ocr ведёт ревью целиком через вызовы инструментов, модель без них не заработает

Установка

npm install -g @alibaba-group/open-code-review
ocr --version

Команда выводит версию, на момент написания — open-code-review v1.13.6. Другие способы:

brew install open-code-review
curl -fsSL https://open-codereview.ai/install.sh | sh

Установка через npm включает автообновление: при запуске ocr фоново проверяет новую версию. Чтобы отключить, задайте OCR_NO_UPDATE=1 — это полезно в CI.

Подключение к RouterAI

Конфиг хранится в ~/.opencodereview/config.json. Править его можно тремя способами: интерактивно, командами ocr config set и переменными окружения.

Способ 1. Интерактивно

ocr config provider

Откроется меню с вкладками Official, Custom и Manual. Откройте вкладку Custom и выберите + Add custom provider.

ocr config provider: форма Add Custom Provider с полями Provider name, Protocol, Base URL, API Key, Auth Header

  1. Provider name — routerai.
  2. Protocol — openai (в списке также anthropic, openai-responses, anthropic-bedrock; по умолчанию выбран anthropic).
  3. Base URL — https://routerai.ru/api/v1.
  4. API Key — ключ из личного кабинета, при вводе скрыт звёздочками.
  5. Auth Header — оставьте пустым, по умолчанию используется Authorization.

Форма Add Custom Provider: протокол openai, Base URL https://routerai.ru/api/v1, ключ скрыт звёздочками

После сохранения выберите модель — позже её можно сменить командой ocr config model. По документации мастер в конце сам запускает проверку ocr llm test.

Способ 2. Командами

Подходит для скриптов и CI. Для custom provider нужен непустой api_key: переменной окружения по умолчанию у него нет, поэтому ключ передаётся явно.

ocr config set custom_providers.routerai.url https://routerai.ru/api/v1
ocr config set custom_providers.routerai.protocol openai
ocr config set custom_providers.routerai.model anthropic/claude-sonnet-5.5
ocr config set custom_providers.routerai.api_key "$ROUTERAI_API_KEY"
ocr config set provider routerai

Последняя команда делает routerai активным провайдером. В итоге файл ~/.opencodereview/config.json выглядит так (ключ на кадре заменён заглушкой):

Файл ~/.opencodereview/config.json с провайдерами routerai и routerai-anthropic

Ключ лежит в файле открытым текстом, поэтому не добавляйте его в репозиторий. Вместо api_key можно задать api_key_cmd — команду, которая достаёт ключ из менеджера секретов (1Password, pass).

Способ 3. Переменные окружения

Если сохранённой конфигурации нет, ocr читает полный набор OCR_LLM_*:

export OCR_LLM_URL=https://routerai.ru/api/v1
export OCR_LLM_TOKEN=sk-xxxxxxxxxxxxxxxx
export OCR_LLM_MODEL=deepseek/deepseek-v4.1-flash
export OCR_LLM_PROTOCOL=openai

Без OCR_LLM_PROTOCOL по умолчанию используется протокол anthropic, и запрос уйдёт на /v1/messages.

Протокол и Base URL

Протокол Base URL Запрос уходит на
openai https://routerai.ru/api/v1 OpenAI-совместимый Chat Completions
anthropic https://routerai.ru/api (без /v1) https://routerai.ru/api/v1/messages (Anthropic Messages API)

Для ревью берите openai: он подходит для моделей всех производителей из каталога. Протокол anthropic нужен, если вы хотите работать с Claude в формате Anthropic Messages. Тогда Base URL указывается без /v1, иначе ocr допишет путь сам и получится /api/v1/v1/messages.

Выбор модели

Цены — из каталога RouterAI на 9 ноября 2026, рубли за 1 млн токенов. Актуальные значения смотрите в каталоге.

Модель Вход / выход, ₽ за 1 млн Когда брать
anthropic/claude-sonnet-5.5 213,56 / 1067,80 Спорные места, критичный код, ревью перед релизом
anthropic/claude-haiku-5.5 10,68 / 53,39 Быстрое ревью средних MR
deepseek/deepseek-v4.1-flash 2,58 / 46,98 Массовые MR и ночные прогоны, дёшево
z-ai/glm-5.3-flash 3,93 / 9,75 Массовые MR, когда замечаний много и вывод дорогой
qwen/qwen3.6-35b-a3b 1,17 / 10,78 Самые дешёвые прогоны; контекст 262 тыс. токенов, для крупных диффов тесно

Все модели из таблицы заявляют поддержку tools в каталоге. Перед массовым использованием прогоните ocr llm test: он проверяет, что модель вызывает инструменты.

Проверка подключения

ocr llm test

Вывод ocr llm test: Source provider:routerai, URL https://routerai.ru/api/v1, модель anthropic/claude-sonnet-5.5, Connection test successful

Должны появиться строки ✓ Connection test successful и ✓ Tool-call round trip verified. Затем запустите ревью в репозитории с изменениями:

cd your-project
ocr review

Без аргументов ocr review проверяет все незакоммиченные изменения. Другие режимы:

ocr review --from main --to feature-branch   # диапазон веток
ocr review --commit abc123                   # один коммит
ocr scan --path src                          # целые файлы без диффа
ocr review --format json --output result.json

Ниже ревью небольшого диффа: добавленная команда с выходом за границу массива, лишним делением на 100 и нестрогим сравнением.

Результат ocr review: замечания bug · critical, style · high, maintainability · low с предложенными исправлениями

Язык замечаний задаёт ocr config set language <язык>; по умолчанию — английский.

Экономика ревью

Ревью — это агентный цикл: модель читает изменённый файл, соседние файлы и тесты, затем оставляет комментарии. Поэтому расход токенов складывается из контекста, а не только из самого диффа. Итоговая строка ocr показывает расход (~ — оценка самого инструмента).

Для диффа в 16 строк в одном файле:

Модель Токенов за ревью Оценка по ценам каталога
anthropic/claude-sonnet-5.5 около 52 000–73 000 (вход около 50 000–71 000, выход около 2 000) 13–17 ₽
deepseek/deepseek-v4.1-flash около 41 000 (вход около 37 000, выход около 4 000) около 0,3 ₽ без скидки на кэш

Число замечаний между запусками немного отличается. На больших MR расход растёт с числом файлов и подзадач. Управлять им можно так:

  • ocr config set effort low — один раунд ревью вместо двух (medium по умолчанию, high — три), стоимость меняется пропорционально.
  • --max-tokens-budget ограничивает суммарный расход токенов за запуск.
  • Для рутинных MR берите дешёвую модель, для критичных — Claude.

По данным авторов (бенчмарк в README), ocr тратит примерно в 9 раз меньше токенов, чем универсальный агент вроде Claude Code, на той же модели.

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

Плагин ставится командами внутри Claude Code:

/plugin marketplace add alibaba/open-code-review
/plugin install open-code-review@open-code-review

Команда /open-code-review:review запускает ocr review с вашим провайдером RouterAI, то есть не использует подписку Claude Code. Команда /open-code-review:delegate-review вместо этого поручает ревью модели самого Claude Code. Как подключить сам Claude Code к RouterAI, см. Вайб-кодинг в Claude Code.

Ревью в GitLab CI

В CI нет сохранённой конфигурации, поэтому провайдер настраивается в скрипте. Добавьте в Settings → CI/CD → Variables переменные ROUTERAI_API_KEY (с флагом Masked) и OCR_MODEL, например deepseek/deepseek-v4.1-flash.

stages:
  - review

code-review:
  stage: review
  image: node:20
  only:
    - merge_requests
  variables:
    GIT_DEPTH: 0
    OCR_NO_UPDATE: "1"
  script:
    - npm install -g @alibaba-group/open-code-review
    - ocr config set custom_providers.routerai.url https://routerai.ru/api/v1
    - ocr config set custom_providers.routerai.protocol openai
    - ocr config set custom_providers.routerai.model "$OCR_MODEL"
    - ocr config set custom_providers.routerai.api_key "$ROUTERAI_API_KEY"
    - ocr config set provider routerai
    - mkdir -p .ocr
    - ocr review --from "origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" --to "$CI_COMMIT_SHA" --format json --audience agent > .ocr/ocr-result.json
  artifacts:
    paths:
      - .ocr/ocr-result.json

Задание сохраняет JSON с замечаниями как артефакт. Готовый вариант, который публикует замечания обсуждениями прямо в MR, есть в examples/gitlab_ci репозитория; шаг конфигурации можно заменить командами выше. --audience agent убирает строки прогресса из вывода. Подробности — в документации по CI.

Решение проблем

404 на /v1/v1/messages

Протокол anthropic при Base URL с /v1 либо не указан OCR_LLM_PROTOCOL. Для openai используйте https://routerai.ru/api/v1, для anthropic — https://routerai.ru/api.

provider has no api_key or api_key_cmd configured

У custom provider нет переменной окружения для ключа. Задайте custom_providers.<имя>.api_key или api_key_cmd.

401 или 402

Проверьте ключ в личном кабинете, а при 402 пополните баланс в разделе Биллинг.

No tool calls parsed и ноль замечаний

Модель не поддерживает нативный вызов инструментов. Выберите другую модель и проверьте её командой ocr llm test.

LLM request timeout

Запрос одной модели ограничен 300 секундами. Для медленных моделей увеличьте лимит: OCR_LLM_TIMEOUT=900 или custom_providers.routerai.timeout_sec.

Что дальше

Инструкция проверена на Open Code Review 1.13.6.