Context EngineeringNote 22
06 综合案例:长期记忆
它是什么
它是什么
Long-term memory 用 CompositeBackend 把 /memories/ 路由到 LangGraph Store,让信息跨 thread、跨会话保留。它解决的问题是:用户偏好、长期项目事实、研究进度不该只活在当前 thread 的 state 里。普通工作文件仍可以留在 StateBackend 或 FilesystemBackend,别全塞进长期存储。
最小代码
文件:deepagent_src/context_engineering_teach/06_long_term_memory_case.py
backend = CompositeBackend(
default=StateBackend(),
routes={
"/memories/": StoreBackend(
store=store,
namespace=lambda _rt: ("deepagents-context", "u-123"),
)
},
)
运行
uv run python deepagent_src/context_engineering_teach/06_long_term_memory_case.py
预期输出:
long-term memory real agent ok
验证方式
脚本把用户偏好预写入 InMemoryStore,再通过 /memories/user_preferences.txt 读取,断言路由和 namespace 生效。最后真实调用 Agent,让 Agent 读取这份长期记忆。
常见误区
别把所有文件都放 /memories/。只有跨会话还稳定有价值的信息才进长期记忆,临时草稿和工具输出放默认 backend 就够了。
相关资源
查看示例代码:deepagent_src/context_engineering_teach/06_long_term_memory_case.py
from __future__ import annotations 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 from _model import get_real_model from deepagent_src.agent_output import invoke_and_pretty_print MEMORY_PATH = "/memories/user_preferences.txt" ROUTED_STORE_KEY = "/user_preferences.txt" def main() -> None: store = InMemoryStore() store.put( ("deepagents-context", "u-123"), ROUTED_STORE_KEY, create_file_data("prefers short Chinese answers"), ) backend = CompositeBackend( default=StateBackend(), routes={ "/memories/": StoreBackend( store=store, namespace=lambda _rt: ("deepagents-context", "u-123"), ) }, ) agent = create_deep_agent( model=get_real_model(), store=store, backend=backend, system_prompt=( "Save stable user preferences under /memories/user_preferences.txt." ), ) stored_file = backend.download_files([MEMORY_PATH])[0] assert agent is not None assert stored_file.error is None assert stored_file.content is not None assert "short Chinese answers" in stored_file.content.decode("utf-8") result = invoke_and_pretty_print( agent, { "messages": [ { "role": "user", "content": ( "读取 /memories/user_preferences.txt," "然后用一句中文说出里面记录的偏好。" ), } ] } ) assert result["messages"][-1].content print("long-term memory real agent ok") if __name__ == "__main__": main()