# 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](https://github.com/alibaba/open-code-review).

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

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

## Требования

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

## Установка

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

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

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

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

## Подключение к RouterAI {#podklyuchenie-k-routerai}

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

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

```bash
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](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/93ddfe162945006943188b0614f4fd67.png)

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, ключ скрыт звёздочками](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/c8dc67032885ccbce5bbb9aebab3ccf6.png)

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

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

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

```bash
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](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/e7a3caf7a20b1be7e3c93b92cab22bdc.png)

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

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

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

```bash
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](/models) на 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`: он проверяет, что модель вызывает инструменты.

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

```bash
ocr llm test
```

![Вывод ocr llm test: Source provider:routerai, URL https://routerai.ru/api/v1, модель anthropic/claude-sonnet-5.5, Connection test successful](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/4d5b6a64dd65f994d17aa33a3bfd817d.png)

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

```bash
cd your-project
ocr review
```

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

```bash
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 с предложенными исправлениями](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/5ebbfa380faf3aeac3f6f91763b6b35f.png)

Язык замечаний задаёт `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:

```text
/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](/pages/vibe-coding-claude-code).

## Ревью в GitLab CI

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

```yaml
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](https://github.com/alibaba/open-code-review/tree/main/examples/gitlab_ci) репозитория; шаг конфигурации можно заменить командами выше. `--audience agent` убирает строки прогресса из вывода. Подробности — в [документации по CI](https://github.com/alibaba/open-code-review/blob/main/pages/src/content/docs/en/integrations/ci.md).

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

### 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

Проверьте ключ в [личном кабинете](/settings/keys), а при 402 пополните баланс в разделе [Биллинг](/settings/billing).

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

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

### LLM request timeout

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

## Что дальше

- [Каталог моделей](/models) — цены и контекст актуальных моделей
- [Аутентификация](/docs/guides/overview/authentication) — управление API-ключами
- [Вайб-кодинг в Claude Code](/pages/vibe-coding-claude-code) — подключение самого агента к RouterAI
- [Codewhale через RouterAI](/pages/codewhale-routerai) и [Вайб-кодинг в Qwen Code](/pages/vibe-coding-qwen-code) — другие CLI-агенты
- [Документация Open Code Review: конфигурация](https://github.com/alibaba/open-code-review/blob/main/pages/src/content/docs/en/configuration.md) и [FAQ](https://github.com/alibaba/open-code-review/blob/main/pages/src/content/docs/en/faq.md)

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