长期记忆

在AgentScope中,我们为长期记忆提供了一个基础类(LongTermMemoryBase)以及一个基于mem0库的实现(Mem0LongTermMemory)。 结合Agent章节中ReActAgent类的设计,我们提供两种长期记忆模式:
  • agent_control:该智能体通过工具调用自主管理长期记忆,并且

  • static_control: 开发者显式控制长期记忆操作。

开发者也可以使用 both 模式,该模式会同时激活两个记忆管理模式。

提示

这些记忆模式适用于不同的使用场景。开发者可以根据需求选择适当的模式。

使用mem0长期记忆

注意

我们在GitHub仓库的examples/long_term_memory/mem0目录下提供了一个使用mem0长效记忆的示例。

import os
import asyncio

from agentscope.message import Msg
from agentscope.memory import InMemoryMemory
from agentscope.agent import ReActAgent
from agentscope.formatter import DashScopeChatFormatter
from agentscope.model import DashScopeChatModel
from agentscope.tool import Toolkit


# Create mem0 long-term memory instance
from agentscope.memory import Mem0LongTermMemory
from agentscope.embedding import DashScopeTextEmbedding


long_term_memory = Mem0LongTermMemory(
    agent_name="Friday",
    user_name="user_123",
    model=DashScopeChatModel(
        model_name="qwen-max-latest",
        api_key=os.environ.get("DASHSCOPE_API_KEY"),
        stream=False,
    ),
    embedding_model=DashScopeTextEmbedding(
        model_name="text-embedding-v2",
        api_key=os.environ.get("DASHSCOPE_API_KEY"),
    ),
    on_disk=False,
)

Mem0LongTermMemory 类为长期记忆操作提供了两个主要方法:recordretrieve。它们以信息列表作为输入,并从长期记忆中记录/检索信息。

例如,我们首先存储用户偏好,然后从长期记忆中检索相关信息。

# Basic usage example
async def basic_usage():
    """Basic usage example"""
    # Record memory
    await long_term_memory.record(
        [Msg("user", "I like staying in homestays", "user")],
    )

    # Retrieve memory
    results = await long_term_memory.retrieve(
        [Msg("user", "My accommodation preferences", "user")],
    )
    print(f"Retrieval results: {results}")


asyncio.run(basic_usage())
Retrieval results: Likes staying in homestays

与ReAct智能体集成

在AgentScope中,ReActAgent 类在其构造函数中接收一个 long_term_memory 参数,以及一个用于指定长期记忆模式的 long_term_memory_mode 参数。

如果long_term_memory_mode设置为agent_controlboth,两个 工具函数record_to_memoryretrieve_from_memory将会 注册到智能体的工具包中,使智能体能够通过工具调用 自主管理长期记忆。

注意

为实现最佳效果,"agent_control" 模式可能需要在系统提示中添加额外指导说明。

# Create ReAct agent with long-term memory
agent = ReActAgent(
    name="Friday",
    sys_prompt="You are an assistant with long-term memory capabilities.",
    model=DashScopeChatModel(
        api_key=os.environ.get("DASHSCOPE_API_KEY"),
        model_name="qwen-max-latest",
    ),
    formatter=DashScopeChatFormatter(),
    toolkit=Toolkit(),
    memory=InMemoryMemory(),
    long_term_memory=long_term_memory,
    long_term_memory_mode="static_control",  # Use static_control mode
)


async def record_preferences():
    """ReAct agent integration example"""
    # Conversation example
    msg = Msg(
        "user",
        "When I travel to Hangzhou, I like staying in homestays",
        "user",
    )
    await agent(msg)


asyncio.run(record_preferences())
Friday: Staying in homestays can be a wonderful way to experience the local culture and lifestyle when you travel. Homestays often provide a more personal and immersive environment compared to hotels, allowing you to connect with locals and gain deeper insights into the area's customs and traditions. If you enjoy a cozy and homey atmosphere with personalized touches, homestays are definitely a great choice for your trips to Hangzhou.

接着我们清理短期记忆,并向智能体询问用户的偏好。

async def retrieve_preferences():
    """Retrieve user preferences from long-term memory"""
    # Clear short-term memory
    await agent.memory.clear()
    # The agent will remember previous conversations
    msg2 = Msg("user", "What are my preferences? Answer briefly.", "user")
    await agent(msg2)


asyncio.run(retrieve_preferences())
Friday: You prefer staying in homestays when traveling to Hangzhou.

定制长效记忆

AgentScope提供了LongTermMemoryBase基类,它定义了基础

开发者可以通过继承LongTermMemoryBase来实现自定义的长时记忆系统:

AgentScope中的长期记忆类

抽象方法

描述

长时记忆基础

record
retrieve
record_to_memory
retrieve_from_memory
  • 对于"static_control"模式,你必须实现recordretrieve方法。

  • 对于 "agent_control" 模式,必须实现 record_to_memoryretrieve_from_memory 方法。

Mem0LongTermMemory

-

基于mem0库的长时记忆实现,支持向量存储与检索。

扩展阅读

脚本总运行时间: (0分31.247秒)

Gallery generated by Sphinx-Gallery