可插拔後端:In-Memory、Disk、LangGraph Store、Sandbox 怎麼選

可插拔後端:In-Memory、Disk、LangGraph Store、Sandbox 怎麼選

6 min read

上一篇說到代理人有虛擬 Filesystem——但那個 Filesystem 的底層是什麼?資料到底存在哪裡?

Deep Agents 的 Filesystem 設計是「後端可插拔」的,你可以根據場景換掉底層的儲存實作。這個設計看起來很工程師味,但實際上背後的選擇邏輯蠻直覺的——就是「我現在需要的是快速測試、持久保存、還是隔離執行」這三個問題。

四種後端,四種場景

1. In-Memory(記憶體)

最快、最輕,什麼都不用設定。代理人結束後,資料跟著消失。

適合場景:

  • 開發和測試——你不在乎資料,你只想看代理人的行為
  • 短暫任務——任務完成後不需要保留中間檔案
  • 原型驗證——先讓邏輯跑通,後面再換正式後端
from deepagents import create_deep_agent
from deepagents.backends import InMemoryBackend
 
agent = create_deep_agent(
    tools=[...],
    filesystem_backend=InMemoryBackend(),
)

不傳 filesystem_backend 的話,預設就是 In-Memory。

2. 本地磁碟(Local Disk)

資料寫到你指定的目錄,代理人結束後依然存在。可以用一般的檔案工具去看、編輯、備份。

適合場景:

  • 本地開發,你想在執行後直接用 cat 或文字編輯器看代理人產出了什麼
  • 任務結果需要持久保存,但只需要單機使用
  • 除錯——直接翻資料夾看代理人做了什麼
from deepagents.backends import LocalDiskBackend
 
agent = create_deep_agent(
    tools=[...],
    filesystem_backend=LocalDiskBackend(base_dir="./agent_workspace"),
)

3. LangGraph Store(跨 Thread 持久化)

資料存在 LangGraph 的 Memory Store,可以跨 thread、跨 session 存取。主要用在需要長期記憶的場景(下一篇會深入講),但它也可以單獨當 Filesystem 後端用。

適合場景:

  • 代理人需要在不同對話之間保留工作狀態
  • 多個代理人需要共用同一個 Filesystem
  • 任務可能被打斷,下次對話要從中途繼續
from langgraph.store.memory import InMemoryStore
from deepagents.backends import LangGraphStoreBackend
 
store = InMemoryStore()  # 或換成 PostgresStore 等持久化實作
 
agent = create_deep_agent(
    tools=[...],
    filesystem_backend=LangGraphStoreBackend(store=store),
)

4. Sandbox(隔離執行環境)

代理人的 Filesystem 和程式碼執行都在隔離環境裡跑——支援 Modal、Daytona、Deno。

適合場景:

  • 代理人需要執行來自用戶的程式碼(不能直接在你的機器上跑)
  • 需要隔離不同任務的執行環境,避免相互影響
  • 雲端部署,需要彈性的計算資源
from deepagents.backends import ModalBackend  # 或 DaytonaBackend, DenoBackend
 
agent = create_deep_agent(
    tools=[...],
    filesystem_backend=ModalBackend(),
)

Sandbox 後端設定相對複雜,需要對應平台的帳號和設定,但安全隔離和彈性計算是它的核心優勢。

選擇矩陣

需求 建議後端
開發和測試 In-Memory(預設)
本地持久化、方便除錯 Local Disk
跨 session 保留狀態 LangGraph Store
需要執行不受信任的程式碼 Sandbox
多代理人共用 Filesystem LangGraph Store
雲端部署 + 彈性計算 Sandbox

後端可以組合用嗎

可以——Deep Agents 支援 Composite 後端,根據路徑或規則,把不同的檔案路由到不同的後端:

from deepagents.backends import CompositeBackend
 
agent = create_deep_agent(
    tools=[...],
    filesystem_backend=CompositeBackend(
        backends={
            "/tmp/": InMemoryBackend(),        # 暫存就用記憶體
            "/results/": LocalDiskBackend("./output"),  # 最終結果存磁碟
        }
    ),
)

這個設計在複雜任務裡很有用:暫存資料用記憶體(快),需要保留的最終結果存磁碟(持久),不用為了所有資料選同一個後端。

從開發到生產的後端遷移策略

推薦的遷移路徑:

  1. 原型階段:In-Memory,什麼都不用設定,先讓邏輯對
  2. 本地開發:Local Disk,可以直接看代理人產出的檔案
  3. 整合測試:LangGraph Store,測試跨 session 的行為
  4. 生產部署:視需求——如果是 SaaS 用 LangGraph Store,如果需要代碼執行用 Sandbox

不同後端的 API 是一樣的,切換只要換 filesystem_backend 的參數,不需要改其他地方。

一個關鍵提醒

Sandbox 後端很強大,但它不等於「讓代理人連上網際網路做任何事」——Sandbox 控制的是執行隔離,不是網路訪問控制。如果你需要限制代理人能存取什麼資源,那是另一層安全設計,不在 Filesystem 後端的範疇裡。


上一篇:Filesystem 工具:用檔案管理 Context,不讓 Token 爆炸 下一篇:Subagents:用 task 工具把複雜任務分包出去