用 coding agent 做過大一點的任務,大概看過這個落差:前十步很穩,到了後段,它重讀剛讀過的檔案,漏掉你交代的檢查。在個人部落格 philschmid.de 寫 AI 工程文章的 Philipp Schmid,2025 年 10 月寫過,一個只靠「模型加工具迴圈」的 agent,擅長的是 5 到 15 步的任務(原文:great at tasks that take 5-15 steps);Anthropic 的 Agent SDK 文件舉的例子是「重構 auth 模組並更新測試」,這種任務會串起幾十次工具呼叫。
這裡的 context 指模型每次回應時一併讀進去的全部內容,包含對話、工具結果與指令,長度有上限。這篇整理三個一手來源怎麼處理這個落差,再把它們放進同一張表。
快速回答 Deep Agent 的內建能力,本站歸納成六項:規劃、檔案與指令、子代理、壓縮與卸載、記憶與技能、外部工具與把關。「六」是本站的分法,LangChain、Philipp Schmid 與 Claude Agent SDK 文件各自的清單都不是這樣數。能力不必全開:LangChain 自 v0.7(2026 年 7 月 29 日)起,任務規劃預設關閉。我的建議是依失敗型態逐項加。
Deep Agent 是什麼?三個來源各自的講法
深度代理(Deep Agent)指的是在基本的 agent 迴圈(模型判斷、呼叫工具、讀回結果、再判斷)外面,補上規劃、外部儲存、委派與 context 管理的 agent。三家的起點不同,所以講法也不同。
LangChain 共同創辦人 Harrison Chase 在 2025 年 7 月 30 日的部落格用了「Deep Agents」這個詞,列了四個共同元素:詳細的 system prompt、規劃工具、子代理、檔案系統。他拿 Claude Code 的 todo 工具當例子,直接說它沒做任何事:
"this doesn't do anything! It's basically a no-op." (Harrison Chase, Deep Agents, LangChain Blog, 2025-07-30)
他的意思是,這個工具的價值是讓模型把計畫寫進 context,保持方向,屬於 context engineering 的手法。
Philipp Schmid 在 2025 年 10 月 12 日的〈Agents 2.0: From Shallow Loops to Deep Agents〉裡,把基本迴圈叫淺層 agent,把加強版叫深層 agent,列出四根支柱:明確規劃、階層式委派、持久記憶、極致的 context engineering。他把重點放在「記憶搬到 context window 外面」:
"Smarter models do not require less prompting, they require better context." (Philipp Schmid, Agents 2.0, philschmid.de, 2025-10-12)
Anthropic 沒有用「Deep Agent」這個詞。它的 Agent SDK 文件把 Claude Code 的迴圈、工具與 context 管理包成函式庫,並列出內建工具、hooks(在特定時點自動執行的自訂程式)、子代理、MCP(接外部工具的協定)、權限、sessions(可接續的對話紀錄)、skills 與 memory 等能力。換句話說,Anthropic 給的是一份「出廠配備清單」,文件裡找不到 Deep Agent 的定義句。
六項能力放在一起,長什麼樣子?
六項能力是規劃、檔案與指令、子代理、壓縮與卸載、記憶與技能、外部工具與把關;每項再對回三家的原文名稱,圖 1 先給全貌,表 1 逐項對照。
下表把六項各自對回三家,最後一欄是它解決的問題。Schmid 的文章沒有單獨列「外部工具」與「把關」,該格寫「未列為一項」,也沒有談壓縮,該格寫「未談壓縮」。
write_todos(v0.7 起選用)- 明確規劃,例如 markdown 待辦檔
TaskCreate、TaskUpdate- 長任務中途忘了原本要做什麼
ls、read_file、write_file、edit_file、delete、glob、grep;沙箱後端另有execute- 持久記憶:檔案系統或向量庫當事實來源
Read、Edit、Write、Glob、Grep、Bash- 中間產物不必全塞在對話裡
task工具- 階層式委派,子代理只回綜合答案
Agent工具(文件中也出現舊名Task)- 探索過程把主對話撐爆
- summarization 與 context offloading(把過大的內容移出 context、改存別處;自動,文件未給工具名)
- 未談壓縮
- automatic compaction、
PreCompacthook - 對話超過 context 上限
AGENTS.md(memory)、SKILL.md(skills,漸進載入)- 持久記憶:知道去哪裡找
CLAUDE.md、Skill工具- 跨 session 與跨任務的規則和做法
tools=與 MCP、interrupt_on、permissions=- 未列為一項
- MCP、permissions、hooks
- 接外部系統,並在關鍵步驟攔住
表 1 六項能力對照。來源:LangChain Deep Agents 文件(docs.langchain.com)、Schmid 2025-10-12、Claude Agent SDK 文件,查閱於 2026-10-23。
規劃與檔案:狀態該放在對話裡,還是放在外面?
待辦清單留在 context 或 state 裡,中間結果寫進檔案;檔案在壓縮或重開 session 後還在。前兩項處理的就是這件事。
規劃這項,三家的做法很接近。Schmid 的「明確規劃」是 agent 維護一份待辦清單(他舉的形式是 markdown 檔),每一步之間更新。LangChain 的 write_todos 與 Anthropic 的 TaskCreate、TaskUpdate 是同一類工具:模型自己寫、自己勾,系統不替它排程。
LangChain 的文件寫得很直接:
"Starting in v0.7 task planning is opt-in only." (LangChain Deep Agents 文件,查閱於 2026-10-23)
v0.7.0 在 2026 年 7 月 29 日發布,release notes 把它列在破壞性變更:create_deep_agent 不再預設加入 TodoListMiddleware,要用得自己傳進去。Anthropic 則是部分模型要自己開啟任務追蹤工具(TaskCreate、TaskUpdate)才拿得到。兩份文件都沒說明原因。
檔案系統這項,工具名稱差不多:讀、寫、改、找、搜。差別在執行環境。LangChain 的 execute 只在沙箱後端提供;Anthropic 的 Bash 是內建工具,由權限設定決定能不能跑。Schmid 則把檔案系統放在「記憶」支柱下,強調從「記住一切」轉成「知道去哪裡找」(原文:knowing where to find information)。
工程上的意思: 規劃與檔案放在一起看,改的是 agent 的狀態存放位置。中間結果寫進檔案後,context 被壓縮、session 被重開時還在;落在對話裡的內容,壓縮時只剩摘要。要檢查自己的 agent 有沒有這層,最快的方法是看它在中途被截斷後,能不能從檔案重新接上。
子代理與壓縮:誰來控制 context 的成長?
控制 context 成長有兩種手段:子代理從來源隔離,壓縮在事後摘要。第三、四項處理的就是這件事。
子代理管來源。Anthropic 的文件寫明,子代理的中間工具呼叫與結果留在它自己的 context 裡,只有最終訊息回到父代理:
"A subagent returns only its final response, so your main agent's context grows by a summary, not by the subtask's transcript." (Claude Agent SDK 文件,How the agent loop works,查閱於 2026-10-23)
Schmid 寫的是同一個設計,子代理「只把綜合後的答案」交回 orchestrator(也就是主代理)。圖 2 畫出兩邊各自收到什麼。
這份文件還給了三個容易漏掉的數字:子代理預設最多往下三層(CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH),同時最多 20 個(CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS),而且子代理的花費算進整個查詢的預算上限。子代理減少的是主代理的 context;每個子代理仍各自呼叫 API,花費照算。
壓縮管事後。Anthropic 的做法是 context 接近上限時自動把舊對話摘要掉,並明講代價:
"Compaction replaces older messages with a summary, so specific instructions from early in the conversation may not be preserved." (Claude Agent SDK 文件,同上)
所以它建議把必須長期有效的規則寫進 CLAUDE.md,因為那份內容每次請求都會重新放進 context。想在壓縮前存檔,可以掛 PreCompact hook。LangChain 的文件寫的是自動壓縮對話歷史與過大的中間結果,沒給工具名,也沒寫保留規則。
Schmid 沒有談壓縮;他的第四根支柱「極致的 context engineering」講的是長達數千 token 的詳細指令(原文:highly detailed instructions sometimes thousands of tokens long),並下了這個結論:
"by controlling the context, we control the complexity." (Philipp Schmid, Agents 2.0, 2025-10-12)
壓縮這項只能比兩家:Anthropic 提供自動壓縮加 PreCompact hook,可以在壓縮前存檔;LangChain 自動壓縮,但文件沒寫保留規則。
記憶、技能與外部工具:哪些東西要常駐?
必須長期有效的規則常駐在記憶檔(AGENTS.md/CLAUDE.md),技能先載入短描述、用到才載入全文;Anthropic 的 MCP 工具定義也預設按需載入。第五、六項處理的就是什麼常駐、什麼接進來。
記憶這項,兩家的檔案慣例不同:LangChain 讀 AGENTS.md,Claude Agent SDK 讀 CLAUDE.md(可由 settingSources 載入)。Anthropic 文件說明 CLAUDE.md 的內容每次請求都會帶著,是固定成本,只是有 prompt caching(把重複送出的前綴內容快取起來,後續請求不必重新全額計費),所以只有第一次請求付全額。這解釋了為什麼規則不能越寫越長,延伸閱讀裡有一篇專門談這件事。
技能(skills)是同一個思路的反面:不常駐,要用才載入。LangChain 的 SKILL.md 與 Anthropic 的 Skill 工具都是漸進載入,起始只放短描述。Anthropic 文件對 MCP 工具也有類似設計:預設只在需要時載入工具的 schema(工具定義,也就是名稱、參數與說明),避免幾個 MCP 伺服器就吃掉大量 context。
外部工具與把關放在一起,因為接得越多,越需要攔。LangChain 用 interrupt_on 在關鍵決策點暫停,等人批准(原文:Pause for human approval at critical decision points);Anthropic 用權限規則、六種 permission mode 與 hooks,其中 PreToolUse hook 可以在工具執行前直接拒絕,而且 hooks 跑在應用程式裡,不佔用 context。兩個機制的差別是:interrupt_on 暫停下來等人批准;PreToolUse 由規則在工具執行前決定允許或拒絕執行,不需要人在場。
工程上的意思: 要常駐的內容放記憶檔,按需載入的做法放技能,會連累 context 的外部工具交給延遲載入。把三者混在同一份常駐檔裡,是 context 變貴的常見原因。
三家一致與不一致的地方
三家一致的做法是把狀態存到 context 外,委派時用子代理隔離 context;分歧在 system prompt 的地位。LangChain 2025 年 7 月把詳細 system prompt 列為四元素之一,Schmid 把指令併入 context engineering,Anthropic 的清單裡則沒有獨立一項。
先開哪幾項
我的做法是先看任務的失敗型態再選能力:agent 漏掉原本的目標,先開規劃;中途被截斷後無法接續,先把狀態寫進檔案;探索階段把對話撐爆,才加子代理;規則越寫越長,改拆成記憶檔加技能。這個順序成立的前提是任務長到會碰到 context 上限,任務在十幾步內結束時,多開能力多半只增加 token 與可出錯的地方。
下一篇會回頭問,把這些能力包起來的那一層為什麼叫駕馭層(harness),以及它和單純寫 prompt 差在哪裡。
常見問題
Deep Agent 和一般 agent 差在哪裡?
一般 agent 只有「模型加工具」的迴圈;在 Schmid 描述的淺層 agent 裡,狀態主要留在對話歷史。Deep Agent 在外面加了規劃、檔案系統、子代理等能力,讓狀態與 context 可以被管理。Schmid 把前者稱為淺層 agent,並說它擅長 5 到 15 步的任務。
子代理一定比單一 agent 好嗎?
不一定。Anthropic 文件指出子代理隔離了 context,但每個子代理仍各自呼叫 API,花費算進整個查詢的預算。Claude Agent SDK 預設最多三層、同時 20 個。任務簡單、探索量小時,單一 agent 通常更省。我的判斷是先用單一 agent,撞到 context 上限再拆子代理。
規劃工具是不是可有可無?
LangChain v0.7(2026 年 7 月 29 日)起預設不加入規劃工具,Anthropic 文件則寫部分模型要自己開啟任務追蹤工具。兩份文件都沒說明原因。Chase 在 2025 年 7 月把 Claude Code 的 todo 工具形容為 no-op,價值在讓計畫留在 context 裡。
CLAUDE.md 和 AGENTS.md 有什麼不同?
兩者都是每次請求帶進 context 的記憶檔。LangChain Deep Agents 讀 AGENTS.md,Claude Agent SDK 讀 CLAUDE.md。Anthropic 文件說明這類內容每次請求都會重新放入,所以適合放必須長期有效的規則,不適合放長篇說明。
延伸閱讀
- 為什麼 AI 越聊越笨、一直犯同樣的錯?Anthropic 揭密 Context Engineering 實戰(2026 懶人包)
- AGENTS.md 怎麼寫?規則寫越多,Agent 反而越貴?(2026 完整教學+範例)
- Multi-Agent Coding 是什麼?同時開很多個 Agent,真的會比較快嗎?(2026 完整解析)
參考資料
- Harrison Chase, LangChain, Deep Agents(2025-07-30) https://www.langchain.com/blog/deep-agents
- LangChain, Deep Agents overview(文件頁,查閱於 2026-10-23) https://docs.langchain.com/oss/python/deepagents/overview
- LangChain, deepagents v0.7.0 release notes(2026-07-29) https://github.com/langchain-ai/deepagents/releases/tag/deepagents%3D%3D0.7.0
- Philipp Schmid, Agents 2.0: From Shallow Loops to Deep Agents(2025-10-12) https://www.philschmid.de/agents-2.0-deep-agents
- Anthropic, Agent SDK overview(查閱於 2026-10-23) https://code.claude.com/docs/en/agent-sdk/overview
- Anthropic, How the agent loop works(查閱於 2026-10-23) https://code.claude.com/docs/en/agent-sdk/agent-loop
- Anthropic, Subagents in the SDK(查閱於 2026-10-23) https://code.claude.com/docs/en/agent-sdk/subagents
留言0
登入後就能留言。
登入