子代理派生
源码版本v2026.7.20
職責
delegate_tool 讓主 agent 把一個子任務派生給隔離的子代理:子代理有自己的對話、自己的終端、自己的工具集,跑完只把最終結果交回父代理。這實作了「零上下文成本」的流水線——父代理上下文不被子任務的過程細節污染。子代理在 ThreadPoolExecutor worker 裡執行,危險命令預設 auto-deny(可設定 auto-approve)。
關鍵檔案
def delegate_task:2426— 派生入口class DelegateEvent:625— 派生事件列舉auto-deny / auto-approve 回調:61-103—_subagent_auto_deny(安全預設)/_subagent_auto_approve(opt-in YOLO)_get_subagent_approval_callback:102-160— 按delegation.subagent_auto_approve設定選回調DaemonThreadPoolExecutor:1978-1990— 子代理用的常駐執行緒池with DaemonThreadPoolExecutor:2651-2660— 派生執行上下文tools/daemon_pool.py—DaemonThreadPoolExecutor實作多後端終端:5-15— 子代理的終端在 6 個沙箱後端之一執行(見沙箱)
資料流
- 主迴圈 provider 回傳
tool_call: delegate。 delegate_task:2426被呼叫,拿到子任務描述與可選 toolsets。- 在
DaemonThreadPoolExecutor:2651裡起一個 worker:- worker initializer 安裝審批回調(
tools/delegate_tool.py:102),預設 auto-deny 危險命令 - 子代理建構自己的對話上下文,呼叫
run_conversation:588跑迴圈 - 子代理的工具呼叫走
registry:765(可被父代理限制 toolsets)
- worker initializer 安裝審批回調(
- 子代理完成後只把最終文字交回,delegate_task 經
tool_result:798封裝回填給父代理。 - 父代理上下文只增長一條 tool 結果,不被過程污染。
小結
子代理派生 = 上下文隔離 + 危險命令管控。父代理只看結果,不看過程,這讓長流水線不被過程雜訊撐爆。安全預設 auto-deny,批量/cron 場景可 opt-in auto-approve。終端執行落在沙箱後端。