跳转到内容

创建流水线模板

流水线模板在工作区设置中编写。工作区侧边栏中的 流水线 入口是_运行队列_, 而不是模板列表——它没有“新建模板”操作。

关于每种步骤种类、主体键和配置字段的含义,参见 流水线步骤参考。

  1. 前往 设置 → 工作区 → 流水线模板 (/workspaces/<workspace-id>/settings/pipelines)。
  2. 点击 新建模板。

不会弹出 id 对话框。编辑器会立即打开一个名为 新建流水线 的预置骨架,其 id 自动分配(先是 pipeline_1,然后是 pipeline_2,……)。点击页眉中的标题即可 重命名。

画布并非空白:其中有一个 Trigger 入口节点、一个标注为 Step 的提示 智能体节点,以及一个结束运行的终端哨兵。哨兵不会被绘制出来。编辑器会把那个隐藏 的终端改接到每一个可达的汇点,因此你在 Step 之后接上的工作仍会执行。

节点库 侧边栏常驻在编辑器左侧。用 搜索节点 框筛选它,并把条目拖到画布 上——节点会落在你放下的位置,且没有入站连接。

节点库条目 步骤种类 作用
Bash script listen 运行带 {{state}} 替换的 shell 脚本;不派发智能体
Open conversation listen 打开这次运行唯一可见的空间及其检出;智能体节点会加入这个房间
Clone PR branch listen 通过 gh pr view 找出 PR 的 head 分支,并将其克隆到运行目录
Post PR comment listen 把汇总后的发现项作为一条 GitHub 审查评论发布到该 PR
Reviewer (prompt) listen 派发专门的审查智能体;挂起直到该智能体提交结果
Consolidate (join) join 等待多个上游分支,然后让一个智能体汇总它们的输出
Custom prompt listen 经由 promptAgent 主体路由的通用提示词驱动节点
Post to space listen 向消息空间发送一条消息
Condition / switch (router) router 根据状态值让流程分支
If file exists (router) router 当克隆目录下存在某个路径时路由到 "true",否则路由到 "false"
Any file exists (OR router) router 当列出的任一路径存在时路由到 "true"
All conditions (AND router) router 仅当列出的所有路径都存在时路由到 "true"
Team dispatch listen 派发整个团队并挂起,直到它完成
Approval gate listen 暂停以等待审批决定
For each (map) forEach 为每个条目渲染一个提示词,然后把这些提示词拼接后一次性派发智能体
Call sub-pipeline listen 以嵌套步骤的形式运行另一个模板
Clean up worktrees listen 移除过期的隔离工作树;确定性操作,不派发智能体

节点库把它们归入 流程与逻辑、PR 审查、智能体、消息 和 代码 之下。没有 Demo 分组。

每个工作节点右边缘都有一个圆形的 输出端口。从该端口拖到另一个节点即可连接。 起始触发器也一样:每个触发器都有自己的端口,因此从 定时 引出的连线不会同时 从 手动运行 引出。在节点之后不远处点击 添加步骤(+),即可在其后插入 一个类型。将鼠标悬停在已有连线的中点上并按 × 即可断开。

连接也可以从_接收_它们的那一侧节点编辑:

  1. 选中下游节点,其配置面板会从右侧打开。
  2. 滚动到 Triggers from,为这个节点应监听的每个上游节点点击对应的标签块。 点击已选中的标签块会移除该连接。
  3. 如果某个上游节点是路由器,标签块下方会出现一个 路由键 区块,每条路由器 连线对应一个 来自 <node> 的路由键 字段。输入该连线触发时所用的 键——对于文件存在类路由器是 true 或 false,对于分支则是分支名。

每个触发器节点都是一个入口点。一个节点可以监听多个上游(扇入),并供给多个下游 (扇出),而图必须保持无环——编辑器不会阻止你连出一个环,所以要自己检查。

终端哨兵会被从画布中过滤掉,因此无法被选中。每当图发生变化,编辑器都会把它重新 接到每一个可达的汇点,因此你在预置的 Step 之后接上的工作仍会执行。空图 (触发器没有任何后继工作节点)会列出触发器本身,使运行立即完成。

选中一个节点即可打开其配置面板。显示哪些字段取决于该节点的主体。

每个节点都有 标签、输入键(执行时读取的、以逗号分隔的状态键),并在 高级 之下有 合并器、超时(毫秒)、重试次数、此步骤失败时继续 和 输出 schema。listen 与 join 节点还可以在两者之间切换它们的 类型。

会添加一个 要克隆的仓库 选择器(要检出哪些工作区仓库;留空表示不检出任何 仓库)、一个 空间名称,以及一个 在其中打开对话 复选框。当该复选框打开 时,对话名称 字段会为房间打开时所在的流命名。智能体节点会加入这个房间—— 它们不会自己开一个。

会添加 智能体(要派发哪个智能体)、提示模板(用 {{key}} 引用输入或 上游输出)和 输出键。

