模型的停止提議,須經驗證才成為完成。
對可交付的停止而言,模型即使要求停止,仍須經過完成驗證。結果分為完成、在預算內繼續、等待審查三種;執行上限、取消與錯誤則以另一種停止狀態結束。
驗證 → 完成
只有可交付的停止會經過 PreVerify → 判斷 → PostVerify → Stop。模型的停止提議與 hook 指示,本身都不構成完成。
arun · 模型回合
loop/agent_loop.py資料: 停止提議可交付的停止 · natural 等loop/_guards.py · models.py模型以文字回答而未呼叫工具時,該回合成為 natural 停止候選(在最後允許的輪次則為 forced_text)。模型的停止提議尚不等於完成。
可交付的停止 · natural 等
loop/_guards.py · models.py資料: 完成候選finalize_and_return_asyncloop/_lifecycle.py只有 natural、forced_text 與 actionable_partial 屬於可交付的停止,也只有這些會進入公開驗證。
finalize_and_return_async
loop/_lifecycle.py執行 · 判定: PreVerifyPreVerify · STRENGTHENcore/hooks/public.py透過 STRENGTHEN,PreVerify hook 只能新增要求與缺漏代碼。它能讓判定更嚴格,絕不能使其通過。
finalize_and_return_async
loop/_lifecycle.py執行 · 判定: verify_turn_async結構檢查 · empty_turncore/agent/verify.py先進行結構檢查(空回合、model_action_required);無法修復的結構失敗會略過語意判斷。off 或 rule_based 等舊設定會解析為 llm_judge,無法關閉判定。
語意判斷 · LLM 或 Jev
core/agent/verify.py資料: 判斷請求評判模型所選的評判模型(預設 LLM judge,選用時為 Jev Choice)會在不帶工具的情況下呼叫一次,最長 120 秒,且不超過剩餘的時間預算。可能帶有個人觀測資料的候選,不會送往輔助評判模型。
語意判斷 · LLM 或 Jev
core/agent/verify.py資料: passed · rubric_missespolicy_action · 解讀判定loop/_lifecycle.py判定內容包括通過與否、缺漏代碼、供下次嘗試使用的 reflection,以及重試是否有用。語意判斷通過,絕不能掩蓋結構檢查的失敗。
policy_action · 解讀判定
loop/_lifecycle.py執行 · 判定: PostVerify 決策PostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyPostVerify hook 決定 ACCEPT、REVISE 或 ESCALATE。對驗證失敗的候選做出 ACCEPT,會轉為 escalate。沒有決策時,套用執行環境的預設值(通過 → accept,可重試 → revise,其餘 → escalate)。
policy_action · 解讀判定
loop/_lifecycle.py執行 · 判定: Stop · CONTINUEStop · CONTINUEcore/hooks/public.py只有在不 escalate 時,Stop hook 的 CONTINUE 指示才能要求修復續行。hook 的指示是下次嘗試的輸入,而非權限。
policy_action · 解讀判定
loop/_lifecycle.py資料: completed · 已儲存檢查點 · 工作階段狀態memory · observability通過且 accept 時,會合併續行的嘗試、儲存結果,並將工作階段記錄為 completed。
finalize_and_return_async
loop/_lifecycle.py資料: 回應IPC · CLI 呼叫端完成時傳回最終答案;等待審查時傳回空白答案與 EXTERNAL_VERIFICATION_REQUIRED;未經驗證的停止則傳回停止原因。
預算內修復
可修復的失敗會繼續同一請求。預設預算為兩次嘗試;用盡時,候選進入等待審查。
語意判斷 · LLM 或 Jev
core/agent/verify.py資料: passed · rubric_missespolicy_action · 解讀判定loop/_lifecycle.py判定內容包括通過與否、缺漏代碼、供下次嘗試使用的 reflection,以及重試是否有用。語意判斷通過,絕不能掩蓋結構檢查的失敗。
policy_action · 解讀判定
loop/_lifecycle.py執行 · 判定: PostVerify 決策PostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyPostVerify hook 決定 ACCEPT、REVISE 或 ESCALATE。對驗證失敗的候選做出 ACCEPT,會轉為 escalate。沒有決策時,套用執行環境的預設值(通過 → accept,可重試 → revise,其餘 → escalate)。
policy_action · 解讀判定
loop/_lifecycle.py執行 · 判定: Stop · CONTINUEStop · CONTINUEcore/hooks/public.py只有在不 escalate 時,Stop hook 的 CONTINUE 指示才能要求修復續行。hook 的指示是下次嘗試的輸入,而非權限。
續行預算 · 預設 2 次
loop/_lifecycle.py執行 · 判定: 修復 · 嘗試 +1_arun_once · 修復續行loop/agent_loop.py有修復指示,且只在嘗試次數低於預算(預設兩次)時,才繼續同一請求。達到預算時成為 escalate_budget_exhausted 並等待審查。
等待審查
判定無法使用、試圖將失敗轉為通過,或預算用盡時,會扣留候選並暫停工作階段。
verification_error · 失效即封閉
core/agent/verify.py失敗 · 無判定: verification_errorpolicy_action · 解讀判定loop/_lifecycle.py缺少評判模型、逾時或回應無效,都會成為 verification_error:既非通過,也非修復訊號。無法使用的判定絕不能代替成功。
policy_action · 解讀判定
loop/_lifecycle.py執行 · 判定: PostVerify 決策PostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyPostVerify hook 決定 ACCEPT、REVISE 或 ESCALATE。對驗證失敗的候選做出 ACCEPT,會轉為 escalate。沒有決策時,套用執行環境的預設值(通過 → accept,可重試 → revise,其餘 → escalate)。
policy_action · 解讀判定
loop/_lifecycle.py執行 · 判定: ESCALATE · pending外部審查者候選以 pending_text 保留,不出現在一般回應中;檢查點會儲存,工作階段則暫停。不會自動聯繫外部審查者。
policy_action · 解讀判定
loop/_lifecycle.py記錄 · 觀測: 判定 · 證據列timeline · ledger 判定列memory · observabilitytimeline 寫入判定、證據與 pending 列,evidence ledger 寫入 verification_policy 列。這些是盡力而為的記錄,不證明外部效果。
未經驗證的停止
取消、上限與基礎設施造成的停止,以及 control workflow 的執行,不經公開驗證即儲存。
arun · 模型回合
loop/agent_loop.py執行 · 判定: 防護 · 上限失敗 · 上限 · 取消停止loop/_guards.py · models.py輪次、時間、成本與上下文上限、取消、重複失敗偵測等防護,會以封閉的 TerminationReason 集合中的一個成員結束回合。在設定中停用的上限,不一定會強制執行。
失敗 · 上限 · 取消停止
loop/_guards.py · models.py失敗 · 無判定: 失敗 · 取消停止finalize_and_return_asyncloop/_lifecycle.py取消、基礎設施與上限造成的停止沒有可驗證的候選,因此不經公開驗證即儲存。
control workflow · 略過公開驗證
ipc_server/poller.py執行 · 判定: 略過公開驗證finalize_and_return_asyncloop/_lifecycle.pyIPC 呼叫要求略過公開驗證,或有 control workflow 進行中時,只在該次執行期間關閉公開驗證,結束後恢復先前的值。
finalize_and_return_async
loop/_lifecycle.py資料: 僅儲存 · 不驗證檢查點 · 工作階段狀態memory · observability未經驗證的停止,仍會儲存結果與檢查點,並發出工作階段結束事件。
finalize_and_return_async
loop/_lifecycle.py資料: 回應IPC · CLI 呼叫端完成時傳回最終答案;等待審查時傳回空白答案與 EXTERNAL_VERIFICATION_REQUIRED;未經驗證的停止則傳回停止原因。
所有連線以相同粗細顯示。選擇一個流程,即只突顯其路徑,並標出步驟編號。
- 實線 · 請求、候選與結果的流向
- 虛線 · 執行、判定、授權、設定
- 長點劃線 · 記錄與觀測,與判定分開
- 短虛線 · 失敗或無法使用的判定
- 粗黑線 · 所選流程;數字表示順序
- 方框 · 程式碼或記錄的邊界,標頭為其路徑
- 內層小框 · 該邊界內的元件
- 虛線框 · 該邊界之外
- 迴圈 · 定案
- 停止 · hook · 判定
- 儲存 · 記錄
- IPC 進入
只繪出固定提交 9e2c041 中的呼叫路徑。評判模型的通過,與外部基準測試驗證器的成功是兩回事;此處的完成是執行環境內部的決策。
- 判定引擎
- 預設為 LLM judge;只有在 judgment_engine 設為 jev 時,才由 Jev Choice 判定。無論哪一種,無法使用的評判模型都會產生 verification_error,絕不會成為成功。
- hook 可做的事
- PreVerify 只能讓判定更嚴格,PostVerify 無法讓失敗的候選通過,Stop 只在不 escalate 時才能要求續行。
- 等待審查
- 等待審查記錄的是需要外部決定,並不會通知任何人,也不代表結果已獲核准。