# 錯誤與重試

Source: https://openflow.run/zh-tw/docs/concepts/errors-and-retries/
Language: zh-TW
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-tw/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)
