跳至主要內容

coding agent observability budget recovery checkpoint

實作

記錄執行過程、限制預算,並測試中斷後的復原

記錄狀態、工具、檢查、成本、進度與操作效果,讓無人看守的工作能在卡住或中斷時安全停止,再從正式可信的檢查點接回。

難度
進階
預估時間
145 分鐘
更新日期
2026-10-02
文案複核
speak-human-tw
兩輪
本課內容
  1. 01先把定義說清楚
  2. 02現場情境
  3. 03實作範例
  4. 04照著做,每一步都有檢查點
  5. 05實務脈絡
  6. 06動手實作
  7. 07故障診間
  8. 08正式上線前的邊界
  9. 09資料來源與主張限制

這一課會完成什麼

  • 建立可串聯的事件以重建控制流程,避免保存敏感內容或模型隱藏推理
  • 在執行前檢查回合、時間、呼叫、輸出、修改、重試及費用上限
  • 用狀態與已標準化的觀察紀錄偵測沒有進展和操作結果未知
  • 在程序崩潰、工具服務中斷與核准等待後重新授權並安全恢復

開始前先準備

  • • 模組 04 到 07 的狀態機、工具聯集型別、由程式強制執行的規則與評測集
  • • 能在派送執行、操作效果、觀察紀錄與檢查點前後注入程序崩潰的測試資料執行器

先把定義說清楚

觀測、預算與復原

營運中的 Harness 要讓每次執行能被重建、有明確上限,並可安全復原。控制器為狀態轉移、工具執行、觀察、檢查、操作效果、預算與停止原因寫入可串聯的事件,工作前先保留所需額度,達停止條件便保存正式檢查點。恢復時重新核對身分、規則、環境、Git、狀態、核准與操作紀錄。先前對話曾取得權限,不能保證現在仍有權繼續,也不能證明未知結果的操作可以重試。

程式撰寫工作階段可能一直重跑同一失敗測試、搜尋相同路由、產生新說法,卻沒有增加證據或改變狀態。若進度由模型自行宣告,系統會在很久以後才讓人知道卡住,時間、token 與審查者注意力都已經消耗。

復原同樣是控制邊界。程序崩潰可能發生在寫入完成但觀察紀錄尚未存、分支已改變、或核准已過期。從聊天摘要恢復可能重複操作效果或套用過期權限來源。檢查點、預算台帳與結果核對把中斷變成可測狀態轉移。

現場情境

跑了六小時,證據卻沒有前進

事件數量、預算、程序崩潰邊界與復原結果都是合成測試資料。

負責人
你是準備將 Release Desk 任務放到背景執行的操作人員。
要做的決策
控制器如何偵測沒有進展,又如何在中斷的寫入後避免第二筆操作效果?
目前狀態
工作階段在同一個瀏覽器失敗與路由檢查間來回。每輪說明文字不同,文字差異啟發式判準仍報進度。另一個執行在稽核寫入後、工具觀察紀錄寫入前程序崩潰。
預期成果
第一個執行以 non_progress 結束;全新已授權工作階段查到既有稽核操作效果,從最後安全檢查點接回。

限制條件

  • • 最多 14 回合、24 工具呼叫、150 秒、三次未變循環、一筆寫入只可在核對實際結果後重試、USD 2.50 教學測試預算
  • • 預算在模型外執行並記 reserved、used、released、剩餘
  • • 緊急停止控制要擋派送執行、取消已指定責任的租約、禁止恢復並保存證據

實作範例

已標準化的證據看出說明文字掩蓋的迴圈

證據類型: 具名模擬情境

連續三輪解釋不同,已驗證操作、檔案雜湊、瀏覽器錯誤碼、缺少證據與狀態版本卻完全相同。另一個受控執行在稽核寫入成功後崩潰。

控制器比較已標準化的操作、觀察紀錄程式碼、證據涵蓋程度、差異雜湊與狀態。第三次無變化就以 non_progress 停止。程序崩潰恢復以冪等鍵查操作台帳,找到既有稽核,補存觀察紀錄並釋放預留額度,不再派送執行寫入。

憑證顯示一筆邏輯操作、一次實際寫入、零重複重試,並附檢查點。緊急停止演練只取消 Release Desk 租約,另一個測試環境仍在執行;恢復要有具名操作人員的事件紀錄,也要重新確認權限和預算,未核對的寫入不能再次派送。

主張限制

預算與門檻依任務結構、工具延遲和價值而變。教材數字只示範控制位置,不能直接搬到正式環境。

做法

照著做,每一步都有檢查點

Release Desk 執行時間紀錄標預算預留額度、狀態與工具事件、五個程序崩潰點、操作效果結果核對、限定範圍的緊急停止與安全恢復。

現場情境

