这种结构明确地模拟了人类短期和长期记忆。短期记忆暂时缓冲最近的感知,而长期记忆则随着时间的推移巩固重要信息。
例如,短期记忆包含有关智能体当前情况的上下文信息,而长期记忆则存储智能体过去的行为和想法,可以根据当前事件进行检索。
创建一个混合记忆
方法一、创建具有默认值的混合记忆
案例中使用OpenAI Embedding模型的API和ChromaStore作为默认值
import shutilfrom dbgpt.agent import HybridMemory, AgentMemory# Delete old vector store directory(/tmp/tmp_ltm_vector_stor)shutil.rmtree("/tmp/tmp_ltm_vector_store", ignore_errors=True)hybrid_memory = HybridMemory.from_chroma(vstore_name="agent_memory", vstore_path="/tmp/tmp_ltm_vector_store")agent_memory: AgentMemory = AgentMemory(memory=hybrid_memory)
方法二、通过自定义值的方式创建混合记忆
混合记忆需要查询感知记忆、短期记忆和长期记忆来进行创建
准备Embedding模型
你可以通过之前的教程准备Embedding模型。 Embedding模型准备, 如下是使用OpenAI Embedding模型的案例。
import osfrom dbgpt.rag.embedding import DefaultEmbeddingFactoryapi_url = os.getenv("OPENAI_API_BASE", "https://api.openai.com/v1") + "/embeddings"api_key = os.getenv("OPENAI_API_KEY")embeddings = DefaultEmbeddingFactory.openai(api_url=api_url, api_key=api_key)
准备向量存储
需要准备向量存储,如下是我们使用ChromaStore的一个案例
import shutilfrom dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig, ChromaStore# Delete old vector store directory(/tmp/tmp_ltm_vector_stor)shutil.rmtree("/tmp/tmp_ltm_vector_store", ignore_errors=True)vector_store = ChromaStore(ChromaVectorConfig(embedding_fn=embeddings,vector_store_config=ChromaVectorConfig(name="ltm_vector_store",persist_path="/tmp/tmp_ltm_vector_store",),))
创建混合记忆
from datetime import datetimefrom concurrent.futures import ThreadPoolExecutorfrom dbgpt.agent import (SensoryMemory,EnhancedShortTermMemory,LongTermMemory,HybridMemory,AgentMemory,)executor = ThreadPoolExecutor()sensor_memory = SensoryMemory(buffer_size=2)short_term_memory = EnhancedShortTermMemory(embeddings=embeddings,buffer_size=2,enhance_similarity_threshold=0.7,enhance_threshold=3,executor=executor,)long_term_memory = LongTermMemory(executor=ThreadPoolExecutor(), vector_store=vector_store, _default_importance=0.5)hybrid_memory = HybridMemory(now=datetime.now(),sensory_memory=sensor_memory,short_term_memory=short_term_memory,long_term_memory=long_term_memory,)agent_memory: AgentMemory = AgentMemory(memory=hybrid_memory)
方法三、从向量存储创建一个混合记忆
你也可以通过向量存储来创建混合记忆,它将使用感知记忆和短期记忆作为默认值。
from dbgpt.agent import HybridMemory, AgentMemoryhybrid_memory = HybridMemory.from_vstore(vector_store=vector_store, embeddings=embeddings)agent_memory: AgentMemory = AgentMemory(memory=hybrid_memory)
工作原理
当写入内存片段时:
- 混合记忆首先将记忆片段存储在感知记忆中,如果感知记忆已满,则会丢弃所有感知记忆片段,并将部分丢弃的记忆片段转移到短期记忆中。
- 短期记忆会接收一些感知记忆作为外部观察,短期记忆中的记忆片段可以通过其他观察得到增强。一些增强的记忆片段会被转移到长期记忆中,同时,这种增强的记忆会反映到长期记忆的更高层次的思想和见解中。
- 长期记忆将存储智能体的经验和知识。当它从短期记忆接收到记忆片段时,会计算记忆片段的重要性,然后写入向量存储中。
当读内存片段时
- 首先,混合记忆会根据观察结果从长期记忆中读取记忆片段。 长期记忆使用
<font style="color:rgb(24, 32, 38);">TimeWeightedEmbeddingRetriever</font>来检索记忆片段(最新的记忆片段具有更高的权重) - 检索到的记忆片段被保存到短期记忆中(只是为了增强记忆片段,而不是将新的记忆片段添加到短期记忆中)。检索到的记忆片段和所有记忆片段将被合并,作为LLM的当前记忆。 增强过程结束后,一些新的记忆片段将被转移到长期记忆中。
