iT邦幫忙

2026 iThome 鐵人賽

DAY 22
0
AI Engineering

地端 AI 建築學系列 第 22 篇

22 LangChain DeepAgent (1) 你也能做出龍蝦跟 Hermes Agent

  • 分享至 

  • xImage
  •  

前面幾篇我們從 Ollama 出發,走過 LangChain 到 LangGraph 的三個階段,再到 LlamaIndex 的資料檢索能力。這一篇要進入系列中很關鍵的一站:LangChain Deep Agents。

如果說 LangGraph 給的是「打造 Agent 的積木與執行引擎」,LangChain Deep Agents 給的則是一整組已經幫你組好的積木組合 — 一個開箱即用的 Agent Harness(代理人骨架 / 執行框架)。它不只是「呼叫模型 + 呼叫工具」的迴圈,而是把長任務執行需要的檔案系統、記憶、技能、子代理人分工、人機協作審核等能力,都內建成標準模組。

近一年來市面上出現了像 OpenClaw、Hermes Agent 這類「個人 AI 助理」等級的開源專案,都讓開發者驚呼「原來 Agent 可以做到這種程度」,因此這篇要分享的是:LangChain Deep Agents 如何讓我們組出一個具備類似龍蝦或 Hermes 能力的地端 Agent。


先聊 OpenClaw / Hermes Agent

在深入 Deep Agents 的架構之前,先花一點篇幅釐清這兩個常被拿來當作「Agent 能力天花板」參考指標的專案,可以幫助我們理解 Deep Agents 每個模組存在的意義。

  • OpenClaw:一個可以掛在 Telegram、Discord、Slack、WhatsApp、iMessage 等多個通訊管道上的個人 AI 代理閘道器(gateway)。使用者透過聊天視窗下指令,它能瀏覽器自動化、操作行事曆、管理待辦、甚至代為處理 email 交涉——本質上是一個「常駐、有身分、有記憶、能跨工具行動」的助理。
  • Hermes Agent:Nous Research 推出的自我改進型(self-improving)開源 Agent,強調的是「任務解完之後,能把解法蒸餾成可重複使用的技能(skill)」,並內建指令核准、沙箱隔離、憑證過濾等安全機制,多半以 headless 服務型態跑在伺服器上。

這兩者形狀不同(一個偏多通道個人助理、一個偏自我學習的伺服端 Agent),但它們共同指出了「像樣的 Agent 產品」需要具備的幾個共同要素:

  1. 能真的採取行動,而不只是回答問題(工具呼叫、檔案操作、指令執行)
  2. 有持久記憶與可重用技能,不用每次對話都重新解釋一次
  3. 能處理長時間、多步驟的任務而不被上下文長度卡死
  4. 面對高風險操作時,有人為審核與安全防線

Deep Agents 並非要取代 OpenClaw 或 Hermes Agent,而是提供打造這類產品所需的底層骨架,理解這點之後,再看 Deep Agents 的四大核心能力,會更清楚每一塊模組是在解決什麼問題。


Deep Agents 的定位:Framework、Runtime、Harness 三層

LangChain 生態系裡有三個常被混用的名詞,官方文件把它們拆得很清楚:

層級 角色 對應套件
Framework(框架) 提供 Agent 的核心建構元件 LangChain
Runtime(執行引擎) 提供持久化執行、串流、人機協作等底層能力 LangGraph
Harness(代理骨架) 在 Runtime 之上,內建檔案系統、子代理人、記憶等「開箱即用」的完整能力組合 Deep Agents

也就是說,deepagents 是建立在 LangChain 核心元件之上的獨立套件,底層執行則交給 LangGraph 負責持久化、串流與人機協作。如果你只是要做一個簡單的單輪工具呼叫 Agent,用 LangChain 的 create_agent 就夠了;但如果任務會拉很長、需要拆工、需要記得上次做過什麼,Deep Agents 就是專門為此設計的。


四大核心能力,對照 OpenClaw / Hermes Agent 怎麼做

官方文件把 Deep Agents 的能力拆成四大類,這裡我們一邊介紹,一邊對照 OpenClaw / Hermes Agent 是用什麼方式解決同樣的問題來說明。

1. 執行環境(Execution Environment)— 代理人怎麼「動手做」

這一層包含四件事:

  • 工具與 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 把「檔案系統 + 權限規則」做成了宣告式、可組合的標準元件,而不是各家產品各自寫一套。

2. 上下文管理(Context Management)— 代理人怎麼「記得住」

這是 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 模型,系統提示中不變的部分(基礎指令、記憶、技能內容)預設會套用快取,降低長任務的延遲與成本。

3. 委派(Delegation)— 代理人怎麼「分工」

  • 任務規劃:透過 TodoListMiddleware 提供 write_todos 工具,讓代理人維護結構化的待辦清單,特別適合能力較弱的模型或需要在 UI 上顯示進度的場景。

  • 子代理人(Subagents):內建 task 工具,讓主代理人可以把獨立的子任務丟給一個全新、context 乾淨的子代理人執行,子代理人跑完後只回傳一份精簡的最終報告給主代理人。這讓「探索、實驗、可能失敗的重活」被隔離在子代理人的上下文裡,不會污染主線任務的上下文視窗。

這塊剛好是 OpenClaw / Hermes Agent 目前比較少著墨的地方:它們多半是「單一代理人 + 多通道」或「單一代理人 + 自我改進迴圈」,較少做到 Deep Agents 這種「主代理人動態拆出多個並行子代理人」的分工模式,這也是 Deep Agents 作為 SDK 的差異化價值之一。

4. 引導(Steering)— 人類怎麼「插手」

透過 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

用 Deep Agents 建立最小可跑的地端 Agent

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。


上一篇
21 案例三:RAG(7)地端 AI 產品知識庫 - 完整落地設計參考
系列文
地端 AI 建築學 共 22 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言