第十八節 子任務與背景執行

[!ref] 詳解見使用者手冊「子任務與背景執行」節。

18.1 派發參數

參數 類型 預設 說明
prompt string 子任務提示詞;必填
agent_id string 當前助手 指派子助手人設
model string 當前模型 子任務模型
run_in_background bool false true 走後台
timeout_ms int 600_000 前景超時;後台不適用

18.2 BackgroundRegistry

欄位 預設 說明
同時在跑上限 64 超出立即拒絕並提示稍後重試
終態保留 30 分鐘 超過視窗被回收
優先級 killed > done 外部 stop 與自然結束撞拍時 killed 勝

18.3 子任務工具

工具 參數 說明
Agent prompt, agent_id, run_in_background? 派發單個子任務
AgentParallel legs[](2–16), timeout_seconds? 一次拆多路並行 fan-out(見 §18.3.1)
TaskOutput task_id, limit? 拉取背景任務狀態 / 輸出片段
TaskStop task_id 強制終止背景任務
StopAgentToolRun child_session_id 單獨停止某個正在跑的子代理(後台 / 並行腿);冪等,同步內聯子代理需停整輪
TaskWait task_ids, mode=all|any, timeout_seconds(預設 300,最長 1800) 阻塞等待背景任務 / 子代理;超時傳回「還在跑」讓模型決定繼續
EnterPlanMode / ExitPlanMode 進入 / 結束籌劃
TodoWrite todos 寫入或更新待辦列表

18.3.1 AgentParallel 參數

參數 類型 預設 說明
legs array 必填,2–16 條;每條獨立 fresh-context 子 Agent,全部完成後聚合傳回
legs[].subagent_type string 必填,目標子代理類型
legs[].prompt string 必填,自包含子任務提示詞(腿看不到主對話歷史)
legs[].description string 可選,3–5 詞,僅用於記錄檔 / UI
legs[].model string 繼承 可選,單腿模型覆蓋
timeout_seconds int 600 整體等待超時,上限 1800;到時未完成的腿傳回 pending 並在後台繼續

少於 2 條會報錯(改用 Agent),多於 16 條靜默截斷到前 16。每條腿作為真實背景任務派發、內部統一 Wait(all) 聚合;單腿輸出超 8000 runes 截斷(提示用 TaskOutput 取全文)。腿為葉子層、不可再嵌套 Agent / AgentParallel。v1 僅 all 模式。傳回 ParallelResultcompleted / num_ok / num_failed / num_pending / legs[] 等,永不拋錯)。

渲染:呼叫卡片執行期即顯示並隨實時 store 反映各腿執行狀態(停止後不再轉圈);極簡密度下結果塊不被工具組誤折疊。

18.4 長程任務當機復原

背景任務(run_in_background=true)的進度落盤到本機全域目錄(每任務一份 JSON 快照);走到終態(done / error / killed)即刪除快照。

預設 說明
落盤範圍 僅背景任務 前景同步任務不落盤
啟動掃描 非同步、不阻塞 先做髒條目清理(父工作階段已刪的條目自動剔除),再列出殘留任務
自動復原開關 關(auto_resume_tasks 設置 → 智慧體 → 自省;啟用後啟動自動續跑(夜間無人值守)
啟動自動復原上限 5 防「續跑訊息風暴」;其餘轉手動橫幅
復原方式 注入父工作階段續跑 不直接重新啟動子程序,而是向原父工作階段注入「繼續 / 重新委派」訊息(對使用者可見)
手動入口 頂部復原橫幅 每條可「復原 / 忽略」,另有「全部忽略」

18.5 自修正循環參考

錯誤按來源(request / gateway / upstream)與類別分流後映射到 4 類修正政策,各有按工作階段計的嘗試上限:

修正政策 適用錯誤 上限
transient_compact(壓縮重試) 上下文超限 2
transient_fallback(切換供應商,需確認) 無可用通道 / 上游過載 / 上游認證失敗 3
backoff(退避重試) 限流 / 超時 / 網路 3
terminal(交還使用者) 餘額不足 / 需重登 / 模型不存在

特例:upstream 來源的 auth_error 重判為 transient_fallback(某通道 key 失效而非使用者憑證);仍可重試的 terminal 救回為 backoff;5xx / 408 預設可重試,其它 4xx 終止。

  • 網路抖動自愈:瞬斷 / 臨時離線時探測「離線 → 線上」再續跑,這段等待不計入重試預算;連線重設、DNS 暫時解析失敗、交握中斷等連線級瞬斷細分為網路問題(而非籠統 llm_error)。
  • 產出型自愈MaxOutcomeHeal = 3):回復被長度截斷自動續寫(truncated_continue)、推理繞圈打斷(reasoning_loop)、內容過濾換述(content_filter)。
  • 門禁升級:同一處檢查 / 測試失敗或待辦無進展達上限(測試門禁 3 次、無進展待辦 2 次)時升級提示換思路。
  • 供應商備選經 App.RespondProviderFallback 回寫確認,前端 SelfRepairFallbackBanner;後端事件 self_repair:fallback_confirm / _applied / _declined / self_repair:outcome

18.6 經驗學習閉環參考

組成 說明
自愈歷史學習(P1) 每類自愈成敗落盤 ~/.config/avlcode/self-heal-stats.json;平滑率 (succ+1)/(total+2)。樣本 < 5 用預設上限 3;率 < 0.2 → 1、0.2–0.5 → 2、≥ 0.5 → 3;每類至少 1,僅下調不上調
自動反省(P2/P3) auto_reflect(預設關,設置 → 智慧體 → 自省)啟用後,多步任務收尾非同步跑一次 GRAI+KISS 復盤;讀軌跡摘要(最多 5 個錯誤步)+ 自愈統計,產出 ≤ 8 條 Keep/Improve/Stop/Start 教訓
教訓去向 沉澱到記憶宮殿 _pending 草稿盒(房間 scratch、類型 decision、不衰減),需人工簽核後才入正式函式庫;按標題去重;事件 reflection:done