Hermes Agent 新增非同步子代理功能,委託任務不再阻塞父聊天
Nous Research 為 Hermes Agent 推出了非同步子代理功能。委託工具現在可以生成後臺代理,不再阻塞父聊天。本文介紹了 async_delegation 工具集(issue #5586),包括如何生成、檢查、引導和收集任務,並討論了子代理隔離、同步與非同步的權衡以及何時使用 ACP。
Nous Research 已為 Hermes Agent 釋出了一項更新,其委託工具現在可以非同步執行子代理。根據公告,委託工作不再阻塞父聊天。
Hermes Agent 是 Nous Research 開發的開源個人代理。父代理可以生成子代理(稱為子代理)來分配工作。在此之前,這種委託需要等待子代理完成。
該更新由 Nous Research 和聯合創始人 Teknium 在 X 上宣佈。現有使用者可以透過執行 hermes update 來啟用。
什麼是子代理?
委託工具是 delegate_task。它生成一個子代理,即一個隔離的子代理。每個子代理都有自己的對話、終端會話和工具集。只有最終摘要返回給父代理。父代理的上下文永遠不會看到子代理的中間工具呼叫或推理過程。這保持了父代理上下文視窗的小巧。
隔離是嚴格的。子代理以全新的對話開始,對父代理的歷史一無所知。父代理必須透過 goal 和 context 欄位傳遞所有資訊。子代理繼承父代理的 API 金鑰、提供者配置和憑據池。該憑據池支援在速率限制時進行金鑰輪換。你可以透過 config.yaml 將子代理路由到更便宜的模型。
之前的問題與現在的變化
在原始碼中,delegate_task 是同步的。父代理在工具呼叫內部阻塞,直到每個子代理完成。在此期間,你的聊天會凍結。
這種設計阻止了多種工作流程。你無法啟動一個長時間執行的任務並繼續工作,也無法中途檢查或引導一個執行中的任務。
Nous 在開放環境中構建了非阻塞路徑。Issue #5586 新增了 async_delegation 工具集。它生成一個後臺代理並立即返回一個 task_id。公告確認非同步子代理現已可用。
非同步工具涵蓋完整生命週期:
- delegate_task_async — 生成後臺代理,返回 task_id
- check_task — 非阻塞檢查狀態和最新輸出
- steer_task — 向執行中的任務注入訊息
- collect_task — 阻塞直到完成,返回完整結果
- cancel_task — 停止執行中的任務
- list_tasks — 列出會話中的所有非同步任務
後臺代理作為程序內執行緒執行,重用與 delegate_task 相同的 AIAgent 機制、憑據和工具集。
同步與非同步委託對比
| 維度 | 同步 delegate_task | 非同步委託 (async_delegation, #5586) | |------|-------------------|-------------------------------------| | 父聊天 | 阻塞直到所有子任務完成 | 立即返回 task_id;聊天保持自由 | | 執行時控制 | 無——等待 | 每個任務可檢查狀態、引導、收集或取消 | | 執行方式 | 父代理在工具呼叫內部等待 | 後臺程序內執行緒 | | 上下文成本 | 僅返回最終摘要 | 僅返回最終摘要 | | 隔離性 | 每個子任務獨立對話 | 每個子任務獨立對話 | | 最佳用途 | 快速並行任務,需要等待 | 長時間任務,可與聊天並行 | | 永續性 | 跨輪次不持久 | 單會話;ACP (#4949) 針對跨輪次 |
程式碼示例:生成與引導
同步方式批次生成子任務並等待,併發數由 delegation.max_concurrent_children 限制,預設為 3。
# 同步:父代理等待所有子任務完成
delegate_task(tasks=[
{"goal": "研究主題A", "toolsets": ["web"]},
{"goal": "修復構建", "toolsets": ["terminal", "file"]},
])來自 issue #5586 的非同步工具集立即返回控制權。
# 非同步 (async_delegation 工具集, issue #5586)
t1 = delegate_task_async(goal="研究主題A")
t2 = delegate_task_async(goal="研究主題B")
check_task(t1["task_id"]) # 檢查狀態,不阻塞
steer_task(t2["task_id"], "僅使用2024年後的來源")
results = [collect_task(t["task_id"]) for t in (t1, t2)]使用場景示例
- 長時間研究與並行工作:啟動子代理進行市場掃描,同時在主聊天中繼續寫作。
- 並行方案評估:生成三個子代理分別測試三種搜尋後端,每個隔離,避免交叉汙染。
- 後臺編碼任務:將多檔案重構委託給子代理,自己同時審查其他檔案。
- 監控執行:TUI 提供了 /agents 覆蓋層(別名 /tasks),顯示執行中和已完成的子代理的即時樹。
關鍵要點
Hermes Agent 現在支援非同步子代理;委託工具不再阻塞父聊天。非阻塞委託透過 async_delegation 工具集實現,追蹤於 issue #5586。非同步工具涵蓋完整生命週期:生成、檢查、引導、收集、取消和列出任務。子代理保持隔離,僅返回最終摘要,使父上下文保持小巧。該功能執行在程序內且為單會話;現有使用者透過 hermes update 啟用。