运行时标签和路由
使用标签控制运行时可以声明和执行的特定任务,基于所需的能力。
运行时标签和路由允许你控制任务到运行时的分配,基于能力和需求。当你创建任务时,你可以指定运行时必须有哪些标签(操作系统、工具链、提供商、自定义标签)。调度器随后只会将任务分配给标签集匹配的运行时。
为什么标签很重要
想象你有三个运行时:
- 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 - AI 提供商 -
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
在任务上要求标签
当你创建任务或将智能体分配给问题时,你可以指定所需标签。只有标签集是所需标签超集的运行时才会声明该任务。
通过 UI
- 创建或编辑问题/任务
- 在 运行时需求 下,点击 添加标签
- 从列表中选择标签(自动完成,来自所有运行时)
- 示例:选择
docker和node20 - 保存问题/任务
任务现在只会在具有 docker 和 node20 两个标签的运行时上运行。
从问题继承标签
问题可以设置所有其任务继承的默认所需标签:
- 打开一个问题
- 转到 问题设置 → 运行时需求
- 添加所需标签
- 分配给此问题的任何智能体都将默认具有这些需求
如果需要,你可以按任务覆盖需求。
标签匹配算法
AACWorkflow 使用集合匹配:
- 任务所需标签:
[docker, node20] - 运行时标签:
[macos, arm64, claude, docker, node20, custom-tag] - 匹配? 是的 - 运行时有所有所需标签
另一个示例:
- 任务所需标签:
[docker, gpu-enabled] - 运行时标签:
[linux, amd64, claude, docker] - 匹配? 否 - 运行时有
docker但没有gpu-enabled
空的所需标签与任何运行时匹配(无限制)。
查看运行时标签
在 UI 中
- 转到 设置 → 运行时
- 点击一个运行时
- 看 能力标签(自动)和 自定义标签(手动)
通过 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 版本
任务:"为我的 Node 20 应用运行 Docker 构建"
所需标签: docker、node20
结果: 只有具有两个标签的运行时才会声明它。
场景 2: 用于 ML 推理的 GPU
任务:"运行 ML 推理任务"
所需标签: gpu-enabled
结果: 只有启用 GPU 的运行时才会声明它。如果没有 GPU 运行时可用,任务等待。
场景 3: 仅限生产的更改
任务:"部署到生产"
所需标签: production
结果: 只有标记为 production 的运行时可以运行它。开发运行时被排除。
场景 4: 本地开发
任务:"在本地运行测试"
所需标签: (空)
结果: 任何运行时都可以运行它。AACWorkflow 选择负载最少的可用运行时。
下一步
- Runtime capability registry - 理解自动能力标签
- Daemon and runtimes - 了解守护进程和运行时架构