Output Block(统一输出)
2026-09-26 起支持。声明工作流对外的最终输出结构(IPO 的 O)。
功能说明
Output Block 是文档尾部的声明节点:定义这个工作流对外返回什么字段、什么类型、取值来自哪里。它不是执行步骤——不能拖到文档中间,不会出现在执行记录里。
配置它之后:
- 正常跑完(文档结束)与提前 Exit 返回同一份字段结构;每个 Exit 只能改某个字段的取值(覆盖)或省略可选字段。
- 运行 API、发布 API、Release、子流程引用拿到的都是这份声明的 JSON,不再暴露文档中间的过程数据。
- API 使用 JSON、SSE 或 NDJSON 响应时都遵守同一输出结构;流式响应只在结束时返回最终输出。
- 不配置时行为与旧版完全一致(全量输出)。
使用方式
Output 的编辑界面常驻工作区底部,默认收起。正文独立滚动,展开后仍可查看上文;切换 Exit 会将它定位到底栏上方,并淡化之后的内容。
- 展开底部「输出」面板,添加字段:字段名、类型(文本/数字/布尔/列表/对象/下拉)、是否必填。
- 为「文档结束」的每个字段配置默认取值:引用上游变量或固定值(对象/数组用 JSON)。
- 有 Exit 时面板出现多个结束点 Tab;切到某个 Exit 可为字段覆盖取值或省略可选字段,字段名与类型只读。
- 点「保存设置」:全部结束点一起校验,任何出口有错都不能保存(错误 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 {} 表示尚未配置。
<!-- 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 后,运行结果只包含声明字段:
{
"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 配置。