这种结构明确地模拟了人类短期和长期记忆。短期记忆暂时缓冲最近的感知,而长期记忆则随着时间的推移巩固重要信息。

例如,短期记忆包含有关智能体当前情况的上下文信息,而长期记忆则存储智能体过去的行为和想法,可以根据当前事件进行检索。

创建一个混合记忆

方法一、创建具有默认值的混合记忆

案例中使用OpenAI Embedding模型的API和ChromaStore作为默认值

  1. import shutil
  2. from dbgpt.agent import HybridMemory, AgentMemory
  3. # Delete old vector store directory(/tmp/tmp_ltm_vector_stor)
  4. shutil.rmtree("/tmp/tmp_ltm_vector_store", ignore_errors=True)
  5. hybrid_memory = HybridMemory.from_chroma(
  6. vstore_name="agent_memory", vstore_path="/tmp/tmp_ltm_vector_store"
  7. )
  8. agent_memory: AgentMemory = AgentMemory(memory=hybrid_memory)

方法二、通过自定义值的方式创建混合记忆

混合记忆需要查询感知记忆、短期记忆和长期记忆来进行创建

准备Embedding模型

你可以通过之前的教程准备Embedding模型。 Embedding模型准备, 如下是使用OpenAI Embedding模型的案例。

  1. import os
  2. from dbgpt.rag.embedding import DefaultEmbeddingFactory
  3. api_url = os.getenv("OPENAI_API_BASE", "https://api.openai.com/v1") + "/embeddings"
  4. api_key = os.getenv("OPENAI_API_KEY")
  5. embeddings = DefaultEmbeddingFactory.openai(api_url=api_url, api_key=api_key)

准备向量存储

需要准备向量存储,如下是我们使用ChromaStore的一个案例

  1. import shutil
  2. from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig, ChromaStore
  3. # Delete old vector store directory(/tmp/tmp_ltm_vector_stor)
  4. shutil.rmtree("/tmp/tmp_ltm_vector_store", ignore_errors=True)
  5. vector_store = ChromaStore(
  6. ChromaVectorConfig(
  7. embedding_fn=embeddings,
  8. vector_store_config=ChromaVectorConfig(
  9. name="ltm_vector_store",
  10. persist_path="/tmp/tmp_ltm_vector_store",
  11. ),
  12. )
  13. )

创建混合记忆

  1. from datetime import datetime
  2. from concurrent.futures import ThreadPoolExecutor
  3. from dbgpt.agent import (
  4. SensoryMemory,
  5. EnhancedShortTermMemory,
  6. LongTermMemory,
  7. HybridMemory,
  8. AgentMemory,
  9. )
  10. executor = ThreadPoolExecutor()
  11. sensor_memory = SensoryMemory(buffer_size=2)
  12. short_term_memory = EnhancedShortTermMemory(
  13. embeddings=embeddings,
  14. buffer_size=2,
  15. enhance_similarity_threshold=0.7,
  16. enhance_threshold=3,
  17. executor=executor,
  18. )
  19. long_term_memory = LongTermMemory(
  20. executor=ThreadPoolExecutor(), vector_store=vector_store, _default_importance=0.5
  21. )
  22. hybrid_memory = HybridMemory(
  23. now=datetime.now(),
  24. sensory_memory=sensor_memory,
  25. short_term_memory=short_term_memory,
  26. long_term_memory=long_term_memory,
  27. )
  28. agent_memory: AgentMemory = AgentMemory(memory=hybrid_memory)

方法三、从向量存储创建一个混合记忆

你也可以通过向量存储来创建混合记忆,它将使用感知记忆和短期记忆作为默认值。

  1. from dbgpt.agent import HybridMemory, AgentMemory
  2. hybrid_memory = HybridMemory.from_vstore(
  3. vector_store=vector_store, embeddings=embeddings
  4. )
  5. agent_memory: AgentMemory = AgentMemory(memory=hybrid_memory)

工作原理

当写入内存片段时:

  1. 混合记忆首先将记忆片段存储在感知记忆中,如果感知记忆已满,则会丢弃所有感知记忆片段,并将部分丢弃的记忆片段转移到短期记忆中。
  2. 短期记忆会接收一些感知记忆作为外部观察,短期记忆中的记忆片段可以通过其他观察得到增强。一些增强的记忆片段会被转移到长期记忆中,同时,这种增强的记忆会反映到长期记忆的更高层次的思想和见解中。
  3. 长期记忆将存储智能体的经验和知识。当它从短期记忆接收到记忆片段时,会计算记忆片段的重要性,然后写入向量存储中。

当读内存片段时

  1. 首先,混合记忆会根据观察结果从长期记忆中读取记忆片段。 长期记忆使用<font style="color:rgb(24, 32, 38);">TimeWeightedEmbeddingRetriever</font>来检索记忆片段(最新的记忆片段具有更高的权重)
  2. 检索到的记忆片段被保存到短期记忆中(只是为了增强记忆片段,而不是将新的记忆片段添加到短期记忆中)。检索到的记忆片段和所有记忆片段将被合并,作为LLM的当前记忆。 增强过程结束后,一些新的记忆片段将被转移到长期记忆中。