调用场景编排
一个完整的业务动作通常需要多条命令协作完成,且命令之间存在先后依赖:例如先查询用户拿到 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 说明该场景解决的问题 |
第二步:放置节点
工具栏提供两类节点:命令节点(绿色)与判断节点(黄色)。
命令节点对应一条实际执行的命令,选中后在右侧面板编辑:
| 字段 | 说明 |
|---|---|
| 别名 | 场景内唯一,供其它节点通过 别名.字段 引用其出参;留空时自动编号为 step1、step2… |
| 命令 | 从下拉选择,选项来自该 CLI 已绑定的 API |
| 说明 | 该步骤的作用 |
| 入参来源 | 该步骤入参的来源,如 create.id + query.token |
选中命令后,右侧面板只读展示该命令的入参、出参字段,以及场景内可用别名清单,供填写「入参来源」时对照,不作校验。
判断节点不执行命令,仅用于汇聚与分支,包含别名与说明两个字段。说明用于描述合并判断的依据,如「基于上游 create.status 合并,判断…」。
第三步:连线并设置分支条件
拖动节点锚点手动连线,点击连线编辑条件;也可在节点详情面板中,通过「出向连线」多选框选择目标节点。
分支条件以自然语言描述,可引用 别名.字段,如 当 create.status 为 active 时。留空表示默认流转。
连线的渲染遵循两条规则:
- 判断节点的出边始终渲染。
- 命令节点的出边,仅在存在两条及以上出边、或任一出边设置了条件时渲染。单条无条件出边不渲染,其先后关系由步骤编号表达,以避免线性链路中出现冗余箭头。
第四步:保存
点击保存即写入。场景无独立接口,保存操作实为更新整条 CLI 记录。
别名重复将阻止保存,并提示「场景「X」存在重复别名:Y,请修改后再保存」。该校验仅在前端进行,作用域为单个场景内;不同场景之间别名可以重复。
生成产物
编排完成后下载 Skill 包,SKILL.md 中会新增一段「典型场景」。以「先创建用户,再按状态决定是否发送通知」为例:
## 典型场景
### 开通用户
新用户注册后建档并发送欢迎通知。
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 独立服务,详见上文。
- 保存时提示别名重复:同一场景内别名必须唯一,不同场景之间可以重复。


