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

Режим работы

Workflow, который вызывающая сторона может захотеть запустить без присмотра, объявляет режим работы: interactive, где сохраняются все гейты согласования, и autonomous, где workflow обходит ожидания человека и вместо них выдаёт финальный отчёт. Режим — это одна объявленная глобальная переменная и условие перед каждым гейтом, а не вторая версия workflow и не флаг внутри каждой ноды.

Объявление режима

Объявите ровно одну глобальную переменную реестра с перечислением из двух значений:

{
"variableRegistry": {
"operating_mode": {
"type": "string",
"enum": ["autonomous", "interactive"],
"description": "How this run treats the user before the final result: autonomous skips the plan approval and the acceptance question, interactive keeps them"
}
}
}

Разрешение режима один раз

Первая нода, которая и так разговаривает с пользователем, определяет режим в том же шаге, указав его в inputSchema.globalInputs. Отдельный шаг, единственный вывод которого — это значение, добавляет ход без новой работы. Директива говорит агенту использовать режим, уже названный пользователем; вывести однозначный режим — в том числе для запуска, начатого как дочерний процесс уже автономного родителя; и в остальных случаях спросить один раз, назвав последствие. Режим действует на весь запуск и больше не запрашивается.

Обход гейта

Нода condition по этой глобальной переменной стоит перед каждым гейтом согласования и отправляет автономную ветку туда, куда гейт ведёт при согласии. Сам гейт сохраняет директиву, схему и интерактивные маршруты, включая ветку отказа:

{
"id": "route-operating-mode-plan-approval",
"type": "condition",
"condition": {
"operator": "eq",
"left": { "contextPath": "operating_mode" },
"right": "autonomous"
},
"connections": {
"true": "check-steps-remaining",
"false": "present-plan"
}
}

Переведите на это условие все входящие связи гейта. Одна оставшаяся обратная связь, ведущая прямо в гейт — например, из цикла исправления, — всё равно остановит автономный запуск на согласовании.

Что автономность убирает и что не убирает никогда

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

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

inputSchema не умеет ветвиться по переменной контекста, поэтому режим обрабатывается маршрутами. Не добавляйте статусы, счётчики, флаги *_skipped, синонимы режима и вопрос о режиме внутри каждого гейта.

Связанное

  • Ветвление — механика condition, на которой держатся маршруты
  • Эскалация — что всё же доходит до пользователя, когда запуск не может продолжаться
  • Пересмотр процесса — пересмотр проходит те же гейты в обоих режимах
  • Антипаттерны — флаги и синонимы, которых режим не вводит