Skip to main content

概述

LangChain 代理使用 LangGraph 持久化 来实现长期记忆。这是一个更高级的主题,需要具备 LangGraph 的相关知识。

内存存储

LangGraph 将长期记忆存储为 存储 中的 JSON 文档。 每个记忆都组织在一个自定义的 命名空间(类似于文件夹)和一个独特的 (类似于文件名)下。命名空间通常包括用户或组织 ID 或其他便于组织信息的标签。 这种结构支持记忆的分层组织。通过内容过滤器支持跨命名空间的搜索。
from langgraph.store.memory import InMemoryStore


def embed(texts: list[str]) -> list[list[float]]:
    # 替换为实际的嵌入函数或 LangChain 嵌入对象
    return [[1.0, 2.0] * len(texts)]


# InMemoryStore 将数据保存到内存字典中。在生产环境中使用基于数据库的存储。
store = InMemoryStore(index={"embed": embed, "dims": 2})
user_id = "my-user"
application_context = "chitchat"
namespace = (user_id, application_context)
store.put(
    namespace,
    "a-memory",
    {
        "rules": [
            "用户喜欢简短、直接的语言",
            "用户只会说英语和 Python",
        ],
        "my-key": "my-value",
    },
)
# 通过 ID 获取“记忆”
item = store.get(namespace, "a-memory")
# 在此命名空间内搜索“记忆”,通过内容等价性过滤,并按向量相似性排序
items = store.search(
    namespace, filter={"my-key": "my-value"}, query="语言偏好"
)