注意
Go to the end 下载完整示例代码。
长期记忆¶
在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 类为长期记忆操作提供了两个主要方法:record 和 retrieve。它们以信息列表作为输入,并从长期记忆中记录/检索信息。
例如,我们首先存储用户偏好,然后从长期记忆中检索相关信息。
# 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_control或both,两个
工具函数record_to_memory和retrieve_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来实现自定义的长时记忆系统:
类 |
抽象方法 |
描述 |
|---|---|---|
|
recordretrieverecord_to_memoryretrieve_from_memory |
|
|
- |
基于mem0库的长时记忆实现,支持向量存储与检索。 |
扩展阅读¶
脚本总运行时间: (0分31.247秒)