本页目录
Context EngineeringNote 22

06 综合案例:长期记忆

它是什么

它是什么

Long-term memory 用 CompositeBackend/memories/ 路由到 LangGraph Store,让信息跨 thread、跨会话保留。它解决的问题是:用户偏好、长期项目事实、研究进度不该只活在当前 thread 的 state 里。普通工作文件仍可以留在 StateBackendFilesystemBackend,别全塞进长期存储。

最小代码

文件: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()