Метки и маршрутизация во время выполнения
Используйте метки для управления назначением задач в процессе выполнения на основе требуемых возможностей.
Метки и маршрутизация во время выполнения позволяют вам контролировать назначение задач в процессе выполнения на основе возможностей и требований. Когда вы создаёте задачу, вы можете указать, какие метки (ОС, набор инструментов, поставщик, пользовательские теги) должна иметь среда выполнения. Планировщик затем назначит задачу только тем средам выполнения, набор меток которых совпадает с требуемыми.
Почему метки важны
Представьте, что у вас есть три среды выполнения:
- Демон macOS — поставщик Claude, нет Docker
- Демон Linux — поставщики Claude и Cursor, поддержка Docker, Node.js 20
- Демон Windows — только поставщик Claude
Если вы создадите задачу, которая говорит: «этому агенту нужны Docker и Node 20», AACWorkflow должен предложить её только демону Linux. Без меток задача может быть случайно назначена демону macOS, что приведёт к сбою во время выполнения.
Метки предотвращают эти несоответствия.
Что такое метка?
Метка — это ключевое слово, описывающее возможность или свойство времени выполнения:
| Категория | Примеры |
|---|---|
| ОС | macos, linux, windows |
| Архитектура | arm64, amd64 (x86-64) |
| Набор инструментов | node20, node22, python3.11, go, rust |
| Поставщики | claude, codex, cursor |
| Контейнеры | docker, podman |
| Пользовательские | ci-runner, production, gpu-enabled |
Метки регистронезависимы и используют kebab-case (строчные буквы с дефисами).
Автоматические метки из возможностей
Когда демон регистрируется, он автоматически объявляет метки на основе своих возможностей:
- ОС и архитектура —
macos,linux,windows,arm64,amd64 - Поставщики ИИ —
claude,codex,cursor(по одному для каждого установленного поставщика) - Транспорты MCP —
mcp-stdio,mcp-sse,mcp-http
Это метки возможностей и они автоматически обновляются при перезагрузке демона или установке нового поставщика.
Подробнее см. Runtime capability registry.
Пользовательские метки
Помимо автоматических меток возможностей, вы можете назначить пользовательские метки среде выполнения для описания свойств, которые AACWorkflow не определяет автоматически:
- Перейдите на Параметры → Среды выполнения
- Нажмите на среду выполнения
- Прокрутите до Пользовательские метки
- Добавьте метки, такие как
node20,gpu-enabled,ci-runner,production - Нажмите Сохранить
Используйте пользовательские метки для:
- Версии набора инструментов —
node20,python3.11,go1.21 - Оборудование —
gpu-enabled,high-memory - Назначение —
ci-runner,local-dev,production - Расположение —
us-west,eu-central
Требование меток для задачи
Когда вы создаёте задачу или назначаете агента проблеме, вы можете указать требуемые метки. Задача будет претендовать только на средах выполнения, набор меток которых является суперсетом требуемых меток.
Через пользовательский интерфейс
- Создайте или отредактируйте проблему/задачу
- В разделе Требования времени выполнения нажмите Добавить метку
- Выберите метки из списка (автодополнение, получено со всех сред выполнения)
- Пример: выберите
dockerиnode20 - Сохраните проблему/задачу
Теперь задача будет запускаться только на средах выполнения, которые имеют оба docker И node20.
Наследование меток из проблем
Проблемы могут устанавливать требуемые метки по умолчанию, которые наследуют все их задачи:
- Откройте проблему
- Перейдите на Параметры проблемы → Требования времени выполнения
- Добавьте требуемые метки
- Любой агент, назначенный этой проблеме, будет иметь эти требования по умолчанию
Вы можете переопределить требования для отдельной задачи, если необходимо.
Алгоритм сопоставления меток
AACWorkflow использует сопоставление множеств:
- Требуемые метки задачи:
[docker, node20] - Метки среды выполнения:
[macos, arm64, claude, docker, node20, custom-tag] - Совпадение? ДА — среда выполнения имеет все требуемые метки
Ещё один пример:
- Требуемые метки задачи:
[docker, gpu-enabled] - Метки среды выполнения:
[linux, amd64, claude, docker] - Совпадение? НЕТ — среда выполнения имеет
docker, но неgpu-enabled
Пустые требуемые метки совпадают с любой средой выполнения (нет ограничений).
Просмотр меток времени выполнения
В пользовательском интерфейсе
- Перейдите на Параметры → Среды выполнения
- Нажмите на среду выполнения
- Посмотрите Метки возможностей (автоматические) и Пользовательские метки (ручные)
Через API
Конечная точка /runtimes/{id} возвращает оба набора:
{
"id": "runtime-123",
"name": "Linux CI runner",
"capability_labels": ["linux", "amd64", "claude", "docker"],
"custom_labels": ["ci-runner", "node20", "python3.11"],
"effective_labels": ["linux", "amd64", "claude", "docker", "ci-runner", "node20", "python3.11"]
}Эффективные метки — это то, что планировщик использует для сопоставления.
Невозможные для планирования задачи
Если задача требует метки, которые ни одна среда выполнения не имеет, она становится невозможной для планирования:
- Задача остаётся в очереди
- Проблема показывает предупреждение: «Ни одна среда выполнения не совпадает с этими требованиями»
- Задача ждёт (она не терпит неудачу) до появления подходящей среды выполнения
- По истечении 7 дней невозможные для планирования задачи истекают и отмечаются как незавершённые
Для разрешения:
- Проверьте требуемые метки задачи
- Проверьте, какие среды выполнения включены и какие метки они имеют
- Либо:
- Добавьте требуемую метку в среду выполнения — например, установите Docker, если задача её требует
- Удалите требование метки — если задача её на самом деле не требует
- Включите новую среду выполнения с требуемой возможностью
Лучшие практики
- Начните просто — не переусложняйте метки; полагайтесь на автоматические метки возможностей
- Используйте пользовательские метки для наборов инструментов — пометьте среды выполнения поддерживаемыми ими языком/версией
- Документируйте ваши метки — поделитесь словарём меток с вашей командой
- Проверяйте невозможные для планирования задачи — если задачи зависают в очереди, проверьте требования их меток
Примеры сценариев
Сценарий 1: Docker + конкретная версия Node
Задача: «Выполнить сборку Docker для моего приложения Node 20»
Требуемые метки: docker, node20
Результат: Только среды выполнения с обеими метками будут претендовать на неё.
Сценарий 2: GPU для вывода ML
Задача: «Выполнить задачу вывода ML»
Требуемые метки: gpu-enabled
Результат: Только среды выполнения с поддержкой GPU будут претендовать на неё. Если GPU-среда недоступна, задача ждёт.
Сценарий 3: Изменения только для производства
Задача: «Развернуть в производство»
Требуемые метки: production
Результат: Только среды выполнения, помеченные production, могут её запустить. Среды разработки исключены.
Сценарий 4: Локальная разработка
Задача: «Запустить тесты локально»
Требуемые метки: (пусто)
Результат: Любая среда выполнения может её запустить. AACWorkflow выбирает наименее нагруженную доступную среду выполнения.
Следующие шаги
- Runtime capability registry — поймите автоматические метки возможностей
- Daemon and runtimes — изучите архитектуру демона и времени выполнения