本文详细介绍了Deep Agents的Memory机制,一种跨会话持久化的Agent核心能力。通过文件系统管理记忆,实现透明可读、工具复用和灵活存储。文章深入解析了Memory的工作原理、作用域划分(Agent级和User级),以及进阶用法如情景记忆、组织级记忆、后台整合等。最后总结了Memory的关键优势和落地建议,帮助开发者构建真正"越用越聪明"的AI Agent。
一、Memory–Agent核心能力之一
Deep Agents 的 Memory 指的是长期记忆(long-term memory):一种跨会话持久化的记忆能力。它允许 Agent 在不同的对话之间保留并更新所学到的信息。
注意区分:短期记忆(单次会话内的对话历史和临时文件)由上下文工程(context engineering)自动管理,不在本文讨论范围。
Deep Agents 的记忆机制有一个核心特点:基于文件系统。Agent 把记忆当作文件来读写,这与它操作代码、配置文件的方式完全一致。这种方式的好处是:
- 透明可读:记忆就是 Markdown 文件,便于调试和审计
- 工具复用:Agent 使用内置的
edit_file工具即可更新记忆 - 灵活存储:通过 backend 可以把记忆存到本地状态、Store 或任意自定义后端
二、Memory 的工作原理
Memory 的运行流程可以拆解为三步:
1. 指定记忆文件路径
在创建 Agent 时,通过memory=参数传入记忆文件路径。同样也可以通过skills=传入技能(procedural memory,即可复用的操作指令)。
from deepagents import create_deep_agent from deepagents.backends import CompositeBackend, StateBackend, StoreBackend agent = create_deep_agent( model="google_genai:gemini-3.1-pro-preview", memory=["/memories/AGENTS.md"], skills=["/skills/"], backend=CompositeBackend( default=StateBackend(), routes={ "/memories/": StoreBackend( namespace=lambda rt: (rt.server_info.assistant_id,), ), "/skills/": StoreBackend( namespace=lambda rt: (rt.server_info.assistant_id,), ), }, ), )backend 决定了记忆文件存在哪里、谁能访问。CompositeBackend可以根据路径把不同目录路由到不同的存储后端。
2. Agent 读取记忆
读取方式有两种:
- 启动时加载:把记忆文件内容注入到 system prompt 中
- 按需读取:例如 skills 只在启动时加载描述,真正用到时才读取完整文件,保持上下文精简
3. Agent 更新记忆(可选)
当 Agent 学到新信息时,可以使用内置的edit_file工具更新记忆文件。更新可以:
- 在对话中实时进行(默认行为)
- 在对话之间后台进行(background consolidation,见下文)
更新后的内容会持久化,在下次对话中立即可用。需要注意的是,并非所有记忆都可写——开发者定义的 skills 和组织级策略通常是只读的。
三、记忆的作用域(Scoped Memory)
记忆可以按作用域划分,最常见的两种模式是 Agent 级 和 User 级。
Agent 级记忆(Agent-scoped Memory)
给 Agent 一个"持久身份",所有用户共享同一份记忆。Agent 在与不同用户的交互中不断积累知识、打磨风格、学习技能,形成自己的"人格"。
关键在于 backend 的 namespace 设置为(assistant_id,):
agent = create_deep_agent( model="google_genai:gemini-3.1-pro-preview", memory=["/memories/AGENTS.md"], skills=["/skills/"], backend=CompositeBackend( default=StateBackend(), routes={ "/memories/": StoreBackend( namespace=lambda rt: (rt.server_info.assistant_id,), ), "/skills/": StoreBackend( namespace=lambda rt: (rt.server_info.assistant_id,), ), }, ), )完整示例:播种记忆并跨会话调用
下面这个例子先在 store 中初始化记忆和技能,然后在两个不同的 thread 中调用 Agent,观察它如何记住并应用所学。
from langchain_core.utils.uuid import uuid7 from deepagents import create_deep_agent from deepagents.backends import CompositeBackend, StateBackend, StoreBackend from deepagents.backends.utils import create_file_data from langgraph.store.memory import InMemoryStore store = InMemoryStore() # 部署到 LangSmith 时使用平台 store # 播种记忆文件 store.put( ("my-agent",), "/memories/AGENTS.md", create_file_data("""## Response style - Keep responses concise - Use code examples where possible """), ) # 播种一个技能 store.put( ("my-agent",), "/skills/langgraph-docs/SKILL.md", create_file_data("""--- name: langgraph-docs description: Fetch relevant LangGraph documentation to provide accurate guidance. --- # langgraph-docs Use the fetch_url tool to read https://docs.langchain.com/llms.txt, then fetch relevant pages. """), ) agent = create_deep_agent( model="google_genai:gemini-3.1-pro-preview", memory=["/memories/AGENTS.md"], skills=["/skills/"], backend=lambda rt: CompositeBackend( default=StateBackend(rt), routes={ "/memories/": StoreBackend(rt, namespace=lambda rt: ("my-agent",)), "/skills/": StoreBackend(rt, namespace=lambda rt: ("my-agent",)), }, ), store=store, ) # 会话 1:Agent 学到新偏好并写入记忆 config1 = {"configurable": {"thread_id": str(uuid7())}} agent.invoke( {"messages": [{"role": "user", "content": "I prefer detailed explanations. Remember that."}]}, config=config1, ) # 会话 2:Agent 读取记忆并应用该偏好 config2 = {"configurable": {"thread_id": str(uuid7())}} agent.invoke( {"messages": [{"role": "user", "content": "Explain how transformers work."}]}, config=config2, )User 级记忆(User-scoped Memory)
每个用户拥有独立的记忆文件,互不干扰。namespace 使用(user_id,):
agent = create_deep_agent( model="google_genai:gemini-3.1-pro-preview", memory=["/memories/preferences.md"], skills=["/skills/"], backend=CompositeBackend( default=StateBackend(), routes={ "/memories/": StoreBackend( namespace=lambda rt: (rt.server_info.user.identity,), ), "/skills/": StoreBackend( namespace=lambda rt: (rt.server_info.user.identity,), ), }, ), )部署后,每个经过认证的请求会自动把rt.server_info.user.identity解析为当前用户,如不同用户Alice 和 Bob 各自只能看到自己的偏好。
四、进阶用法
除了基础的作用域配置,Memory 还有多个可调节的维度。下表给出全景:
| 维度 | 回答的问题 | 选项 |
|---|---|---|
| 持续时间 | 记忆保留多久? | 短期(单次会话)/ 长期(跨会话) |
| 信息类型 | 是什么类型的信息? | 情景记忆(Episodic)/ 程序记忆(Procedural,即 skills)/ 语义记忆(Semantic,即事实) |
| 作用域 | 谁能看到和修改? | 用户级 / Agent 级 / 组织级 |
| 更新策略 | 何时写入记忆? | 对话中(默认)/ 对话之间(后台整合) |
| 读取方式 | 如何读取记忆? | 启动时加载(默认)/ 按需读取 |
| 权限 | Agent 能否写入? | 读写(默认)/ 只读 |
1. 情景记忆(Episodic Memory)
情景记忆保存的是过去的"经历":发生了什么、顺序如何、结果怎样。与语义记忆(事实和偏好)不同,情景记忆保留了完整的对话上下文,让 Agent 回忆起"一个问题是如何被解决的"。
Deep Agents 内置的 checkpointer 已经把每段对话作为 checkpoint 持久化。要让历史对话可被检索,只需把 thread 搜索封装成一个工具,user_id从运行时上下文中获取:(DEPLOYMENT_URL指的是在部署 LangGraph 应用到 LangSmith 时所获得的 API 端点地址)
from langgraph_sdk import get_client from langchain.tools import tool, ToolRuntime client = get_client(url="<DEPLOYMENT_URL>") @tool asyncdef search_past_conversations(query: str, runtime: ToolRuntime) -> str: """Search past conversations for relevant context.""" user_id = runtime.server_info.user.identity threads = await client.threads.search( metadata={"user_id": user_id}, limit=5, ) results = [] for thread in threads: history = await client.threads.get_history(thread_id=thread["thread_id"]) results.append(history) return str(results)通过调整 metadata 过滤器,可以按用户或按组织检索对话。这对执行复杂多步任务的 Agent 特别有用——例如编码 Agent 可以回看上一次调试会话,直接跳到可能的根因。
2. 组织级记忆(Organization-level Memory)
与 User 级记忆同理,只是把 namespace 换成组织维度。适合存放全员通用的策略或知识。
安全提示:组织级记忆通常应为只读,以防止通过共享状态进行提示注入。
agent = create_deep_agent( model="google_genai:gemini-3.1-pro-preview", memory=[ "/memories/preferences.md", "/policies/compliance.md", ], backend=CompositeBackend( default=StateBackend(), routes={ "/memories/": StoreBackend( namespace=lambda rt: (rt.server_info.user.identity,), ), "/policies/": StoreBackend( namespace=lambda rt: (rt.context.org_id,), ), }, ), )组织记忆由应用代码填充:
from langgraph_sdk import get_client from deepagents.backends.utils import create_file_data client = get_client(url="<DEPLOYMENT_URL>") await client.store.put_item( (org_id,), "/compliance.md", create_file_data("""## Compliance policies - Never disclose internal pricing - Always include disclaimers on financial advice """), )3. 后台整合(Background Consolidation)
默认情况下,Agent 在对话中实时写记忆(热路径)。另一种方式是在对话之间作为后台任务处理记忆,也称为"睡眠期计算"(sleep time compute)。一个独立的整合 Agent 会审视最近的对话、抽取关键事实、与已有记忆合并。
| 方式 | 优点 | 缺点 |
|---|---|---|
| 热路径 (对话中) | 记忆立即可用,对用户透明 | 增加延迟,Agent 需多任务处理 |
| 后台 (对话间) | 无用户感知延迟,可跨多段对话综合 | 记忆需等下次会话才可用,需要第二个 Agent |
对大多数应用而言,热路径已足够。当需要降低延迟或在大量对话间提升记忆质量时,再引入后台整合。
整合 Agent
整合 Agent 读取近期对话并把关键事实合并到记忆 store。在langgraph.json中与主 Agent 一起注册:
# consolidation_agent.py from datetime import datetime, timedelta, timezone from deepagents import create_deep_agent from langchain.tools import tool, ToolRuntime from langgraph_sdk import get_client sdk_client = get_client(url="<DEPLOYMENT_URL>") @tool asyncdef search_recent_conversations(query: str, runtime: ToolRuntime) -> str: """Search this user's conversations updated in the last 6 hours.""" user_id = runtime.server_info.user.identity since = datetime.now(timezone.utc) - timedelta(hours=6) threads = await sdk_client.threads.search( metadata={"user_id": user_id}, updated_after=since.isoformat(), limit=20, ) conversations = [] for thread in threads: history = await sdk_client.threads.get_history( thread_id=thread["thread_id"] ) conversations.append(history["values"]["messages"]) return str(conversations) agent = create_deep_agent( model="google_genai:gemini-3.1-pro-preview", system_prompt="""Review recent conversations and update the user's memory file. Merge new facts, remove outdated information, and keep it concise.""", tools=[search_recent_conversations], )// langgraph.json { "dependencies": ["."], "graphs": { "agent": "./agent.py:agent", "consolidation_agent": "./consolidation_agent.py:agent" }, "env": ".env" }通过 Cron 定时触发
用 cron job 按固定计划运行整合 Agent。节奏应与用户实际交互频率匹配:日活较高的聊天产品可以每几小时整合一次,而一周只用几次的工具每天或每周跑一次就够了。
from langgraph_sdk import get_client client = get_client(url="<DEPLOYMENT_URL>") cron_job = await client.crons.create( assistant_id="consolidation_agent", schedule="0 */6 * * *", input={"messages": [{"role": "user", "content": "Consolidate recent memories."}]}, )重要:cron 间隔必须与整合 Agent 内的回溯窗口保持一致。上面例子每 6 小时运行一次,对应
search_recent_conversations中timedelta(hours=6)的回溯窗口。若 cron 运行频率高于回溯窗口,会重复处理同样的对话;反之则会遗漏窗口外的记忆。所有 cron 计划均按 UTC 时区解释。
4. 只读 vs 可写记忆
| 权限 | 适用场景 | 工作方式 |
|---|---|---|
| 读写 (默认) | 用户偏好、Agent 自我改进、学到的技能 | Agent 通过edit_file工具更新文件 |
| 只读 | 组织策略、合规规则、共享知识库、开发者定义的技能 | 由应用代码或 Store API 填充;用 permissions 拒绝写入特定路径,或用 policy hooks 做自定义校验 |
安全考量:如果一个用户能写入另一个用户读取的记忆,恶意用户就可能通过共享状态注入指令。缓解措施包括:
- 除非有明确的共享需求,默认使用用户级作用域
(user_id) - 对共享策略使用只读记忆(由应用代码填充,而非 Agent)
- 在 Agent 写入共享记忆前加入人工审批环节,用 interrupt 要求人类确认对敏感路径的写入
5. 并发写入
多个 thread 可以并行写记忆,但对同一文件的并发写入可能出现"最后写入获胜"的冲突。对于用户级记忆,由于用户通常同时只有一个活跃会话,这种情况较少发生。对于 Agent 级或组织级记忆,可以考虑使用后台整合来串行化写入,或把记忆拆分为按主题分文件,降低争用。
实践中,即使某次写入因冲突失败,LLM 通常也能智能地重试或优雅恢复,因此单次写入丢失一般不构成灾难。
6. 同一部署中的多个 Agent
要在共享部署中给每个 Agent 独立的记忆,把assistant_id加入 namespace:
StoreBackend( namespace=lambda rt: ( rt.server_info.assistant_id, rt.server_info.user.identity, ), )如果只需要按 Agent 隔离、不需要按用户隔离,单独使用assistant_id即可。
小贴士:使用 LangSmith tracing 可以审计 Agent 写入了哪些记忆。每一次文件写入都会作为一次工具调用出现在 trace 中。
五、总结
Deep Agents 的 Memory 机制围绕"文件即记忆"这一理念展开,带来几个关键优势:
跨会话持久化:Agent 不再"健忘",能够从历史交互中学习
灵活的作用域:通过 namespace 轻松实现 Agent 级、User 级、组织级隔离
多样的信息类型:覆盖语义记忆(事实偏好)、程序记忆(skills)、情景记忆(历史对话)
可控的更新策略:热路径实时写,或后台整合异步沉淀
完善的安全模型:只读记忆、权限控制、人工审批层层防护
落地建议:
- 从 User 级记忆 + 热路径更新起步,覆盖大多数场景
- 对共享策略和合规规则使用只读组织级记忆
- 当延迟或记忆质量成为瓶颈时,再引入后台整合
- 始终用 LangSmith tracing 审计记忆写入,确保可观测
合理运用 Memory,你的 Agent 将真正具备"越用越聪明"的能力。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包:
- ✅ 从零到一的 AI 学习路径图
- ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
- ✅ 百度/阿里专家闭门录播课
- ✅ 大模型当下最新行业报告
- ✅ 真实大厂面试真题
- ✅ 2026 最新岗位需求图谱
所有资料 ⚡️ ,朋友们如果有需要《AI大模型入门+进阶学习资源包》,下方扫码获取~
① 全套AI大模型应用开发视频教程
(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
② 大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
③ 大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
④ AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
⑤ 大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
⑥ 大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
以上资料如何领取?
为什么大家都在学大模型?
最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!
不出1年,“有AI项目经验”将成为投递简历的门槛。
风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。