这种结构明确地模拟了人类短期和长期记忆。短期记忆暂时缓冲最近的感知,而长期记忆则随着时间的推移巩固重要信息。
例如,短期记忆包含有关智能体当前情况的上下文信息,而长期记忆则存储智能体过去的行为和想法,可以根据当前事件进行检索。
创建一个混合记忆
方法一、创建具有默认值的混合记忆
案例中使用OpenAI Embedding模型的API和ChromaStore作为默认值
import shutil
from 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 os
from dbgpt.rag.embedding import DefaultEmbeddingFactory
api_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 shutil
from 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 datetime
from concurrent.futures import ThreadPoolExecutor
from 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, AgentMemory
hybrid_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的当前记忆。 增强过程结束后,一些新的记忆片段将被转移到长期记忆中。