# 错误与重试

Source: https://openflow.run/zh-cn/docs/concepts/errors-and-retries/
Language: zh-CN
Product version: 0.1.0-beta.77

选择何时重试整个任务、带着错误继续执行，或停止运行。

重试会使用相同输入，重新执行整个任务。错误处理则可以将支持处理的最终失败转为系统错误值。两者独立配置，执行后果也不同。

## 任务重试

代码、应用操作、OpenAPI、LLM 和 AI 决策节点支持 `retry`。`maxRetries` 为额外重试次数，范围是 0–5。`intervalMs` 必须是 1,000–60,000 毫秒之间的整秒数。

```json
{
  "op": "node.update",
  "node": "NODE_REFERENCE",
  "set": { "retry": { "maxRetries": 2, "intervalMs": 5000 } }
}
```

重试可能重复外部操作。它不会重置运行截止时间、绕过限制，也不能重放结果尚未确认的外部操作。Agent、工作流调用、触发器、等待和审批不支持这套节点重试策略。

## 处理错误

上述五类任务还支持 `onError: "error"`，默认值为 `"stop"`。启用重试时，错误处理在最后一次尝试后生效。支持处理的输入或输出校验失败，可以进入错误处理，但不会重试。

执行成功时，系统 `error` 输出为 null。失败被处理后，系统会输出结构化错误，并沿普通执行连线继续。本次失败调用不会提交业务输出。

```json
{
  "kind": "system",
  "node": "NODE_REFERENCE",
  "port": "error"
}
```

可以用条件节点区分 null 和错误对象。如果处理后的失败路径能到达下游业务输入，该输入就必须允许缺失值或 null。错误处理没有单独的执行连线。

## 无法处理为业务错误的失败

取消、超时、资源限制、隔离失败、持久化失败，以及结果不确定的外部操作，都不能转成普通的可处理业务错误。

## 工作流级错误处理

[工作流错误触发器](https://openflow.run/zh-cn/docs/nodes/error/index.md)会为符合条件的生产失败启动独立的处理运行。它不负责捕获单个节点错误，不会清除源运行的失败状态，也不能证明重新执行原任务是安全的。

## 资料来源

*   [docs/authoring/node-authoring.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/authoring/node-authoring.md#node-retries)
*   [docs/authoring/node-authoring.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/authoring/node-authoring.md#node-error-handling)
*   [docs/control/contracts/control-api.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/control-api.md#node-retry-policy)
