Skip to content

Output Block(统一输出) ​

2026-09-26 起支持。声明工作流对外的最终输出结构(IPO 的 O)。

功能说明 ​

Output Block 是文档尾部的声明节点:定义这个工作流对外返回什么字段、什么类型、取值来自哪里。它不是执行步骤——不能拖到文档中间,不会出现在执行记录里。

配置它之后:

  • 正常跑完(文档结束)与提前 Exit 返回同一份字段结构;每个 Exit 只能改某个字段的取值(覆盖)或省略可选字段。
  • 运行 API、发布 API、Release、子流程引用拿到的都是这份声明的 JSON,不再暴露文档中间的过程数据。
  • API 使用 JSON、SSE 或 NDJSON 响应时都遵守同一输出结构;流式响应只在结束时返回最终输出。
  • 不配置时行为与旧版完全一致(全量输出)。

使用方式 ​

Output 的编辑界面常驻工作区底部,默认收起。正文独立滚动,展开后仍可查看上文;切换 Exit 会将它定位到底栏上方,并淡化之后的内容。

  1. 展开底部「输出」面板,添加字段:字段名、类型(文本/数字/布尔/列表/对象/下拉)、是否必填。
  2. 为「文档结束」的每个字段配置默认取值:引用上游变量或固定值(对象/数组用 JSON)。
  3. 有 Exit 时面板出现多个结束点 Tab;切到某个 Exit 可为字段覆盖取值或省略可选字段,字段名与类型只读。
  4. 点「保存设置」:全部结束点一起校验,任何出口有错都不能保存(错误 Tab 有红点标记)。

规则要点 ​

  • 变量候选按当前位置实际可访问的变量过滤:Exit 只能看到它之前已产生的变量;循环内的 Exit 能取当前迭代的 item/index;其他分支、之后定义的变量不会出现。
  • 必填字段不能被省略;固定值 false、0、空字符串、空数组都是合法值,与"没配置"严格区分。
  • 显式的 JSON null 固定值只有勾选了 nullable 的字段接受;未勾选的字段配 null 会校验失败。
  • 字段改名后 Exit 的覆盖关系保持(按稳定 ID 关联);基准新增字段自动进入全部出口,删除字段自动清理覆盖。
  • 预览可切换「输出 JSON / 统一 Schema」;未配置完成时显示草稿和错误,不会伪造有效结果。
  • 文档新增、移动块后,变量候选会随位置更新。快捷候选和预览显示可读的块名与变量名。

输出形态 ​

Markdown IR 配置 ​

output 使用成对的 wn:output 标记。它是文档配置,不需要块的 id 或 name。config 是同一行 attrs 中的 JSON 字符串;空 attrs {} 表示尚未配置。

markdown
<!-- wn:output {"config":"{\"version\":1,\"mode\":\"schema\",\"fields\":[{\"id\":\"answer\",\"name\":\"answer\",\"type\":\"text\",\"required\":true,\"binding\":{\"sourceType\":\"string\",\"sourceValue\":\"hello\"}}],\"exits\":{}}"} -->
> [!OUTPUT]
<!-- /wn:output -->

把它放在 Flow 文档顶层末尾,最多一个。解析器会把单个顶层输出配置移到末尾,再检查文档结构。完整文档 workflow:lint 会拒绝循环、分支内及 Skill 中的输出配置(E110),重复输出标记由解析对账拒绝(E000)。运行前仍需校验配置及变量绑定。

运行结果 ​

配置 Output 后,运行结果只包含声明字段:

json
{
  "answer": "……",
  "sources": ["……"],
  "success": false
}

通过 API 调用已发布版本时,这些字段位于响应的 output.value 中:output 的完整形态是 { endpointId, endpointName, value },endpointId 为 doc-end(文档末尾结束)或结束时的 Exit 块 ID。响应不再包含 sessions。值超过 256 KB 时,流式终态事件和裸部署的同步响应只返回 { endpointId, endpointName, finalOutputSlot: true },需要用 GET /runs/:runId 读取完整值。详见 已发布应用运行。

运行时若必填字段缺失或类型不匹配,本次运行明确失败(不会回退到全量输出)。

运行完成后,在运行窗口和运行记录的「结果」中查看实际输出 JSON;配置预览中的变量名称只是占位。Ask 等待输入时尚未产生最终输出,续跑完成后才展示。

与其他 Block 的关系 ​

  • Exit Block:点击块上的名称,在现有块配置面板中改名;对应输出 Tab 会同步更新,覆盖关系保留。Exit 视图上的「设置输出」入口可直接跳转。
  • Flow Block:引用一个配置了 Output 的子流程时,只能取它声明的字段(如 flow_1.answer),子流程内部块不再暴露。
  • Input Block:字段仅被 Output 引用的输入仍会出现在 API Schema 中。
  • skill 文档不支持 Output(仅工作流文档)。

兼容性 ​

  • 旧文档/未配置的工作流行为不变。
  • 旧版本客户端在服务端开启兼容门禁后会被提示升级,防止协作时误删 Output 配置。

AI Workflow Editor