Skip to content

调用场景编排

一个完整的业务动作通常需要多条命令协作完成,且命令之间存在先后依赖:例如先查询用户拿到 userId,再以该 userId 下单。AI 无法预知这层依赖,只能逐条尝试。调用场景编排用于将依赖关系显式定义——在画布上把命令连成带条件分支的链路,GVA 据此生成一段流程说明,供 AI 按序执行。

该功能同时服务于 AI CLI 构建 与 AI MCP 构建,两者共用同一画布,仅最终产物不同。

工作原理

场景编排的产物是一段供 AI 阅读的流程说明,而非可执行的流程本身。GVA 不执行链路,也不在命令之间传递数据:上游命令返回的 id,需由 AI 自行填入下游命令的入参。CLI 场景的流程说明写入 SKILL.md,MCP 场景渲染为一个 prompt;AI 读取后自行决定调用顺序与参数传递。

因此,「入参来源」与「分支条件」均为自由文本,后端不解析、不校验,原样写入流程说明。画布中相应字段的输入提示即为「用自然语言描述」。

编排过程中,以下三项由 GVA 自动完成:

自动处理项说明
命令与出入参提取命令清单及每条命令的入参、出参字段名,均从 Swagger 与 API 绑定自动推导,无需手动填写
步骤顺序推导仅需连线、无需编号,GVA 通过拓扑排序计算执行顺序;链路存在环时不报错,环内节点降级追加至末尾
失效命令过滤生成 Skill 时,指向已删除命令的节点及悬空连线将被自动剔除

三者分工为:依赖关系由用户定义,调用顺序由 GVA 推导,实际执行由 AI 完成。

CLI 场景与 MCP 场景

两类场景共用同一套画布、字段与渲染逻辑,差异如下:

AI CLI 场景AI MCP 场景
入口AI 工坊 → AI CLI管理 → 行内「管理场景」AI 工坊 → AI MCP构建 → 行内「管理场景」
编排对象CLI 命令MCP 工具
产物写入 SKILL.md 的「典型场景」段动态 prompt orchestration_<名称>
交付方式随 Skill 包下载AI 编辑器连接 MCP 后直接可见
界面内预览不支持,需下载 Skill 包查看支持,「预览Prompt」按钮
失效命令过滤过滤不过滤,会渲染出「(未知节点)」

下文以 CLI 场景为例说明,MCP 场景操作一致。

编排步骤

点击「管理场景」,右侧滑出「调用场景编排」抽屉(占屏 80%)。编排包含四步:新建场景、放置节点、连线并设置分支条件、保存。

第一步:新建场景

同一 CLI 下可创建多个场景,通过顶部下拉切换。新建后填写以下字段:

字段说明
场景名渲染为 ### 场景名;留空时显示为「未命名场景」
场景说明渲染于场景名下方,用于向 AI 说明该场景解决的问题

第二步:放置节点

工具栏提供两类节点:命令节点(绿色)与判断节点(黄色)。

命令节点对应一条实际执行的命令,选中后在右侧面板编辑:

字段说明
别名场景内唯一,供其它节点通过 别名.字段 引用其出参;留空时自动编号为 step1step2
命令从下拉选择,选项来自该 CLI 已绑定的 API
说明该步骤的作用
入参来源该步骤入参的来源,如 create.id + query.token

选中命令后,右侧面板只读展示该命令的入参、出参字段,以及场景内可用别名清单,供填写「入参来源」时对照,不作校验。

判断节点不执行命令,仅用于汇聚与分支,包含别名说明两个字段。说明用于描述合并判断的依据,如「基于上游 create.status 合并,判断…」。

第三步:连线并设置分支条件

拖动节点锚点手动连线,点击连线编辑条件;也可在节点详情面板中,通过「出向连线」多选框选择目标节点。

分支条件以自然语言描述,可引用 别名.字段,如 当 create.status 为 active 时。留空表示默认流转。

连线的渲染遵循两条规则:

  • 判断节点的出边始终渲染。
  • 命令节点的出边,仅在存在两条及以上出边、或任一出边设置了条件时渲染。单条无条件出边不渲染,其先后关系由步骤编号表达,以避免线性链路中出现冗余箭头。