控制器如何偵測沒有進展,又如何在中斷的寫入後避免第二筆操作效果?

  1. 01定義事件與預算契約
  2. 02偵測有意義的進度
  3. 03在持久保存邊界注入失敗

驗收條件

背景執行在證據與狀態不再前進時停止;每個中斷都有確定性的復原,預算可對帳,操作人員不看對話紀錄也能介入。

這張圖要幫你看懂什麼從派送執行到操作效果、觀察紀錄、檢查點、程序崩潰、核對實際結果與恢復的時間紀錄能直接看出完成狀態未知。
  1. 01

    定義事件與預算契約

    建立狀態、工具、檢查、操作效果、預算、檢查點、核准與終止事件。回合、呼叫、時間、位元組、已變更的檔案、重試與支出都在執行前預留,結果後核對實際結果。

    檢查點 · 審查者能依事件重建測試過程;模型與預設操作人員檢視中,都找不到預埋的洩漏偵測字串。

  2. 02

    偵測有意義的進度

    標準化已驗證的操作、觀察紀錄程式碼、證據涵蓋程度、差異雜湊、失敗的檢查與狀態版本。只有這些訊號往契約前進才重設計數器,說明文字改寫不算。

    檢查點 · 重複迴圈在指定次數停止;修復確實改變證據或狀態時,執行可以繼續。

  3. 03

    在持久保存邊界注入失敗

    依序在五個位置程序崩潰,以全新工作階段重驗身分、規則、環境、分支、契約、狀態、預算、租約與操作效果,選重試、核對實際結果、恢復或停止。

    檢查點 · 五個測試資料都到預期終止,一個邏輯操作效果,預留額度正確,沒有碰無人負責的環境。

  4. 04

    演練緊急停止、恢復與交接

    進行中的執行中觸發測試資料緊急停止,驗需求接收、派送執行、租約、恢復與尚在執行的證據,再由具名操作人員恢復。將資料包交給沒看過執行的審查者。

    檢查點 · 審查者能指出停止原因和安全下一步;停止只作用於指定環境,無關環境維持正常。

實務脈絡

展示版之後

G1

只記能回答操作問題的事件

操作人員要能回答:哪個契約與提交版本、狀態如何變、工具做了什麼、證據是什麼、預算花在哪、為何停止、哪些操作效果可能存在、下一步是否安全。事件依需要帶執行、工作階段、任務、環境、契約、提交版本、功能、span 與上層 IDs。

只保存已驗證參數中的安全欄位或雜湊。憑證、原始 Cookie、完整來源、敏感測試資料及模型隱藏推理都不進事件。遮蔽後的詳細紀錄和截圖以證據 ID 連結,另外設存取規則與保存期限。

G2

在不同中斷位置測試復原

依序在派送前、派送後未收到回執、操作效果保存後、觀察紀錄保存後及檢查點寫入後中斷程序。先寫每案預期的狀態版本、邏輯效果、租約、預留預算、下一步與停止原因。寫入結果未知時先核對;安全讀取才依預定上限重試。

恢復跟新工作階段一樣,重新驗呼叫端權限來源、環境責任歸屬、分支/提交版本、契約、檢查點、租約、核准、預算與操作台帳。不一致進具名 blocked 或核對實際結果,不用提示詞猜測。

G3

交付補強

預算先預留,再核對實際用量。控制器呼叫工具或模型前,按可接受上界預留額度;不足就回 budget_exhausted。結果回來後對帳並釋放差額。程序崩潰時,尚未完成的預留留在檢查點;恢復先查供應商或工具回執,避免漏計支出,也避免把已保留額度誤當可用餘額。

查詢文字不同,不代表有新進度。若命中相同檔案、沒有新證據,狀態和差異也沒變,仍可能在迴圈。相同測試指令在修正後揭露新失敗位置,則有進展。偵測器比較標準化的操作、結果代號、證據涵蓋、檔案雜湊與狀態;人工覆寫須附理由及期限。

操作人員資料包依停止原因給不同內容。沒有進展列重複訊號與缺口;預算已用盡列 reserved、used、剩餘與未完成範圍;denied 列規則程式碼與授權負責人;操作結果未知列冪等鍵、派送執行與結果核對狀態;killed 列目標責任歸屬與尚在執行的證據。資料包由事件組合,不再請模型自由摘要,值班人員才能直接選結束、核對實際結果、補權限或從檢查點恢復。

敏感資訊遮蔽要在事件資料匯入前執行,並有 canary 測試。若先寫原始執行軌跡再由儀表板遮蔽,儲存位置、備份與 debug 匯出已經暴露。對路徑、類似電子郵件的測試資料、token、Cookie、查詢參數與截圖中繼資料設欄位層級規則;需要授權調查時,走另外的受保護的來源,不在一般執行軌跡反向還原。敏感資訊遮蔽失敗本身是關鍵事件,應停止該執行的正常遙測匯出。

