Closed-loop AI Agent是一套根據環境回饋持續調整行動,並在明確條件下成功、失敗、暫停或等待人工的控制系統。模型負責理解模糊資訊與提出候選行動;外層控制器負責狀態、工具政策、預算、執行、驗證、日誌與人工核准。
閉環的核心不是讓Agent一直運行,而是每一輪都有可觀察輸入、受限制的行動、外部結果與可驗證更新。模型說「完成」只能算候選判斷,真正完成要由測試、Schema、資料庫狀態、產出檔案或具名人員確認。
重點快讀
- 模型提出Action Proposal,Policy Layer決定是否允許執行。
- 工具結果必須形成Observation,再由Verifier判斷是否符合成功條件。
- 任務狀態應保存於外部Store,不能只存在聊天上下文。
- 重試要依錯誤分類,認證、政策與資料衝突不能無限重試。
- 每個任務需要SUCCEEDED、FAILED、PAUSED、WAITING_FOR_APPROVAL與CANCELLED等終止狀態。
什麼任務需要閉環Agent?
| 任務特徵 | 建議架構 |
|---|---|
| 輸入、步驟與錯誤都固定 | 傳統程式或Workflow |
| 固定流程中需要摘要或分類 | Workflow加單次LLM節點 |
| 需要搜尋、探索、工具回饋與反覆修正 | Closed-loop Agent |
| 子任務數量未知但可獨立驗收 | Orchestrator加受控Workers |
| 高風險且無法外部驗證 | 人工主導,Agent只提供建議 |
閉環適合未知原因除錯、多來源研究、資料分析與需要根據中間結果調整路徑的工作。固定報表、欄位轉換與交易流程應優先使用一般程式,避免把確定規則交給機率性模型。
控制迴路的七個階段
- Goal:建立任務目標、成功條件、風險與預算。
- Observe:取得目前State、環境、資料與最近結果。
- Propose:模型提出下一個候選行動與理由。
- Authorize:政策層檢查Tool、Scope、參數、成本與核准。
- Execute:在受限環境呼叫工具。
- Verify:以外部條件確認結果是否有效。
- Update/Stop:更新狀態、調整計畫或進入終止狀態。
Proposal、Authorization、Execution與Verification必須分開。若模型能直接繞過政策層呼叫工具,或能自行修改成功標準,閉環就失去控制。
狀態機需要哪些狀態?
| 狀態 | 意義 |
|---|---|
| QUEUED | 任務已建立,等待資源與權限檢查 |
| RUNNING | 控制迴路正在觀察、決策與執行 |
| WAITING_FOR_INPUT | 缺少使用者資料或必要條件 |
| WAITING_FOR_APPROVAL | 高風險行動等待具名核准 |
| PAUSED | 因成本、維護、事故或人工要求暫停 |
| SUCCEEDED | 成功條件已由外部證據確認 |
| FAILED | 無法在限制內完成,保留原因與成果 |
| CANCELLED | 使用者或政策明確終止 |
狀態轉移要由控制器管理,並保存時間、原因、版本與責任人。WAITING不是錯誤;長任務常需要等待資料、核准或外部事件,系統應能釋放資源後再繼續。
最小資料模型
| 物件 | 必要欄位 | 用途 |
|---|---|---|
| Task | task_id、goal、success_criteria、risk | 保存原始任務與完成定義 |
| Constraints | tools、scopes、budgets、deadline、forbidden | 限制可用資源與行動 |
| State | status、step、facts、artifacts、version | 支援中斷、更新與恢復 |
| Action | action_id、tool、arguments、reason、approval | 記錄候選與已授權行動 |
| Observation | result、error、evidence、timestamp | 保存工具與環境回饋 |
| Verification | checks、outcome、defects、confidence | 判斷是否通過外部驗收 |
| Trace | model、prompt、skill、tokens、latency、policy | 支援除錯、成本與稽核 |
State、Artifact與原始證據應存放於外部儲存層。對話摘要可以節省Context,但不能取代Tool Result、檔案版本、測試報告與核准紀錄。
控制器偽代碼
function run(taskId):
task = loadTask(taskId)
state = loadState(taskId)
while state.status == RUNNING:
enforceBudget(task, state)
observation = observe(task, state)
proposal = model.propose({
goal: task.goal,
criteria: task.success_criteria,
state,
observation
})
policy = authorize({
identity: state.agent_identity,
tool: proposal.tool,
args: proposal.arguments,
risk: task.risk,
constraints: task.constraints
})
if policy.requiresApproval:
state.status = WAITING_FOR_APPROVAL
save(state, proposal, policy)
return state
if policy.denied:
state = recordDenied(state, proposal, policy)
state = retryOrStop(state)
save(state)
continue
result = executeInSandbox(proposal)
verification = verify(task.success_criteria, result, state)
state = update(state, proposal, result, verification)
if verification.success:
state.status = SUCCEEDED
else if shouldStop(state):
state.status = FAILED
save(state, proposal, result, verification)
return state程式碼重點是模型只產生Proposal。身份、權限、工具執行與完成判斷都位於模型外部,讓系統能用一般工程方法測試與稽核。
工具介面如何支援閉環?
- 名稱描述單一動作,例如
invoice.create_draft。 - 參數使用Schema,避免任意Shell或自由JSON。
- 讀取、草稿、送出與刪除拆成不同工具。
- 回傳Resource ID、版本、錯誤碼、證據與可重試提示。
- 有副作用的操作使用Idempotency Key。
- 提供Dry Run、Preview或Rollback。
- 文件清楚說明權限、後果與錯誤分類。
Tool Description越模糊,模型越需要猜測;在有副作用的環境中,猜測會轉成錯誤寫入。工具應像公開API一樣被設計、測試與版本化。
Verifier如何設計?
| 任務 | 外部驗證 |
|---|---|
| 程式修改 | Build、Lint、Type Check、Unit、Integration與E2E |
| 資料處理 | Schema、筆數、Checksum、統計與異常值 |
| 研究報告 | 來源、日期、主張對應與矛盾標記 |
| 內容更新 | 目標Post ID、正文、Meta、內鏈與回讀狀態 |
| 外部寫入 | 實際Resource ID、版本與系統狀態 |
| 高風險決策 | 具名專家或多人核准 |
Verifier可以包含程式、規則、測試與人,不必是一個「審查Agent」。另一個模型適合找缺漏與反例,但不能取代原始資料與環境證據。
Retry、Replan與Stop怎麼分?
| 情況 | 控制方式 |
|---|---|
| 暫時網路逾時 | 有限次指數退避Retry |
| 參數格式錯誤 | 修正參數後Retry |
| 工具選錯或結果不符 | Replan,選擇不同路徑 |
| 認證或權限不足 | 停止,等待授權 |
| 來源矛盾或目標不清 | 等待人工輸入 |
| 相同行動重複 | 判定Loop並停止 |
| 達到時間、成本、步數上限 | 保存目前成果並FAILED或PAUSED |
Retry重做相同行動;Replan改變策略;Stop承認系統在目前限制內無法可靠完成。三者混在一起,容易形成重試風暴與成本失控。
停止條件
- 成功條件已被外部證據確認。
- 同一Tool與參數重複超過門檻。
- 連續失敗沒有產生新的診斷。
- 達到Token、費用、時間、步數或工具上限。
- 需要未授權資料、工具或高風險行動。
- 環境狀態與原計畫產生重大衝突。
- 使用者取消、事故停機或維護模式啟動。
停止時要回報已完成、未完成、使用證據、最後可靠State與建議下一步,不能只輸出「任務失敗」。
人類核准如何進入迴路?
- 顯示即將執行的Tool與完整目標。
- 列出依據資料、版本與不確定性。
- 說明外部影響、是否可逆與回退方式。
- 保存核准者、時間、範圍與條件。
- 核准後重新檢查環境狀態,避免使用過期Proposal。
等待核准期間,外部資料可能改變。重新啟動時應確認Resource Version、價格、Post ID或部署版本仍與預覽一致。
評估指標
| 指標 | 用途 |
|---|---|
| 任務成功率 | 外部驗證通過的比例 |
| 首次成功率 | 無Retry與人工修正即完成 |
| 平均步數與延遲 | 完成一個任務的迴路成本 |
| 每個有效任務成本 | 模型、工具、人工與維護總成本 |
| 人工介入率 | 需要補資料、核准或接手的比例 |
| 高風險誤動作率 | 未授權或錯誤副作用 |
| 回復成功率 | 中斷或失敗後能正確繼續 |
| 可重現率 | 能否用相同版本重建Trace與結果 |
上線前檢核
- 成功條件可由程式、環境或具名人員驗證。
- 模型沒有繞過Policy直接執行工具的路徑。
- 副作用工具有冪等、預覽與回復。
- Task State可在程序中斷後恢復。
- 已設定步數、時間、Token、費用與Retry上限。
- Trace包含模型、Prompt、Skill、工具、政策與核准。
- 測試集包含工具錯誤、資料缺漏、越權與Prompt Injection。
- 有事故停機、通知與Owner。
Agent、Workflow、Harness與Platform的完整層級,可閱讀Agentic Systems架構地圖;長任務如何拆成Milestone與Context Budget,可閱讀長任務AI Agent怎麼拆?。
常見問題
Closed-loop Agent和Workflow差在哪?
Workflow由程式預先定義路徑;Closed-loop Agent會根據Observation動態選擇下一步。兩者都可以有狀態、驗證與人工節點。
模型越強,Policy和Verifier還需要嗎?
仍然需要。模型能力提高會擴大可完成任務,也會放大工具副作用。身份、權限、預算與驗證屬於系統責任。
所有工具都要人工核准嗎?
不需要。唯讀、低風險、可逆且驗收明確的工具可自動執行;付款、刪除、正式發布、部署與權限變更應等待人工。
資料來源
- Anthropic:Building Effective Agents
- Anthropic:Effective Harnesses for Long-running Agents
- OpenAI:Agents Guide
- OpenAI:Evaluate Agent Workflows
Closed-loop AI Agent的可靠性來自責任分離:模型提出候選,政策限制行動,工具改變環境,Verifier確認結果,狀態機決定繼續或停止。迴路越清楚,Agent越能被測試、恢復與長期營運。

發表迴響