11月2日技能API 变更公告|「条件未命中」返回状态语义升级
为了更好的区分「条件节点未命中目标分支导致技能无输出」和「技能执行发生错误」两类完全不同的场景,对技能接口响应进行更新。
此前两类场景均以
HTTP 400/ 任务Failed表达,调用方无法区分"请求参数错误"与"数据未命中条件",并将正常业务结果计入服务端错误率。本次变更将其归入成功语义,并通过独立状态字段加以区分。避免将正常业务空结果误当成系统故障,减少无效告警、错误重试,让状态语义更符合业务预期。本次变更计划于11月2日 23:00:00上线,上线前接口保持原有行为,请相关调用方按需安排评估适配。如有疑问,请联系您的对接技术支持,或提交工单咨询,感谢您对于一见平台的理解与支持!
变更说明
技能执行过程中,当技能内配置的条件节点判断未命中(本次输入数据不满足条件,条件节点未命中目标分支,导致技能运行无法到达结束节点,本次无产出)时,返回语义由 “执行失败” 调整为执行成功但无输出。原有依靠 HTTP 状态码、异步任务状态 Failed 来判断 “是否拿到业务结果” 的逻辑会受到影响:
- 同步接口:该场景下返回码由
HTTP 400调整为HTTP 200;响应体outputs为空数组,新增outputStatus字段标识输出状态。 - 异步任务:该场景下任务状态由标记
Failed调整为Succeeded;回调通知、任务查询结果中outputs为空数组,新增output_status字段标识输出状态。 - 技能自身异常场景(请求参数非法、模型不可用、算子异常等)行为保持不变:同步接口仍返回
4xx/5xx,异步任务仍标记为Failed。
本次以新增字段方式实现变更:只消费 outputs 输出的调用方无需改造;仅依赖 HTTP 状态码、异步任务 Failed 状态判断有无业务产出的用户,需要适配调整判断逻辑。
兼容性与接入指引
| 调用方场景 | 是否需改造 | 说明 |
|---|---|---|
依据HTTP 400 / 任务 Failed 判断"条件未命中" |
必须改造 | 该信号不再出现,请改为判断outputStatus == "NO_OUTPUT"(异步为 output_status) |
| 需区分"有结果 / 无结果" | 建议改造 | 请以outputStatus / output_status 判断,不以 outputs 是否为空推断 |
仅消费outputs |
无需改造 | 未命中时取得空数组,与此前跳过逻辑一致 |
| 仅处理真实执行错误 | 无需改造 | 真实执行错误的状态码与错误结构不变 |
将HTTP 400 计入监控告警 |
无需改造 | 条件未命中不再触发该告警 |
影响范围
| 能力 | 接口路径 | 变更点 |
|---|---|---|
| 同步技能调用 | POST /api/skills/v1/{ep-id}/run |
条件未命中由HTTP 400 调整为 HTTP 200,响应新增 outputStatus |
| 异步回调通知 | Webhook / NATS 回调 | Succeeded 事件新增 output_status |
| 异步任务查询 | POST /api/vistudio/v1/workspaces/{workspaceID}/asynctasks/{taskID}/get |
Succeeded 任务新增 output_status |
同步接口
同步技能调用接口 POST /api/skills/v1/{ep-id}/run,条件未命中时的响应变化如下。
变更前(条件未命中)
1HTTP/1.1 400 Bad Request
2
3{
4 "success": false,
5 "message": "The conditional branch did not reach the end node, and no output was produced."
6}
变更后(条件未命中)
1HTTP/1.1 200 OK
2
3{
4 "success": true,
5 "result": {
6 "outputs": [],
7 "outputStatus": "NO_OUTPUT"
8 }
9}
变更后(正常命中)
1HTTP/1.1 200 OK
2
3{
4 "success": true,
5 "result": {
6 "outputs": [ { "name": "...", "value": "..." } ],
7 "outputStatus": "HAS_OUTPUT"
8 }
9}
响应参数
| 参数名称 | 类型 | 描述 |
|---|---|---|
| result.outputStatus | String | 输出状态。HAS_OUTPUT 表示正常产出;NO_OUTPUT 表示执行成功但条件未命中,此时 result.outputs 必为空数组。新增字段,默认 HAS_OUTPUT,取值仅此两种 |
异步任务
回调通知(Webhook / NATS)
任务完成回调在 status 为 Succeeded 时新增 output_status 字段。条件未命中时的回调示例:
1{
2 "event": "task.completed",
3 "task_id": "task-xxxxxxxx",
4 "endpoint_id": "ep-xxxxxxxx",
5 "status": "Succeeded",
6 "output_status": "NO_OUTPUT",
7 "outputs": []
8}
任务查询
查询单个任务 POST /api/vistudio/v1/workspaces/{workspaceID}/asynctasks/{taskID}/get,Succeeded 任务的响应中新增 result.output_status,取值与回调一致。
响应参数
| 参数名称 | 类型 | 描述 |
|---|---|---|
| output_status | String | 输出状态,仅status 为 Succeeded 时返回。HAS_OUTPUT 表示正常产出;NO_OUTPUT 表示条件未命中、outputs 为空数组。Failed、Partial_Succeeded 及中间态不含该字段;变更生效前完成的历史任务无该字段,读取时按 HAS_OUTPUT 处理 |
说明:条件未命中的
Succeeded事件会携带显式的"outputs": [],请以output_status判断输出状态,不以outputs字段是否存在推断。任务列表接口不返回output_status,如需判断请查询任务详情。
字段取值
| 取值 | 含义 |
|---|---|
| HAS_OUTPUT | 技能正常产出结果 |
| NO_OUTPUT | 技能执行成功,但条件未命中,无输出(outputs 为空数组) |
文档查阅
评价此篇文章
