系列文章: Deepagent (7/10)

Subagents:用 task 工具把複雜任務分包出去
你有沒有遇過這種情況:一個任務太大,交給單一代理人去做,它的 context 很快就被塞滿——因為它要同時記住「我在做什麼大任務」和「現在這個小任務的所有細節」。
就像一個人又當 PM 又當工程師,腦子裡同時要想架構設計、又要記得每一行 code 的細節——遲早出錯不是因為不夠聰明,是兩件事的 context 在互相干擾。
Deep Agents 的解法是:讓主代理人只管全局,把具體的子任務分包給子代理人處理。
task 工具是什麼
task 是 Deep Agents 的內建工具之一,讓代理人可以:
- 建立一個新的子代理人(Subagent)
- 給它一個具體的子任務
- 子代理人有自己獨立的 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 跨對話記住重要資訊