# RDV AIR через RouterAI: ИИ-ревью кода 1С с выбором модели под проект

RDV AIR — открытый ИИ-агент для ревью кода 1С:Предприятия (модули BSL и запросы СКД) от команды RDV, лицензия BSD 3-Clause. Ревью запускается по номеру задачи или GitLab Merge Request и идёт в два этапа: аудитор собирает кандидатов в замечания, критик подтверждает или отклоняет каждого. Результат — Markdown-отчёт со ссылками на строки GitLab. Своей модели у RDV AIR нет: он работает через Codex, Cursor или OpenCode, и модель настраивается там. Для OpenCode RouterAI подключается как OpenAI-совместимый провайдер: работа из России без VPN, оплата в рублях, один ключ на все модели из [каталога](/models). В [репозитории проекта](https://github.com/rdv-team/ai-review) есть готовый пример настройки для RouterAI.

Ниже — как подключить RouterAI к RDV AIR через OpenCode, выбрать модель под проект и сколько стоит одно ревью.

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

* Python 3.11 или новее и Git. RDV AIR ставится как Python-пакет `review-tasks` и берёт код задачи из локального Git-репозитория, отдельный токен GitLab для этого не нужен.
* OpenCode CLI (нужен Node.js). RDV AIR работает и с Codex и Cursor, но здесь описан OpenCode.
* Ключ RouterAI: [создайте его в личном кабинете](https://routerai.ru/settings/keys) и пополните баланс. Ключ показывается один раз.
* Для запуска из Jira (необязательно): local service из пакета и расширение Chrome 102+. Для ручного ревью Jira и MCP не нужны: MCP можно отключить, а MCP-серверы в поставку не входят.

## Установка

На Windows пакет ставится через pipx из распакованного Release ZIP или из клона репозитория:

```powershell
python -m pipx install .
review-tasks --help
```

OpenCode ставится через npm (есть также Scoop и Chocolatey):

```bash
npm i -g opencode-ai@latest
opencode --version
```

Установку и настройку проекта можно поручить самому агенту: откройте проект в OpenCode и напишите «Установи и настрой RDV AIR». Для этого в репозитории есть skills `review-setup` и `review-init`.

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

RDV AIR сам к моделям не подключается: ревью выполняет OpenCode. Поэтому RouterAI достаточно один раз настроить в OpenCode, и все ревью пойдут через него.

### Ключ

Сохраните ключ в переменной окружения `ROUTERAI_API_KEY`, в конфиг его не пишите. После изменения переменных окружения в Windows закройте и заново откройте IDE или терминал: уже запущенный процесс не видит новых значений.

### Конфиг OpenCode

Глобальные настройки OpenCode лежат в `%USERPROFILE%\.config\opencode` на Windows и в `~/.config/opencode` на Linux и macOS. Держите там один основной файл: `opencode.jsonc` или `opencode.json`. Пример на основе конфига из репозитория RDV, с двумя моделями:

```jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "model": "routerai/deepseek/deepseek-v4.1-flash",
  "provider": {
    "routerai": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "RouterAI",
      "options": {
        "baseURL": "https://routerai.ru/api/v1",
        "apiKey": "{env:ROUTERAI_API_KEY}"
      },
      "models": {
        "deepseek/deepseek-v4.1-flash": { "name": "DeepSeek V4.1 Flash" },
        "qwen/qwen3.7-flash": { "name": "Qwen3.7 Flash" }
      }
    }
  }
}
```

1. `routerai` — id провайдера. Ссылка на модель собирается как `routerai/` плюс id модели из каталога RouterAI: `routerai/deepseek/deepseek-v4.1-flash`.
2. `baseURL` — `https://routerai.ru/api/v1`, `apiKey` — ссылка на переменную окружения `{env:ROUTERAI_API_KEY}`.
3. В `models` перечислите модели, которые хотите выбирать. Верхнее поле `model` задаёт модель по умолчанию.

Выполните `opencode models`: в списке должны появиться `routerai/deepseek/deepseek-v4.1-flash` и `routerai/qwen/qwen3.7-flash`.

![Конфиг OpenCode с провайдером RouterAI и вывод opencode models](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/477f9df40e0106910057a2e85bfc07c2.png)

### Если у вас OpenCode V2

Пример выше написан в формате конфига V1. В формате V2 те же поля называются иначе:

| Что настраивается | V1 | V2 |
| ----------------- | ------------ | ----------- |
| Раздел провайдеров | `provider` | `providers` |
| Пакет | `npm`: `@ai-sdk/openai-compatible` | `package`: `@opencode/ai/providers/openai-compatible` |
| Адрес и ключ | `options`: `baseURL`, `apiKey` | `settings`: `baseURL`, `apiKey` |

Полный пример для V2 — в разделе «Настроить OpenCode и RouterAI» файла `docs/advanced-usage.md` в репозитории RDV.

## Как выбирается модель

* **Общая модель** — поле `model` в конфиге OpenCode.
* **Модель на один запуск** — флаг `--model` команды `opencode run`.
* **Модель на проект Jira** (с RDV AIR 1.3.0). В расширении откройте вкладку «Конфигурация проекта» и заполните поле «Модель OpenCode для ревью»: полный `provider/model`, например `routerai/deepseek/deepseek-v4.1-flash`. Модель действует на все задачи этого префикса Jira, рабочая модель OpenCode при этом не меняется. Провайдер должен быть заранее подключён в OpenCode. Чтобы вернуть обычный выбор, очистите поле. Если модель недоступна, ревью завершится ошибкой: автоматической замены нет.

## Запуск ревью

Ключ задачи (`TASK-123`) должен быть в сообщении коммита в проверяемой ветке. Сначала `init` готовит каталог задачи, затем OpenCode выполняет команду `review-start-task`:

```bash
review-tasks init -t TASK-123 -r <путь к репозиторию> -d <каталог ревью> -b origin/HEAD --remote origin --ide opencode --mcp off
opencode run --dir <каталог ревью>/TASK-123 --command review-start-task --auto --model routerai/deepseek/deepseek-v4.1-flash
```

`init` синхронизирует репозиторий с remote, поэтому remote должен существовать. С `--mcp off` агент не обращается к внешним MCP-серверам и опирается на карточки стандартов из каталога задачи. Флаг `--auto` разрешает агенту действовать без подтверждений, поэтому запускайте его в каталоге задачи. Отчёт появится в файле `review-report-<задача>.md`.

![Вывод review-tasks init: каталог ревью создан, режим MCP off](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/47263f9c9acfe777ddfbc8d75151a212.png)

## Пример: ревью тестового модуля

Мы подготовили небольшой модуль BSL с тремя типичными ошибками: запрос в цикле, удаление без проверки прав и транзакция без отмены при ошибке. Один и тот же коммит проверили на двух моделях:

| | `deepseek/deepseek-v4.1-flash` | `qwen/qwen3.7-flash` |
| - | ------------------------------ | -------------------- |
| Замечаний в отчёте | 6: 1 критично, 4 важно, 1 желательно | 3: 2 важно, 1 желательно |
| Отклонено критиком | 3 кандидата | — |
| Запрос в цикле | найден | найден |
| Транзакция без `ОтменитьТранзакцию()` | найдена, критично | найдена, важно |
| Нет проверки прав в `УдалитьСчет` | не найдено | не найдено |
| Стоимость ревью по ценам каталога | меньше 1 ₽ | меньше 1 ₽ |

Обе модели нашли запрос в цикле и транзакцию без отмены, но ни одна не заметила отсутствие проверки прав. Одно из замечаний DeepSeek оказалось спорным, а в коде из предложений встречаются неточности. Отчёт RDV AIR экономит время ревьюера, но не заменяет его: замечания стоит проверять, а не принимать целиком.

![Фрагмент отчёта: сводка и замечание №1 про ОтменитьТранзакцию](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/02542d452ae14a907d760acd62a5fde5.png)

## Выбор модели

Цены и контекст — из [каталога RouterAI](/models), ₽ за 1 млн токенов:

| Модель | Контекст | Вход / выход |
| ------ | -------- | ------------ |
| `deepseek/deepseek-v4.1-flash` | 1 048 576 | 5,96 / 23,82 |
| `qwen/qwen3.7-flash` | 1 000 000 | 3,20 / 13,88 |
| `anthropic/claude-haiku-5.5` | 1 000 000 | 10,68 / 53,39 |
| `openai/gpt-5.4-mini` | 400 000 | 80,09 / 480,51 |

Цены меняются, актуальные — в каталоге. Удобно начать с недорогой модели для ежедневных проверок, а на важных задачах сравнить её отчёт с отчётом более сильной модели: модель меняется одной строкой.

## Зачем хаб, а не один поставщик

* Один ключ и один счёт на модели разных поставщиков.
* Модель меняется строкой конфига: `model` в OpenCode или `--model` при запуске.
* Для каждого проекта Jira можно задать свою модель в поле «Модель OpenCode для ревью».
* Один и тот же коммит можно проверить на разных моделях и сравнить отчёты, как в примере выше.

## Какие данные куда уходят

Во время ревью агент передаёт код выбранной модели: облачному провайдеру или вашей локальной модели. При работе через RouterAI код уходит выбранной модели через API RouterAI. Если код нельзя отправлять в облако, подключите в OpenCode локальную модель. Решите заранее, какие репозитории можно проверять облачными моделями.

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

1. `opencode models` показывает модели `routerai/...`.
2. Ключ отвечает на запрос к API:

   ```bash
   curl https://routerai.ru/api/v1/models -H "Authorization: Bearer sk-xxxxxxxxxxxxxxxx"
   ```

3. Ревью тестовой задачи доходит до файла `review-report-<задача>.md`.

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

* **В `opencode models` нет моделей `routerai/...`.** Проверьте, что в каталоге конфига один основной файл (`opencode.jsonc` или `opencode.json`), что формат подходит к вашей версии OpenCode и что нужные модели перечислены в `models`.
* **Ошибка авторизации (401).** Переменная `ROUTERAI_API_KEY` не видна процессу, который запускает OpenCode. После смены переменных окружения перезапустите IDE или терминал и local service.
* **`init`: «Не удалось синхронизировать репозиторий с remote 'origin'».** У репозитория нет такого remote. Добавьте его или укажите свой через `--remote`, а ветку с коммитами задачи задайте через `-b`.
* **`init` не находит коммиты задачи.** Ключ задачи ищется в сообщениях коммитов выбранной ветки: проверьте ключ и значение `-b`.
* **Ревью из Jira завершилось ошибкой по модели.** Проверьте полный `provider/model` в поле «Модель OpenCode для ревью» и что модель есть в `opencode models`, затем повторите запуск.
* **Ревью из Jira не запускается.** Local service вызывает `opencode run` с флагами `--command`, `--dir` и `--auto` (или `--dangerously-skip-permissions`). Проверьте по `opencode run --help`, что ваша версия OpenCode их поддерживает.

## Что дальше

* [Каталог моделей RouterAI](/models) — id, контекст и цены.
* [Vrio через RouterAI](/pages/vrio-routerai) — ИИ-агент, который работает внутри 1С.
* [Claude Haiku 5.5 через RouterAI](/pages/claude-haiku-5-5-obzor) — обзор быстрой и недорогой модели.
* [Репозиторий RDV AIR](https://github.com/rdv-team/ai-review) и [сайт RDV](https://rdv-it.ru/).
* [Документация OpenCode по провайдерам](https://opencode.ai/docs/providers/).

*Инструкция проверена на RDV AIR 1.3.0 и OpenCode 1.19.5.*
