跳至主要內容

    Agent 駕馭工程懶人包 (1)|Deep Agent 有哪些內建能力?三家說法對成六項

    做長任務時開始忘東忘西,三家的解法各是什麼?整理 LangChain Deep Agents、Philipp Schmid 與 Claude Agent SDK 對規劃、檔案、子代理、壓縮、記憶、外部工具的做法,附對照表。

    sunny 桑尼· · 15 MIN READ · 235 次瀏覽

    Agent 駕馭工程懶人包 (1)|Deep Agent 有哪些內建能力?三家說法對成六項
    本文目錄

    用 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 逐項對照。

    圖 1 六項能力與兩家的代表工具名稱(只列代表名稱,完整清單見表 1)。名稱出處:LangChain Deep Agents 文件、Claude Agent SDK 文件(皆查閱於 2026-10-23)。分成六項是本站歸納。

    下表把六項各自對回三家,最後一欄是它解決的問題。Schmid 的文章沒有單獨列「外部工具」與「把關」,該格寫「未列為一項」,也沒有談壓縮,該格寫「未談壓縮」。

    能力LangChain Deep AgentsPhilipp SchmidClaude Agent SDK解決什麼問題

    1 規劃
    LangChain Deep Agents
    write_todos(v0.7 起選用)
    Philipp Schmid
    明確規劃,例如 markdown 待辦檔
    Claude Agent SDK
    TaskCreate、TaskUpdate
    解決什麼問題
    長任務中途忘了原本要做什麼
    2 檔案與指令
    LangChain Deep Agents
    ls、read_file、write_file、edit_file、delete、glob、grep;沙箱後端另有 execute
    Philipp Schmid
    持久記憶:檔案系統或向量庫當事實來源
    Claude Agent SDK
    Read、Edit、Write、Glob、Grep、Bash
    解決什麼問題
    中間產物不必全塞在對話裡
    3 子代理
    LangChain Deep Agents
    task 工具
    Philipp Schmid
    階層式委派,子代理只回綜合答案
    Claude Agent SDK
    Agent 工具(文件中也出現舊名 Task)
    解決什麼問題
    探索過程把主對話撐爆
    4 壓縮與卸載
    LangChain Deep Agents
    summarization 與 context offloading(把過大的內容移出 context、改存別處;自動,文件未給工具名)
    Philipp Schmid
    未談壓縮
    Claude Agent SDK
    automatic compaction、PreCompact hook
    解決什麼問題
    對話超過 context 上限
    5 記憶與技能
    LangChain Deep Agents
    AGENTS.md(memory)、SKILL.md(skills,漸進載入)
    Philipp Schmid
    持久記憶:知道去哪裡找
    Claude Agent SDK
    CLAUDE.md、Skill 工具
    解決什麼問題
    跨 session 與跨任務的規則和做法
    6 外部工具與把關
    LangChain Deep Agents
    tools= 與 MCP、interrupt_on、permissions=
    Philipp Schmid
    未列為一項
    Claude Agent SDK
    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 畫出兩邊各自收到什麼。

    圖 2 子代理的 context 隔離(非 fork 時;fork 子代理會複製父對話)。依據:Claude Agent SDK 文件〈Subagents in the SDK〉,查閱於 2026-10-23。

    這份文件還給了三個容易漏掉的數字:子代理預設最多往下三層(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 文件說明這類內容每次請求都會重新放入,所以適合放必須長期有效的規則,不適合放長篇說明。

    延伸閱讀

    參考資料

    留言0

    登入後就能留言。

    登入