§07 后端系统决定数据存在哪
先给结论:所有文件操作都走 BackendProtocol 抽象层。换后端,不换业务代码。
我第一次没搞懂后端,直接上了 FilesystemBackend + CompositeBackend。 结果 .agent_data/ 目录不透明、不持久、gitignore 忽略。 其实我那个场景,用默认的 StateBackend 就够了。
后端全家福
| 后端 | 范围 | execute | 适合 |
|---|---|---|---|
StateBackend |
线程作用域 | 否 | 默认;中间结果草稿纸 |
FilesystemBackend |
本地磁盘 | 否 | 本地开发、CI |
StoreBackend |
跨线程 | 否 | 长期记忆、多会话 |
ContextHubBackend |
LangSmith Hub | 否 | 不要单独 store 的持久化 |
LocalShellBackend |
本地+Shell | 是 | 本地开发带命令行 |
| 沙箱后端 | 隔离环境 | 是 | Modal/Daytona/Runloop/LangSmith |
CompositeBackend |
按路径前缀路由 | 按路由 | 混合:默认 State + /memories/ 用 Store |
最常用的 CompositeBackend
from deepagents import create_deep_agent
from deepagents.backends import CompositeBackend, StateBackend, StoreBackend
from langgraph.store.memory import InMemoryStore
agent = create_deep_agent(
model="anthropic:claude-sonnet-4-6",
backend=CompositeBackend(
default=StateBackend(), # 默认走内存
routes={"/memories/": StoreBackend(...)}, # /memories/ 走持久
),
store=InMemoryStore(),
)
一句话理解:默认存内存,特定路径存长久。
标叔的结论:开发用 StateBackend 或 FilesystemBackend。生产用 CompositeBackend(内存 + Store 持久)。代码执行才上沙箱。别像我一样过度设计。
标叔的经验:StateBackend 把数据存在 LangGraph state 里,线程隔离,无外部依赖。对纯内存场景,它是首选。我后来把那个项目从 FilesystemBackend 退回 StateBackend,清爽很多。
下一章,讲子代理——DeepAgents 最被低估的能力。