緊急停止控制需要涵蓋需求接收、排程器、工作單元租約、工具執行、恢復與核准佇列。只把 UI 關掉,背景執行仍可能繼續。演練中先拒新的工作,取消帶目標環境負責人的租約,撤銷工具權限,保留 unknown 操作效果供核對實際結果;恢復由具名操作人員重新驗規則與健康狀態。另一個專案、worktree 或共用系統服務不在目標清單,就不應受到任何停止操作。

檢查點保存目前契約、功能狀態、提交版本或未提交差異的雜湊、環境、工具清單、預算、租約、上一個完成的檢查、未核對的操作、核准參考及下一步。用有版本的原子替換或交易寫入,讀取時驗 schema、雜湊和版本。損壞時回 blocked 並保留調查證據,不退回舊狀態後繼續寫入。

復原測試還要涵蓋權限來源變動。舊工作階段的審查者角色被移除、核准超過期限、工具範圍縮小、契約升版或分支已合併時,即使檢查點完整也不能直接恢復。執行器重新取得當前身份與規則,計算哪些已規劃的操作效果失效,將任務移到 denied、blocked 或 needs_review。這能防止恢復 token 變成長期通行證,也讓權限收回真正作用到背景工作。

營運報表按停止原因與任務類型看趨勢。沒有進展增加時檢查知識與工具;預算已用盡增加時拆重試、測試與脈絡;denied 增加時分攻擊、需求擴張或規則偏移;操作結果未知增加時查外部服務與冪等性。被防護成功阻止的危險行為要和功能失敗分開呈現,否則團隊可能為了提高完成率而關掉有效控制。每個異常趨勢連一位負責人與下一次審查。

警示不應直接對每個事件發通知。先依執行、任務、停止原因與關鍵程度聚合,避免同一失敗產生數十個訊息淹沒值班人員。關鍵機密、越權、unknown 會影響決策的操作效果與緊急停止失敗立即升級;一般沒有進展或預算已用盡進可排序佇列,附操作人員資料包與期限。警示 acknowledgement、指派、處置與關閉也寫事件,並檢查關閉是否真的對帳操作效果或恢復健康狀態。沒有負責人或逾期的關鍵項目會自動提升,不能因儀表板被標已讀就消失。這讓可觀測性從觀看圖表變成可追責的處理流程。

復原後除了功能測試,也驗預留額度已對帳、舊租約失效、過期工作階段不能派送、操作次數正確、新檢查點一致、遮蔽軌跡完整,以及清理範圍仍正確。只看畫面恢復,可能漏掉重複工作單元、凍結預算或舊 token。事故案例納入保留測試集,標記修復版本與退役條件。

成本對帳要區分估計與供應端回報。執行器在呼叫前用保守估值預留,完成後保存實際 token、工具費、執行時間與資料量;兩者差距持續放大時,先修估算器,不把超支歸咎於單一工作階段。審查者時間也要按任務類型記錄,因為低模型費用但高人工排錯的 harness 並不便宜。報表呈現中位數、尾端與超標案例,不用平均值掩蓋少數長迴圈。每項預算都有 soft 警告、hard 停止、負責人與變更紀錄,臨時放寬只能套在明確執行且會到期。

遙測自身故障時,系統要採保守路徑。若關鍵事件無法持久化或操作回執無法讀取,停止新的會影響決策的派送執行,將目前執行標為 observability_degraded,保存本機安全檢查點並通知負責人。唯讀探索是否可繼續,由任務規則事先決定,不能由 agent 自行推測。恢復後先補送可驗雜湊的事件、對帳操作效果與預算,再決定恢復;缺口無法補齊就維持 hold。這避免監控失效時系統反而進入最難稽核的自治狀態。

動手實作

替 Release Desk 加入事件、預算與中斷演練

加入事件 schema、預算台帳、沒有進展偵測器、檢查點驗證器、操作效果結果核對與緊急停止控制,執行五個程序崩潰邊界和一個迴圈。

準備項目

  • • 在輸入、工具輸出、環境與截圖中繼資料放測試資料 canary 測敏感資訊遮蔽
  • • 提交可恢復的檢查點,記錄預期狀態、分支、環境、操作效果與預算

本課產出

有版本紀錄的事件契約、執行軌跡測試資料、多維度預算台帳、進度偵測器、五份程序崩潰驗收憑證、敏感資訊遮蔽報告、緊急停止/恢復演練與復原操作手冊。

起始模板: Harness event envelope

JSON Schema
{"type":"object","required":["eventId","runId","taskId","type","occurredAt","payloadVersion"],"properties":{"type":{"enum":["state.changed","tool.dispatched","tool.observed","check.completed","effect.reconciled","budget.changed","run.terminated"]},"evidenceIds":{"type":"array","items":{"type":"string"}}}}