第四步:保存

点击保存即写入。场景无独立接口,保存操作实为更新整条 CLI 记录。

别名重复将阻止保存,并提示「场景「X」存在重复别名:Y,请修改后再保存」。该校验仅在前端进行,作用域为单个场景内;不同场景之间别名可以重复。

生成产物

编排完成后下载 Skill 包,SKILL.md 中会新增一段「典型场景」。以「先创建用户,再按状态决定是否发送通知」为例:

markdown
## 典型场景

### 开通用户

新用户注册后建档并发送欢迎通知。

1. `user-create`(别名:create) — 创建用户
2. 判断:基于 create.status 合并判断(别名:check)
   - 若 create.status=active → `notify-send(别名:notify)`
3. `notify-send`(别名:notify)(入参:create.id)

各元素的渲染规则如下:

元素渲染为
命令节点``N. 命令名``` + (别名:x)+ — 说明+(入参:x)`,后三项留空则不出现
判断节点N. 判断:说明(说明留空时只渲染「判断」)+ (别名:x)
带条件的连线 - 若 <条件> → <目标节点>
未填条件的连线 - 默认流转 → <目标节点>

MCP 场景的产物与此一致,但不包含 ## 典型场景 这一级标题:其整体即为一个 prompt,无需额外层级。可在画布中点击「预览Prompt」查看,弹窗标题为「编排 Prompt 预览(AI 将看到的内容)」。

MCP 场景的生效方式

CLI 场景随 Skill 包下载即可使用;MCP 场景需经过一次注册后生效。

处于启用状态且已配置场景的 MCP 记录,会被渲染为一个名为 orchestration_<MCP名称> 的 prompt。MCP 独立服务启动时拉取并注册这些 prompt,AI 编辑器连接后即可看到。

修改场景后需重启 MCP 服务

编排 prompt 仅在 MCP 进程启动时注册一次,不支持热加载。在画布中修改并保存后,需前往 AI 工坊 → Mcp Tools管理 停止再启动服务,或重启 go run ./cmd/mcp 进程,改动方可对 AI 生效。界面不会就此给出提示。

注意事项

非法的场景 JSON 将被静默忽略

场景以一整段 JSON 存储于 CLI / MCP 记录中。当 JSON 解析失败(如手动编辑导致格式错误)时,生成 Skill 会跳过该场景且不报错,以避免阻塞 Skill 生成。若 SKILL.md 中缺少「典型场景」段,应优先排查此项。

别名留空会渲染出「(别名:)」

分支目标的渲染存在一处已知缺陷:目标节点未设别名时,会渲染为 `pay-notify(别名:)` 的形式。该问题不影响 AI 理解,但影响观感。为每个被分支指向的命令节点设置别名即可规避。

场景排序字段不生效

数据结构中包含排序字段,画布也会写入该字段,但渲染时未使用;多个场景按保存时的数组顺序渲染。

后端不校验场景数据

别名唯一性仅由前端拦截。若通过接口直接提交,重复别名、引用不存在的别名、无效的入参来源均会被原样接受并写入产物。画布是唯一的校验环节。

常见问题

  • 已填写「入参来源」,但 AI 未按其传参:入参来源是供 AI 参考的提示,而非执行指令,最终由模型决定。可更换工具调用更稳定的模型,或将说明写得更明确。
  • 连线已设置条件,但产物中未体现:该节点为命令节点且仅有一条出边,单条无条件出边不渲染。为其添加条件,或确认条件已设置在该连线上。
  • SKILL.md 中无「典型场景」段:场景为空、JSON 解析失败,或场景内命令已从该 CLI 解绑而被过滤。
  • MCP 场景中出现「(未知节点)」:连线指向了已删除的节点。MCP 预览不做过滤,需返回画布清除悬空连线。
  • 修改 MCP 场景后 AI 无变化:编排 prompt 不支持热加载,需重启 MCP 独立服务,详见上文。
  • 保存时提示别名重复:同一场景内别名必须唯一,不同场景之间可以重复。