AACWorkflow Docs

运行时标签和路由

使用标签控制运行时可以声明和执行的特定任务,基于所需的能力。

运行时标签和路由允许你控制任务到运行时的分配,基于能力和需求。当你创建任务时,你可以指定运行时必须有哪些标签(操作系统、工具链、提供商、自定义标签)。调度器随后只会将任务分配给标签集匹配的运行时。

为什么标签很重要

想象你有三个运行时:

  • macOS 守护进程 - Claude 提供商,无 Docker
  • Linux 守护进程 - Claude 和 Cursor,Docker 支持,Node.js 20
  • Windows 守护进程 - 仅 Claude 提供商

如果你创建一个说"这个智能体需要 Docker 和 Node 20"的任务,AACWorkflow 应该只提供给 Linux 守护进程。没有标签,任务可能会意外分配给 macOS 守护进程,在运行时失败。

标签可防止这些不匹配。

标签是什么?

标签是关键字描述运行时能力或属性:

类别示例
操作系统macoslinuxwindows
架构arm64amd64(x86-64)
工具链node20node22python3.11gorust
提供商claudecodexcursor
容器dockerpodman
自定义ci-runnerproductiongpu-enabled

标签不区分大小写,使用 kebab-case(小写加连字符)。

来自能力的自动标签

当守护进程注册时,它根据其能力自动宣传标签:

  • 操作系统和架构 - macoslinuxwindowsarm64amd64
  • AI 提供商 - claudecodexcursor(每个已安装提供商一个)
  • MCP 传输 - mcp-stdiomcp-ssemcp-http

这些是能力标签,在重启守护进程或安装新提供商时自动更新。

详见 Runtime capability registry

自定义标签

除了自动能力标签外,你可以将自定义标签分配给运行时,以描述 AACWorkflow 无法自动检测的属性:

  1. 转到 设置 → 运行时
  2. 点击一个运行时
  3. 滚动到 自定义标签
  4. 添加标签如 node20gpu-enabledci-runnerproduction
  5. 点击 保存

对以下项目使用自定义标签:

  • 工具链版本 - node20python3.11go1.21
  • 硬件 - gpu-enabledhigh-memory
  • 目的 - ci-runnerlocal-devproduction
  • 位置 - us-westeu-central

在任务上要求标签

当你创建任务或将智能体分配给问题时,你可以指定所需标签。只有标签集是所需标签超集的运行时才会声明该任务。

通过 UI

  1. 创建或编辑问题/任务
  2. 运行时需求 下,点击 添加标签
  3. 从列表中选择标签(自动完成,来自所有运行时)
  4. 示例:选择 dockernode20
  5. 保存问题/任务

任务现在只会在具有 dockernode20 两个标签的运行时上运行。

从问题继承标签

问题可以设置所有其任务继承的默认所需标签:

  1. 打开一个问题
  2. 转到 问题设置 → 运行时需求
  3. 添加所需标签
  4. 分配给此问题的任何智能体都将默认具有这些需求

如果需要,你可以按任务覆盖需求。

标签匹配算法

AACWorkflow 使用集合匹配:

  • 任务所需标签: [docker, node20]
  • 运行时标签: [macos, arm64, claude, docker, node20, custom-tag]
  • 匹配? 是的 - 运行时有所有所需标签

另一个示例:

  • 任务所需标签: [docker, gpu-enabled]
  • 运行时标签: [linux, amd64, claude, docker]
  • 匹配? 否 - 运行时有 docker 但没有 gpu-enabled

空的所需标签与任何运行时匹配(无限制)。

查看运行时标签

在 UI 中

  1. 转到 设置 → 运行时
  2. 点击一个运行时
  3. 能力标签(自动)和 自定义标签(手动)

通过 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 天后,无法调度的任务过期并被标记为未完成

要解决:

  1. 查看任务的所需标签
  2. 检查哪些运行时在线以及它们有哪些标签
  3. 要么:
    • 将所需标签添加到运行时 - 例如,如果任务需要就安装 Docker
    • 移除标签需求 - 如果任务实际上不需要它
    • 启动新运行时具有所需的能力

最佳实践

  • 从简单开始 - 不要过度指定标签;依赖自动能力标签
  • 为工具链使用自定义标签 - 用它们支持的语言/版本标记运行时
  • 记录你的标签 - 与你的团队共享标签词汇
  • 审查无法调度的任务 - 如果任务卡在队列中,检查其标签需求

示例场景

场景 1: Docker + 特定 Node 版本

任务:"为我的 Node 20 应用运行 Docker 构建"

所需标签: dockernode20

结果: 只有具有两个标签的运行时才会声明它。

场景 2: 用于 ML 推理的 GPU

任务:"运行 ML 推理任务"

所需标签: gpu-enabled

结果: 只有启用 GPU 的运行时才会声明它。如果没有 GPU 运行时可用,任务等待。

场景 3: 仅限生产的更改

任务:"部署到生产"

所需标签: production

结果: 只有标记为 production 的运行时可以运行它。开发运行时被排除。

场景 4: 本地开发

任务:"在本地运行测试"

所需标签: (空)

结果: 任何运行时都可以运行它。AACWorkflow 选择负载最少的可用运行时。

下一步