一.使用fileSystemBeckEnd实现长期记忆
场景描述: 在本地开发或调试时,我们希望 Agent 生成的文件直接出现在项目文件夹中,方便开发者查看和验证。FilesystemBackend 将 Agent 的虚拟路径直接映射到宿主机的物理文件系统。
功能特点:
- 直观可见:生成的文件可以直接在 IDE 或文件管理器中打开。
- 安全隔离 :推荐开启
virtual_mode=True,将 Agent 限制在指定的工作目录(root_dir)内,防止越权访问系统敏感文件。
代码示例:
ini
from pathlib import Path # 导入Path类
from deepagents import create_deep_agent
from deepagents.backends import FilesystemBackend,StateBackend,StoreBackend,CompositeBackend
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv, find_dotenv
import os
load_dotenv()
# 1. 准备本地工作目录(用Path改写)
workspace_dir = Path("./agent_workspace").resolve() # resolve() 等价于 os.path.abspath(),获取绝对路径
if not workspace_dir.exists(): # 等价于 os.path.exists()
workspace_dir.mkdir(parents=True, exist_ok=True) # 等价于 os.makedirs()
# 演示使用fileSystemBeckEnd实现长期记忆 (跨会话 跨线程)实现数据共享 -》 多轮会话 有之前的环境!!
# 2. 创建FileBackEnd
file_backend = FilesystemBackend(root_dir=workspace_dir,virtual_mode=True)
# 极简初始化(自动读取OPENAI环境变量)
model = init_chat_model(
model="qwen-max",
model_provider="openai",
api_key = os.getenv("DASHSCOPE_API_KEY"),
base_url = os.getenv("DASHSCOPE_BASE_URL")
)
# 3. 创建deepAgent指定长期记忆类型
main_agen = create_deep_agent(
model=model,
tools=[],
backend=file_backend, # 指定长期记忆类型
system_prompt="你是一个智能助手,可以使用文件工具进行文件操作和读写!但是只有在用户明确要求的情况下,你才可以创建文件!!"
)
# 4. 运行并且验证
print("1--->>> 不明确,看看会不会创建")
result_1 = main_agen.invoke(
{
"messages": [
{"role": "user", "content": "帮我查询下python语言的介绍!!!"}
]
}
)
print(f"最终结果{result_1['messages'][-1].content}")
print("2--->>> 明确,看看会不会创建")
result_2 = main_agen.invoke(
{
"messages": [
{"role": "user", "content": "帮我查询下java语言的介绍,并且帮我写到 java.txt文件中!!"}
]
}
)
print(f"最终结果{result_2['messages'][-1].content}")
执行结果:

二.内存存储 (StoreBackend)-跨会话存储
deepagents执行StoreBackEnd 具体的存储store = InMemoryStore()
场景描述: 在生产环境或分布式系统中,文件不适合存储在本地磁盘。StoreBackend 利用 LangGraph 的 Store 机制,将文件内容作为 Key-Value 数据存储在数据库(如 Redis、Postgres)或内存中。这对于实现跨线程记忆共享至关重要。
功能特点:
- 持久化:配合 RedisStore 可实现数据持久保存。
- 共享性:不同线程(Thread)甚至不同 Agent 可以通过访问同一个 Store 来共享数据。
- 适配器模式 :
StoreBackend充当适配器,将文件操作转换为 KV 存储操作。
代码示例:
ini
from deepagents import create_deep_agent
from deepagents.backends import StoreBackend, StateBackend,FilesystemBackend,CompositeBackend
from langgraph.store.memory import InMemoryStore
from dotenv import load_dotenv, find_dotenv
from langchain.chat_models import init_chat_model
import os
load_dotenv()
# 生产环境建议使用 RedisStore: from langgraph.store.redis import RedisStore
# 2. 配置 Store 后端
model = init_chat_model(
model="qwen-max",
model_provider="openai",
api_key = os.getenv("DASHSCOPE_API_KEY"),
base_url = os.getenv("DASHSCOPE_BASE_URL")
)
# 1. 准备 Store (模拟数据库)
# InMemoryStore 是轻量级内存存储,重启后数据丢失。
# 最终存储的位置 内存行的k = v 使用langgraph自带的! 也可以切换成其他的!(redis...)
store = InMemoryStore()
# 3. 创建deepagents执行StoreBackEnd 具体的存储store = InMemoryStore()
main_agent = create_deep_agent(
model=model,
store=store, # 具体的存储位置 key (user_profile.txt) = value (重要信息)
backend=StoreBackend, # 开启了k=v 库存储
system_prompt="""
你要把用户的重要信息保存到user_profile.txt文件中!
获取用户信息可以读取user_profile.txt文件!
"""
)
# 4. 演示跨会话 跨线程进行长期记忆
config_a = {
"configurable":{
"thread_id":"a"
}
}
config_b = {
"configurable":{
"thread_id":"b"
}
}
#第一遍执行 -》 存储一些重要信息
result_a = main_agent.invoke(
{
"messages":[
{"role":"user","content":"我是大风哥,我今年19岁!"}
]
},
config=config_a
)
print(f"第一次回复结果:{result_a['messages'][-1].content}")
print(f"读取store保存的用户信息!!")
# store -> namespace命令空间(库) filesystem -》 key user_profile.txt | value 重要信息
items = store.search(('filesystem',)) # ('filesystem',) -> 元组 ('filesystem' 不写, 变成字符串)
for item in items:
print(f"key = {item.key}")
print(f"value = {item.value}")
#第二遍执行 -》 读取一些重要信息
result_b = main_agent.invoke(
{
"messages":[
{"role":"user","content":"我叫啥和我的年龄!"}
]
},
config=config_b
)
print(f"第二次次回复结果:{result_b['messages'][-1].content}")
执行结果:

