跳到内容

后台快速入门指南

记忆可以通过两种方式创建

  1. 在热路径中:智能体有意识地使用工具保存笔记(请参阅热路径快速入门)。
  2. 👉在后台(本指南):记忆从对话中“下意识地”自动提取。

Hot Path Quickstart Diagram

本指南将向您展示如何使用 create_memory_store_manager 在后台提取和整合记忆。当记忆在后台处理时,智能体将正常继续运行。

先决条件

首先,安装 LangMem

pip install -U langmem

使用您喜欢的LLM提供商的API密钥配置您的环境

export ANTHROPIC_API_KEY="sk-..."  # Or another supported LLM provider

基本用法

API:init_chat_model | entrypoint | ReflectionExecutor | create_memory_store_manager

from langchain.chat_models import init_chat_model
from langgraph.func import entrypoint
from langgraph.store.memory import InMemoryStore

from langmem import ReflectionExecutor, create_memory_store_manager

store = InMemoryStore( # (1)!
    index={
        "dims": 1536,
        "embed": "openai:text-embedding-3-small",
    }
)  
llm = init_chat_model("anthropic:claude-3-5-sonnet-latest")

# Create memory manager Runnable to extract memories from conversations
memory_manager = create_memory_store_manager(
    "anthropic:claude-3-5-sonnet-latest",
    # Store memories in the "memories" namespace (aka directory)
    namespace=("memories",),  # (2)!
)

@entrypoint(store=store)  # Create a LangGraph workflow
async def chat(message: str):
    response = llm.invoke(message)

    # memory_manager extracts memories from conversation history
    # We'll provide it in OpenAI's message format
    to_process = {"messages": [{"role": "user", "content": message}] + [response]}
    await memory_manager.ainvoke(to_process)  # (3)!
    return response.content
# Run conversation as normal
response = await chat.ainvoke(
    "I like dogs. My dog's name is Fido.",
)
print(response)
# Output: That's nice! Dogs make wonderful companions. Fido is a classic dog name. What kind of dog is Fido?
  1. 什么是 store?它是一个可以添加向量搜索的文档存储。顾名思义,“InMemoryStore”是保存在内存中且非持久化的。

    用于生产环境

    使用像 AsyncPostgresStore 这样的持久化存储来代替 InMemoryStore,以在重启之间保持数据。

  2. namespace 参数允许您隔离存储和检索的记忆。在此示例中,我们将记忆存储在全局的 "memories" 路径下,但您也可以使用模板变量,根据配置将其范围限定到用户特定的路径。有关更多信息,请参阅如何动态配置命名空间

  3. 我们使用记忆管理器在每次新消息到达时处理对话。有关更高效的处理模式,以帮助您进行去抖动(即避免冗余)操作,请参阅延迟记忆处理。如果您不需要后台处理,也可以直接使用 memory_manager.process(messages) 来处理记忆。

如果您想查看已提取的记忆,可以搜索存储

# (in case our memory manager is still running)
print(store.search(("memories",)))
# [
#     Item(
#         namespace=["memories"],
#         key="0145905e-2b78-4675-9a54-4cb13099bd0b",
#         value={"kind": "Memory", "content": {"content": "User likes dogs as pets"}},
#         created_at="2025-02-06T18:54:32.568595+00:00",
#         updated_at="2025-02-06T18:54:32.568596+00:00",
#         score=None,
#     ),
#     Item(
#         namespace=["memories"],
#         key="19cc4024-999a-4380-95b1-bb9dddc22d22",
#         value={"kind": "Memory", "content": {"content": "User has a dog named Fido"}},
#         created_at="2025-02-06T18:54:32.568680+00:00",
#         updated_at="2025-02-06T18:54:32.568682+00:00",
#         score=None,
#     ),
# ]

为了更高效的处理

💡 对于活跃的对话,处理每一条消息可能会成本很高。请参阅延迟记忆处理,了解如何在对话活动平息后再进行处理。

下一步

评论