前面幾篇我們從 Ollama 出發,走過 LangChain 到 LangGraph 的三個階段,再到 LlamaIndex 的資料檢索能力。這一篇要進入系列中很關鍵的一站:LangChain Deep Agents。
如果說 LangGraph 給的是「打造 Agent 的積木與執行引擎」,LangChain Deep Agents 給的則是一整組已經幫你組好的積木組合 — 一個開箱即用的 Agent Harness(代理人骨架 / 執行框架)。它不只是「呼叫模型 + 呼叫工具」的迴圈,而是把長任務執行需要的檔案系統、記憶、技能、子代理人分工、人機協作審核等能力,都內建成標準模組。
近一年來市面上出現了像 OpenClaw、Hermes Agent 這類「個人 AI 助理」等級的開源專案,都讓開發者驚呼「原來 Agent 可以做到這種程度」,因此這篇要分享的是:LangChain Deep Agents 如何讓我們組出一個具備類似龍蝦或 Hermes 能力的地端 Agent。
在深入 Deep Agents 的架構之前,先花一點篇幅釐清這兩個常被拿來當作「Agent 能力天花板」參考指標的專案,可以幫助我們理解 Deep Agents 每個模組存在的意義。
這兩者形狀不同(一個偏多通道個人助理、一個偏自我學習的伺服端 Agent),但它們共同指出了「像樣的 Agent 產品」需要具備的幾個共同要素:
- 能真的採取行動,而不只是回答問題(工具呼叫、檔案操作、指令執行)
- 有持久記憶與可重用技能,不用每次對話都重新解釋一次
- 能處理長時間、多步驟的任務而不被上下文長度卡死
- 面對高風險操作時,有人為審核與安全防線
Deep Agents 並非要取代 OpenClaw 或 Hermes Agent,而是提供打造這類產品所需的底層骨架,理解這點之後,再看 Deep Agents 的四大核心能力,會更清楚每一塊模組是在解決什麼問題。
LangChain 生態系裡有三個常被混用的名詞,官方文件把它們拆得很清楚:
| 層級 | 角色 | 對應套件 |
|---|---|---|
| Framework(框架) | 提供 Agent 的核心建構元件 | LangChain |
| Runtime(執行引擎) | 提供持久化執行、串流、人機協作等底層能力 | LangGraph |
| Harness(代理骨架) | 在 Runtime 之上,內建檔案系統、子代理人、記憶等「開箱即用」的完整能力組合 | Deep Agents |
也就是說,deepagents 是建立在 LangChain 核心元件之上的獨立套件,底層執行則交給 LangGraph 負責持久化、串流與人機協作。如果你只是要做一個簡單的單輪工具呼叫 Agent,用 LangChain 的 create_agent 就夠了;但如果任務會拉很長、需要拆工、需要記得上次做過什麼,Deep Agents 就是專門為此設計的。
官方文件把 Deep Agents 的能力拆成四大類,這裡我們一邊介紹,一邊對照 OpenClaw / Hermes Agent 是用什麼方式解決同樣的問題來說明。
這一層包含四件事:
工具與 MCP:可以直接傳入自訂函式、LangChain 工具,或是任何 MCP Server 提供的工具,等同於原生支援 Model Context Protocol。
虛擬檔案系統:內建 ls、read_file、write_file、edit_file、delete、glob、grep 等操作,後端可以掛記憶體、本機磁碟、LangGraph Store,甚至自訂儲存層。
檔案權限規則:可以宣告哪些路徑允許讀、允許寫,規則由上到下比對、第一個命中的規則生效——這讓你可以把子代理人限制在特定工作目錄,或是保護 .env、憑證檔不被誤觸。
程式碼執行:透過 Sandbox 後端執行 shell 指令,或是用內建的 QuickJS 直譯器跑輕量級的邏輯運算。
對照來看,OpenClaw 的瀏覽器自動化、Hermes Agent 的沙箱隔離指令執行,本質上都是在做同一件事:讓模型能安全地碰觸真實世界的檔案與系統。差別在於 Deep Agents 把「檔案系統 + 權限規則」做成了宣告式、可組合的標準元件,而不是各家產品各自寫一套。
這是 Deep Agents 相對特別的一塊,包含:
Skills(技能):遵循 Agent Skills 標準,每個技能是一個帶 SKILL.md 的資料夾,可以附腳本、範本、參考文件。代理人啟動時只讀取技能摘要(frontmatter),真正需要時才載入完整內容——這種漸進式揭露(progressive disclosure)機制,跟 Hermes Agent「把解過的任務蒸餾成技能,下次直接複用」的邏輯是同一個方向,只是 Deep Agents 把它變成了框架層級的標準做法。
Memory(記憶):透過 AGENTS.md 傳入專案慣例、程式風格、偏好設定,這些內容每次都會被載入,並存放在後端儲存中,模型也能根據互動回饋更新記憶。這跟 OpenClaw 用 SOUL.md / AGENTS.md 定義代理人身分與長期偏好的做法幾乎一模一樣。
摘要與上下文卸載:自動壓縮過長的對話歷史與工具回傳的大型結果,避免長任務把上下文塞爆。
Prompt Caching:針對 Anthropic、Amazon Bedrock 模型,系統提示中不變的部分(基礎指令、記憶、技能內容)預設會套用快取,降低長任務的延遲與成本。
任務規劃:透過 TodoListMiddleware 提供 write_todos 工具,讓代理人維護結構化的待辦清單,特別適合能力較弱的模型或需要在 UI 上顯示進度的場景。
子代理人(Subagents):內建 task 工具,讓主代理人可以把獨立的子任務丟給一個全新、context 乾淨的子代理人執行,子代理人跑完後只回傳一份精簡的最終報告給主代理人。這讓「探索、實驗、可能失敗的重活」被隔離在子代理人的上下文裡,不會污染主線任務的上下文視窗。
這塊剛好是 OpenClaw / Hermes Agent 目前比較少著墨的地方:它們多半是「單一代理人 + 多通道」或「單一代理人 + 自我改進迴圈」,較少做到 Deep Agents 這種「主代理人動態拆出多個並行子代理人」的分工模式,這也是 Deep Agents 作為 SDK 的差異化價值之一。
透過 interrupt_on 參數,可以宣告哪些工具呼叫(例如 edit_file)需要先暫停、等待人為核准,核准時還能修改工具的輸入參數再放行。這跟 Hermes Agent 強調的「指令核准機制」、OpenClaw 安裝時提醒使用者先清理敏感檔案的安全意識,是同一個訴求:高風險操作前,留一道人為關卡。
延續系列的核心精神 — 盡量在地端跑,這裡選用 Ornith-1.5-9B 作為示範模型。它是一顆約 9B 參數的密集模型,訓練上採用自我改進迴圈(自動生成訓練任務、優化執行策略),原生支援思考過程與最終輸出分離的推理格式,也內建與 OpenAI 相容的結構化工具呼叫,官方也明確列出可搭配 Ollama、llama.cpp、vLLM、SGLang 等多種推理後端,甚至可以直接對接 Hermes Agent、OpenClaw 這類 Agent 產品。以 9B 的體積來說,是目前地端 Agent 場景中,工具呼叫穩定度相對不錯的選擇,單張消費級 GPU(或 CPU + 足夠記憶體)搭配量化版本就能跑起來。
ollama pull ornith-1.5:9b
from deepagents import create_deep_agent
def get_weather(city: str) -> str:
"""查詢指定城市的天氣。"""
return f"{city} 現在天氣晴朗!"
agent = create_deep_agent(
model="ollama:ornith-1.5:9b",
tools=[get_weather],
system_prompt="你是一個樂於助人的地端 AI 助理。",
)
# 執行 Agent
result = agent.invoke(
{"messages": [{"role": "user", "content": "台北現在天氣如何?"}]}
)
print(result["messages"][-1].content)
只要把 model 換成 ollama:<模型名稱>,Deep Agents 就會透過 Ollama 的 OpenAI 相容端點呼叫本機模型,前面介紹的檔案系統工具、技能、記憶、子代理人等能力,理論上都能沿用同一套 API——差別只在於:地端模型的工具呼叫穩定度、上下文長度、以及子代理人平行呼叫時的硬體負載,會比雲端模型更需要留意。這也是為什麼像 Ornith-1.5-9B 這種原生針對 Agentic 工具呼叫優化過的小模型,會特別適合拿來做地端 Deep Agents 的第一顆測試模型。
工具呼叫格式:確認拉取的模型版本內建正確的 chat template,否則 Ollama 可能會退回成純文字拼接,導致模型看不懂工具呼叫格式、陷入重複輸出的迴圈。
上下文長度:Ornith-1.5-9B 原生支援 262K context,但實際可用長度仍受限於本機顯存與 Ollama 的設定,長任務建議搭配 Deep Agents 內建的摘要與上下文卸載機制。
子代理人的硬體成本:委派多個子代理人平行執行時,本機只有一顆模型在跑,實際上是「排隊」而非真正平行,這點跟接雲端 API 的體感會不一樣,規劃任務拆分粒度時要納入考量。
把上面幾塊放在一起看,Deep Agents 想解決的問題其實很單純:不用從零打造 agent harness,把檔案系統、技能、記憶、子代理人、人機協作這些「重複造輪子」的部分標準化與模組化,讓開發者專注在發展貼近自己業務邏輯的 harness engineering。