三.CompositeBackend 混合存储
文件存储FilesystemBackend+ 内存存储StoreBackend ,其中StoreBackedn具体存储到store=InMemoryStore里面。
场景描述: 这是最灵活且推荐的生产环境配置。CompositeBackend 允许你根据文件路径的前缀,将文件路由到不同的后端。例如,将临时文件存本地,将重要记忆存数据库。
配置逻辑:
- 默认路由 (Default) :处理普通路径,通常映射到
FilesystemBackend(本地)或StateBackend(临时)。 - 特定路由 (Routes) :处理特定前缀路径(如
/store/),映射到StoreBackend(数据库)。
代码示例:
ini
from deepagents import create_deep_agent
from deepagents.backends import StoreBackend, FilesystemBackend, CompositeBackend
from langgraph.store.memory import InMemoryStore
from dotenv import load_dotenv, find_dotenv
from langchain.chat_models import init_chat_model
import os
from pathlib import Path # 新增导入 Path 类
load_dotenv(find_dotenv())
# 1. 准备 Store
store = InMemoryStore()
model = init_chat_model(
model="qwen-max",
model_provider="openai",
api_key = os.getenv("DASHSCOPE_API_KEY"),
base_url = os.getenv("DASHSCOPE_BASE_URL")
)
# 2. 配置 LLM
# 3. 定义混合后端工厂函数
def create_composite_backend(runtime):
# 后端 A: 本地文件系统 (存普通文件)
# 1. 准备本地工作目录(用Path改写)
# fileBackEnd 文件
workspace_dir = Path("./agent_workspace").resolve() # resolve() 等价于 os.path.abspath(),获取绝对路径
if not workspace_dir.exists(): # 等价于 os.path.exists()
workspace_dir.mkdir(parents=True, exist_ok=True) # 等价于 os.makedirs()
fs_backend = FilesystemBackend(root_dir=workspace_dir, virtual_mode=True)
# 后端 B: 数据库存储 (存重要记忆)
# storeBackEnd 内存库
store_backend = StoreBackend(runtime)
# 组合后端: 配置路由规则
# 组合存储方式
return CompositeBackend(
default=fs_backend, # 默认走本地文件系统 【没有触发存储路径的! 】 需求:用户信息 存储到 /erdaye/user.txt
routes={
"/store/": store_backend # 以 /store/ 开头的路径走数据库存储 需求:用户信息 存储到 /store/user.txt
}
)
agent = create_deep_agent(
model=model,
store=store, # 组合中StoreBackEnd
backend=create_composite_backend, # 传入工厂函数 返回组合back
tools=[],
system_prompt="""你是一个智能助手。
- 普通文件:直接写入文件名(如 `report.txt`),保存到本地 workspace。
- 重要记忆:写入 `/store/` 目录(如 `/store/profile.txt`),保存到store指定的存储方式中。
"""
)
# 4. 运行 Agent
print("\n=== 测试混合存储 ===")
config = {"configurable": {"thread_id": "thread_composite"}}
# 任务:同时触发两种存储路径
user_input = "1. 创建本地文件 local.txt,内容'本地文件'。\n2. 创建记忆文件 /store/memory.txt,内容'重要记忆'。"
print(f"用户指令: {user_input}")
result = agent.invoke({
"messages": [{"role": "user", "content": user_input}]
}, config=config)
print("Agent 回复:", result["messages"][-1].content)
print("\n=== 验证数据库存储 (Store) ===")
# CompositeBackend 会自动剥离路由前缀,所以 /store/memory.txt 在 Store 中的 Key 为 /memory.txt
items = store.search(("filesystem",))
for item in items:
print(item)
执行结果:
