大模型应用
需要为 Deep Agent…
当 Deep Agent 需要文件操作、线程内临时存储、跨线程长期记忆、本地磁盘访问或混合持久化时,用这套 backend 选择与配置方法。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
需要为 Deep Agent 配置文件系特定
解决思路
- 短期记忆用 StateBackend:文件只在单个 thread 内持久,thread 结束即丢失。
- 长期记忆用 StoreBackend:跨 thread 和 session 持久。
- 混合记忆用 CompositeBackend:把不同路径路由到不同 backend。
- 文件操作由 FilesystemMiddleware 提供工具:`ls`、`read_file`、`write_file`、`edit_file`、`glob`、`grep`。
- 临时工作文件选 StateBackend:默认 backend,无需额外配置。
- 本地开发 CLI 选 FilesystemBackend:直接访问磁盘。
- 跨会话记忆选 StoreBackend:跨 thread 持久。
- 混合存储选 CompositeBackend:混合临时与持久存储。
- 默认创建 Deep Agent 时使用 StateBackend:调用 `create_deep_agent()`,invoke 时传 config 中 `thread_id` 为 `thread-1`,写入 `/draft.txt`;该文件在 thread 结束后丢失。
- 配置 CompositeBackend 做混合路由:创建 `InMemoryStore()` 得到 `store`;用 `CompositeBackend(default=StateBackend(rt), routes={"/memories/": StoreBackend(rt)})`;再调用 `create_deep_agent(backend=composite_backend, store=store)`。
- 在 CompositeBackend 路由下:`/draft.txt` 走临时 StateBackend;`/memories/user-prefs.txt` 走持久 StoreBackend。
- 实现跨会话记忆:用 CompositeBackend,在 `thread_id` 为 `thread-1` 时写入 `/memories/style.txt`;在 `thread_id` 为 `thread-2` 时读取 `/memories/style.txt`;Thread 2 可读到 Thread 1 保存的文件。
- 本地开发用 FilesystemBackend:`backend=FilesystemBackend(root_dir=".", virtual_mode=True)`,`interrupt_on` 对 `write_file` 和 `edit_file` 开启人工确认,`checkpointer=MemorySaver()`;agent 可读写真实磁盘文件。
- 安全规则:绝不要在 web servers 中使用 FilesystemBackend;改用 StateBackend 或 sandbox。
- 在自定义工具中直接访问 store 做长期记忆:定义 `get_user_preference(key: str, runtime: ToolRuntime) -> str`,从 `runtime.store.get(("user_prefs",), key)` 读取,返回 `str(result.value)`,没有则返回 `Not found`。
- 定义 `save_user_preference(key: str, value: str, runtime: ToolRuntime) -> str`,用 `runtime.store.put(("user_prefs",), key, {"value": value})` 保存,返回 `Saved {key}={value}`。
- 创建 `store = InMemoryStore()`,并传给 `create_agent(model="gpt-4.1", tools=[get_user_preference, save_user_preference], store=store)`。
- 可配置项:backend 类型和配置。
- 可配置项:CompositeBackend 的路由规则。
- 可配置项:FilesystemBackend 的 root directory。
- 可配置项:文件操作的人机回环(human-in-the-loop)。
- 不可配置项:工具名 `ls`、`read_file`、`write_file`、`edit_file`、`glob`、`grep`。
- 不可配置项:访问 virtual_mode 限制之外的文件。
- 不可配置项:没有正确 backend 配置时跨 thread 访问文件。
- 修复 StoreBackend 缺少 store:错误是 `create_deep_agent(backend=lambda rt: StoreBackend(rt))`;正确是 `create_deep_agent(backend=lambda rt: StoreBackend(rt), store=InMemoryStore())`。
- 修复 StateBackend 文件不持久:StateBackend 文件是 thread-scoped;跨 thread 要用同一 `thread_id` 或改用 StoreBackend。错误示例:`thread-1` 写入后,`thread-2` 读取会 not found。
- 修复持久化路径前缀:路径必须匹配 CompositeBackend route 前缀;若 `routes` 中 `/memories/` 映射到 StoreBackend,则 `/prefs.txt` 是 ephemeral(不匹配),`/memories/prefs.txt` 是 persistent(匹配)。
- 修复生产环境 store:使用 `PostgresStore(connection_string=...)`,不要用 `InMemoryStore()`,因为重启会丢失。
- 修复 FilesystemBackend 安全:设置 `virtual_mode=True` 限制路径访问,防止 `../` 和 `~/` 逃逸,如 `FilesystemBackend(root_dir="/project", virtual_mode=True)`。
- 修复 CompositeBackend 前缀匹配:按最长前缀优先;`routes` 中同时有 `/mem/` 映射到 StoreBackend、`/mem/temp/` 映射到 StateBackend 时,`/mem/file.txt` 走 StoreBackend,`/mem/temp/file.txt` 走 StateBackend。
适用边界 · 注意事项
- 不使用 Deep Agents/LangGraph 的 backend 体系时,本经验不适用。
- 不要把 FilesystemBackend 用于 web servers;需要改用 StateBackend 或 sandbox。
- 不需要跨 thread 或跨 session 持久化时,不必引入 StoreBackend/CompositeBackend,直接用默认 StateBackend 即可。