Загрузка...

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, оплата в рублях, один ключ на все модели из каталога. В репозитории проекта есть готовый пример настройки для 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: создайте его в личном кабинете и пополните баланс. Ключ показывается один раз.
  • Для запуска из Jira (необязательно): local service из пакета и расширение Chrome 102+. Для ручного ревью Jira и MCP не нужны: MCP можно отключить, а MCP-серверы в поставку не входят.

Установка

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

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

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

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, с двумя моделями:

{
  "$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

Если у вас 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:

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

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

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

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

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

Фрагмент отчёта: сводка и замечание №1 про ОтменитьТранзакцию

Выбор модели

Цены и контекст — из каталога RouterAI, ₽ за 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:

    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 их поддерживает.

Что дальше

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