超时(毫秒) 的单位是_毫秒_,而不是秒——900000 是 15 分钟。输入 900 会赋予该步骤 0.9 秒。

提示智能体节点以哪种对话模式运行,在智能体节点上并没有编辑器字段。它由创建该 房间的 Open conversation 节点上的 extras['mode'](chat、plan 或 review)决定(默认 review)。在智能体步骤上设置它会被忽略。该键按精确匹配 处理:任何其他拼写都会被静默忽略。

会添加 Bash 脚本。没有工作目录字段或环境字段,因为两者都不可配置:

  • 一次运行中的每个 bash 步骤都共享 cwd <cc_root>/pipelines/<runId>/。
  • GITHUB_TOKEN 从凭据存储中注入,因此 gh 和 git clone https://x-access-token:$GITHUB_TOKEN@… 无需配置即可使用。
  • 脚本以字面可执行文件 bash 启动,因此服务器主机的 PATH 中必须有 bash。 这是 Windows 上的一个考虑事项。

路由器会求值一个条件并返回一个路由键;引擎只触发路由键匹配的那条下游连线,并把 其他分支标记为已跳过。

选中路由器会把 输出键 字段替换为条件编辑器。从它的四种模式中选一种:

  • 文件存在 — 任一 —— 当列出的任一路径存在时路由到 "true"。
  • 文件存在 — 全部 —— 仅当列出的所有路径都存在时路由到 "true"。
  • 比较 —— 将一个状态值与字面量比较。
  • 分支 —— 根据某个状态键的值路由,并带一个默认分支。

然后在出站连线上设置匹配的路由键(参见 将节点连线)。

布尔 and / or / not 分组由主体支持,但无法从这个表单编写——它们需要在 extras.predicate 下手写谓词树。完整的谓词与运算符词汇见 流水线步骤参考。

没有自己的配置:它会等待其所有上游步骤。

门禁会把审批者智能体派发到一个带有门禁提示词的隐藏对话中,然后挂起。审批者会在 该对话中征求你的决定,并通过 submit_output 以 { "decision": "approved" | "rejected", "reason": "..." } 提交。该决定会写入 输出键(默认 approval_decision)下,因此下游的分支路由器可以据此分支。

把 智能体 设为审批者,把 提示模板 设为门禁问题。门禁通过 submit_output 以 { "decision": "approved" | "rejected", "reason": "..." } 的形式给出结果。 Reviewer (prompt) 节点以同样的方式提交。

会添加 团队 ID 和 调度模式。选择器只提供两种模式:

  • allParallel —— 每个成员一个任务,挂起直到全部完成。
  • manager —— 派发负责人,由后者委派。

其他任何已存储的值都按 allParallel 处理。把 合并器 设为 append,即可把 每个成员的结果收集为输出键下的一个列表。

For each 默认对 items 状态键做映射(节点上的 extras.iterableKey / extras.itemKey)。它对每个条目渲染一次提示词(默认 {{item}}),把这些提示词 拼接后一次派发智能体。空集合会立即以空列表完成。它并不是为每个条目各做一次 并行派发。

Call sub-pipeline 会挂起,直到子运行达到终态,然后把子运行的最终状态合并到 输出键(默认 subflow_result)下。用 extras.templateId 将其指向一个子模板。 模板不能调用自身;子运行失败或被取消会使父步骤失败,随后交由该步骤的重试与失败后 继续策略处理。

两者都在编辑器页眉的 手动运行 之下。

  1. 点击 手动运行。
  2. 打开 允许手动运行。这个开关会立即持久化——它会创建(或删除)manual 触发器行,从而让模板出现在运行选择器中。
  3. 如果需要上限,设置 最大并行运行数(留空表示不限制)。多余的启动会以 queued 状态等待,直到有槽位空出。
  4. 对每次手动运行应收集的每个表单字段点击 添加输入:
字段 描述
键 值存储所用的状态键;以 {{key}} 引用它
标签 显示标签(默认为该键)
类型 文本、多行文本、数字、开关、下拉选择、仓库
选项 以逗号分隔的选项,仅用于下拉选择
默认值 预填的值
占位符 空字段内的提示文本
帮助文本 字段下方的辅助文本
必填 运行表单是否会在值为空时阻止提交

仓库 输入会渲染一个针对工作区仓库的选择器,并把 repo_id、 repo_local_path、repo_full_name 以及——当仓库有 GitHub 远程时——repo_owner 和 repo_name 填充到运行负载中。

  1. 在对话框中点击 保存。对输入的修改会并入草稿;保存模板时它们就会持久化。
  1. 点击编辑器页眉中的 保存。在此之前,页眉会显示“未保存的更改”。
  2. 回到 设置 → 工作区 → 流水线模板,确认该模板所在行的开关已打开。引擎 拒绝启动已禁用的模板,已禁用的模板也永远不会出现在运行选择器中。
  3. 若要让它自动启动,请从节点库中把一个触发器拖到画布上——参见 设置流水线触发器。