可下載的實作檔

Harness event schema

harness-event.schema.json · JSON Schema

An editable course fixture for the main lab. Save it inside the Release Desk repository before running the acceptance command.

Run receipt template

he-08-receipt.json · JSON

A compact evidence record for the check, environment, result, and limits that another reviewer must be able to inspect.

驗收指令

npm run harness:recovery -- --faults fixtures/crash-boundaries.jsonl --kill-drill

預期 receipt

PASS he-08 observability-recovery
crashBoundaries=5 logicalEffects=1 duplicateWrites=0
canaryHits=0 killScopeViolations=0 budgetsReconciled=true

預期結果

背景執行在證據與狀態不再前進時停止;每個中斷都有確定性的復原,預算可對帳,操作人員不看對話紀錄也能介入。

留給下一課

用事件與預算分布決定平行是否值得。復原操作手冊、緊急停止演練與終止分類規則會進總整專案。

驗收條件

  1. 01事件能重建契約、提交版本、環境、狀態、工具、檢查、操作效果、預算與終止
  2. 02未變循環達指定次數就停止,改寫說明文字不算新進度
  3. 03五個中斷位置都維持一筆邏輯操作,依已確認結果選擇重試或核對
  4. 04緊急停止/恢復僅作用已指定責任的資源,拒過期權限來源並保存具名操作人員事件

常見故障

故障診間

F1執行軌跡很大,仍說不出執行為何停止。
先檢查
查關聯、狀態版本、終止事件、預算、操作效果與證據連結。
可能原因
只記原始文字,沒有控制決策與正式可信的狀態轉移。
修復方式
補有型別的事件與證據 ID,刪除不能回答操作問題的欄位。
下次怎麼避免
將執行軌跡重建設為驗收案例。
F2恢復重複一筆程序崩潰前已完成的寫入。
先檢查
比派送執行預留額度、冪等性、操作台帳、檢查點與觀察紀錄。
可能原因
把缺漏觀察紀錄當作操作效果未發生。
修復方式
從正式可信的台帳核對實際結果,補觀察紀錄,禁止再次派送執行。
下次怎麼避免
在每個操作生效及保存邊界前後中斷,確認邏輯操作和實際寫入次數。
F3緊急停止開關關掉另一個本機專案。
先檢查
檢查環境 ID、租約責任歸屬、PID、連接埠、路徑與目標清單。
可能原因
用廣泛連接埠或程序匹配,沒有任務責任歸屬。
修復方式
復原不相關程序,改成精確環境解析器,加衝突測試資料。
下次怎麼避免
操作前列出並驗證精確目標,拒絕範圍過大的路徑、空環境變數,以及僅按連接埠推測的程序歸屬。

展示版之後

正式上線前的邊界

  1. 01事件 schema 有穩定關聯、版本、敏感資訊遮蔽、保存期限與 access 規則
  2. 02回合、呼叫、時間、位元組、變更、重試、支出在派送執行前預留並對帳
  3. 03進度依操作、觀察紀錄、證據、差異與狀態,不依文字新鮮度
  4. 04每個停止原因有操作人員資料包、安全下一個操作、負責人與恢復規則
  5. 05復原重驗身分、權限、環境、Git、契約、狀態、租約、預算、核准與操作效果
  6. 06緊急停止、恢復、程序崩潰、服務中斷、操作結果未知、過期權限來源與無關衝突定期演練

證據類型

資料來源與主張限制

資料來源只支撐本課標示的主張,不代表換一個系統也會得到相同結果。

  1. [1]
    長時間執行 agent 的有效 harness

    Anthropic · 已發表研究 · 2026-08-26

    initializer 模式 · feature ledger · session 交接 · 端到端驗證
  2. [2]
    長時間應用程式開發的 harness 設計

    Anthropic · 已發表研究 · 2026-08-26

    planner、generator、evaluator · 可測合約 · 簡化 harness · 成本取捨
  3. [3]知識留在 repository · 讓系統對 agent 可讀 · 機械式規則 · 處理 repository entropy
  4. [4]
    Harness Engineering Guide

    Nexu · 公開案例 · 2026-08-26

    執行環境邊界 · 工具系統 · sandbox · 復原模式
  5. [5]
    打造有效的 agent

    Anthropic · 官方文件 · 2026-08-26

    採用能通過需求的最簡架構 · workflow 模式 · 環境回饋 · 停止條件

延伸的 Tenten 資源

當本機 harness 要接進真實程式庫

帶著驗收憑證、失敗案例,以及那條還拿不準的控制邊界來。

在團隊拉長 agent 自治時間前,Tenten 可以一起檢查程式庫可讀性、權限、評測器涵蓋、worktree 隔離、復原與上線證據。