Перейти к содержимому

Запускать агентов-ревьюеров

В этом руководстве показано, как запускать агентов-ревьюеров для проверки pull request.

  1. Откройте PR и перейдите на вкладку Обзор
  2. Откройте меню переполнения ⋯ и выберите Спросить AI

Так запускается предустановленный конвейер pr_review: он открывает пространство проверки этого PR и запускает ревьюеров в соответствии с уровнем ревью рабочего пространства — по умолчанию троих (предустановленные агенты qa, architect и engineer) — а затем поручает ведущему агенту свести их замечания. На этом пути роли выбираете не вы. Чтобы управлять тем, какие роли запускаются и какие файлы просматривает каждая из них, используйте инструмент MCP или шаг конвейера ниже.

Вызовите его из существующего пространства проверки:

dispatch_reviewers(
space_id: "...",
workspace_id: "...",
reviewers: [
{role: "reviewer"},
{role: "security", scope: "src/auth/**"}
]
)

space_id, workspace_id и reviewers обязательны. Каждая спецификация ревьюера принимает role, а также необязательный scope — glob-шаблон файлов — и prompt_override, который заменяет инструкцию по умолчанию. Необязательный concurrency (1–8) ограничивает число параллельных запусков; если он не указан, применяется настройка review_concurrency рабочего пространства (по умолчанию 3, задаётся в разделе Настройки → Рабочее пространство → Основные).

Инструмент возвращает управление сразу, со списками dispatched и unmatched. Каждый запущенный ревьюер добавляется в пространство как участник, объявляется системным сообщением и запускается со своей инструкцией. Замечания попадают в это пространство как сообщения review_node.

Откройте Настройки → Рабочее пространство → Шаблоны конвейеров, откройте шаблон и затем:

  1. Добавьте узел Reviewer (prompt) из палитры
  2. Выберите агента для запуска и напишите промпт ревьюера, используя плейсхолдеры {{key}} для выходных данных вышестоящих шагов (например, {{repo_local_path}}, {{pr_number}})
  3. Задайте ключ вывода (по умолчанию reviewer_findings), чтобы нижестоящие шаги могли прочитать замечания

Шаг запускает агента и приостанавливается до завершения этого запуска. Затем движок забирает полезную нагрузку submit_output запуска в состояние конвейера под ключом вывода узла. (Описание в палитре по-прежнему говорит, что шаг ждёт вызова complete_task, — такого инструмента не существует; игнорируйте эту строку.)

Разветвите процесс, подключив несколько узлов-ревьюеров к одному вышестоящему шагу, а затем сведите их выходные данные узлом Consolidate (join).

Редактор перенаправляет скрытый терминал к каждому достижимому приёмнику, поэтому узел, добавленный после предустановленного шага Step, всё равно выполняется. Узлы разветвления, подключённые к одному вышестоящему шагу, выполняются параллельно.

Чтобы конвейер проверки срабатывал сам:

  1. Откройте шаблон в разделе Настройки → Рабочее пространство → Шаблоны конвейеров
  2. Перетащите PR опубликован или Открыт внешний PR из раздела «Триггеры» библиотеки узлов на холст (или выберите его на плитке-призраке Добавить триггер)
  3. Выберите новый узел и включите переключатель Включено в его инспекторе, затем включите шаблон

Здесь важны два события, и они не взаимозаменяемы:

Событие Срабатывает, когда Ключи полезной нагрузки
PullRequestPublished PR открыт через Control Center — на поверхности создания PR или агентом, вызывающим pr_lifecycle.publish pr_id, workspace_id, repo_owner, repo_name
ExternalPrDetected Служба опроса PR обнаруживает PR, открытый напрямую на GitHub repo_owner, repo_name, pr_number, pr_title, author

PR, открытый на github.com, никогда не вызывает PullRequestPublished, поэтому шаблон, подключённый только к этому событию, его не увидит. Учтите также, что PullRequestPublished не несёт pr_number, — шаг, чей скрипт или промпт ссылается на {{pr_number}}, должен получать данные от ExternalPrDetected или от запуска вручную, который их передаёт.

Проверка: включив шаблон, откройте Конвейеры и убедитесь, что для следующего подходящего PR появился запуск. Отключённый шаблон заставляет свой триггер срабатывать в пустоту — движок отклоняет отключённый шаблон и возвращает управление, не начиная запуск.

dispatch_reviewers оценивает каждого агента в рабочем пространстве по каждой запрошенной метке роли без учёта регистра:

Совпадение Баллы
Навык, содержащий метку роли +3
Должность, содержащая метку роли +2
Имя агента, содержащее метку роли +1

Баллы суммируются, и побеждает наибольшая сумма (при равенстве — первый найденный кандидат). Если ни один кандидат не набирает больше нуля, спецификация возвращается в списке unmatched инструмента, а не запускается, — так роль, которой никто не соответствует, попадает в отчёт и никогда не пропускается молча.

У PR ровно одно пространство проверки, а не по одному на каждого ревьюера. Оно создаётся идемпотентно через pr.ensureSpace, связывается с PR через ReviewSpaceAssociation и подготавливается по head ref этого PR. Каждый запущенный ревьюер присоединяется к этому пространству и публикует там свои замечания review_node — именно это делает замечания сопоставимыми и позволяет ведущему агенту достичь консенсуса по ним.

У каждого запущенного ревьюера свой AgentRunLog. Следите за ходом работы в:

  • Пространстве проверки, куда замечания поступают в реальном времени
  • На вкладке Ревью PR, где показаны строка состояния проверки и вердикт
  • В разделе Наблюдаемость → Онлайн (/workspaces/:id/observability) — список агентов со статусом каждого запуска, прошедшим временем в реальном времени, панелью транскрипта и кнопкой остановки. Горячей клавиши для неё нет — открыть её можно из нижней части боковой панели.