Subagents:用 task 工具把複雜任務分包出去

Subagents:用 task 工具把複雜任務分包出去

7 min read

你有沒有遇過這種情況:一個任務太大,交給單一代理人去做,它的 context 很快就被塞滿——因為它要同時記住「我在做什麼大任務」和「現在這個小任務的所有細節」。

就像一個人又當 PM 又當工程師,腦子裡同時要想架構設計、又要記得每一行 code 的細節——遲早出錯不是因為不夠聰明,是兩件事的 context 在互相干擾。

Deep Agents 的解法是:讓主代理人只管全局,把具體的子任務分包給子代理人處理。

task 工具是什麼

task 是 Deep Agents 的內建工具之一,讓代理人可以:

  1. 建立一個新的子代理人(Subagent)
  2. 給它一個具體的子任務
  3. 子代理人有自己獨立的 context,執行完後把結果回傳給主代理人

主代理人的 context 只有「任務描述 + 最終結果」,不需要裝子任務的所有中間過程。子代理人的 context 只有自己負責的那塊,可以專注地去做到好。

一個具體的例子

假設你要做一個「分析競爭對手」的任務,包含三個子任務:分析 A 公司、分析 B 公司、最後整合報告。

沒有 subagents 的做法:主代理人依序處理三件事,所有中間資料全堆在同一個 context。

有 subagents 的做法:

from deepagents import create_deep_agent
 
def analyze_company(company: str) -> str:
    """分析指定公司的基本資訊、產品、市場策略。"""
    return f"{company} 的分析結果:市場佔有率 25%,主打低價策略..."
 
def write_report(content: str, filename: str) -> str:
    """把報告寫入檔案。"""
    return f"報告已儲存至 {filename}"
 
agent = create_deep_agent(
    tools=[analyze_company, write_report],
    system_prompt="""你是一個策略分析師。
    
    處理多公司分析任務時,使用 task 工具把每間公司的分析分包給子代理人處理,
    子代理人完成後回傳結果,你再整合成最終報告。
    """,
)
 
result = agent.invoke({
    "messages": [
        {"role": "user", "content": "幫我分析 A 公司和 B 公司的競爭態勢,整合成一份對比報告。"}
    ]
})

主代理人會用 task 工具建立兩個子代理人,分別去深度分析 A 和 B,然後拿到兩份分析結果,再整合成最終報告。

主代理人的 context 只有:任務描述 + 子任務的請求 + 子任務的結果。不需要裝分析每間公司的所有中間細節。

Subagent 可以有自己的工具和設定嗎

可以——子代理人是一個完整的代理人,可以有自己的工具集和系統提示:

from deepagents import create_deep_agent, create_subagent
 
def deep_research(query: str) -> str:
    """深度研究指定主題。"""
    return f"關於 {query} 的深度研究結果..."
 
# 子代理人:專門做研究
research_subagent = create_subagent(
    tools=[deep_research],
    system_prompt="你是一個研究專家,擅長深度分析和資料整合。",
)
 
# 主代理人:管理整體任務
main_agent = create_deep_agent(
    tools=[write_report],
    subagents={"researcher": research_subagent},
    system_prompt="你是一個專案負責人,統籌研究任務,把複雜的研究交給 researcher 子代理人。",
)

這樣的設計讓不同的代理人可以有專門化——主代理人負責規劃和整合,子代理人各自擅長特定的領域或工具集。

Context 隔離的設計價值

Subagents 最重要的特性是 context 隔離,不是「讓任務跑得更快」。

以下是隔離帶來的實際好處:

避免污染(Contamination):子任務 A 的大量資料不會干擾子任務 B 的判斷。特別是在做比較分析的時候,如果 A 和 B 的資料全在同一個 context 裡,代理人很容易把兩者的細節混在一起。

更深的專注(Depth):子代理人的 context 只有自己的子任務,可以更深入地去處理——讀更多相關文件、做更細緻的分析,不需要擔心 context 被其他東西佔走。

可重用(Reusability):同一個子代理人可以被多次呼叫,每次都有新的乾淨 context。

什麼情境最值得用 Subagents

特別有價值的場景:

  • 需要平行或依序處理多個獨立的子任務(分析多家公司、處理多份文件)
  • 某個子任務本身就很複雜,獨立出來才能做得夠深
  • 主代理人需要整合多個來源的結果,不需要知道每個來源的細節

不一定需要的場景:

  • 任務本身就是線性的、單一的,沒有可以分包的子任務
  • 子任務太簡單,建立子代理人的開銷不值得
  • 任務需要所有步驟共享一個緊密的狀態(強依賴的任務不適合分包)

多層 Subagents

子代理人可以再生子代理人——Deep Agents 支援多層的 agent hierarchy。但這個能力要謹慎用,層數越多,協調成本和偵錯難度都會上升。一般建議不超過兩層:主代理人 → 子代理人。三層以上,通常是任務設計需要重新思考。


上一篇:可插拔後端:In-Memory、Disk、LangGraph Store、Sandbox 怎麼選 下一篇:長期記憶:讓 Agent 跨對話記住重要資訊