短期记忆暂时存储最近的感知,它会接收一些感觉记忆,并且可以通过其他观察或检索的记忆来增强它以进入长期记忆。
在大多数情况下,短期记忆类似于LLM约束的上下文窗口内的输入信息。所以你可以认为短期记忆在大多数情况下都会被写入LLM的提示词中。
使用短期记忆
from dbgpt.agent import AgentMemory, ShortTermMemory# Create an agent memory, which contains a short-term memorymemory = ShortTermMemory(buffer_size=2)agent_memory: AgentMemory = AgentMemory(memory=memory)
跟感知记忆一样,短期记忆也有buffer size,当buffer满时,将保留最新的`buffer_size` 记忆,并且一些被丢弃的记忆将被转移到长期记忆中。
默认的短期记忆是FIFO记忆,这里暂不做详细介绍。
短期记忆增强
与人类短期记忆一样,DB-GPT智能体的短期记忆可以通过外部观察来增强。 这里我们介绍一种增强短期记忆,称为EnhancedShortTermMemory 你需要提供一个Embedding嵌入模型。
准备Embedding模型
DB-GPT支持许多的Embedding模型,此处是其中一些展示
OpenAI(API)
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)
text2vec(local)
from dbgpt.rag.embedding import DefaultEmbeddingFactoryembeddings = DefaultEmbeddingFactory.default("/data/models/text2vec-large-chinese")
Embedding API Server(cluster)
如果你已经部署了DB-GPT集群模式和APIServer,你可以链接API server获取到embeddings
from dbgpt.rag.embedding import DefaultEmbeddingFactoryembeddings = DefaultEmbeddingFactory.remote(api_url="http://localhost:8100/api/v1/embeddings",api_key="{your_api_key}",model_name="text2vec")
使用增强的短期记忆
from concurrent.futures import ThreadPoolExecutorfrom dbgpt.agent import AgentMemory, EnhancedShortTermMemory# Create an agent memory, which contains a short-term memorymemory = EnhancedShortTermMemory(embeddings=embeddings,buffer_size=2,enhance_similarity_threshold=0.5,enhance_threshold=3,executor=ThreadPoolExecutor(),)agent_memory: AgentMemory = AgentMemory(memory=memory)
在DB-GPT中,核心接口是异步非阻塞的,因此我们使用ThreadPoolExecutor在单独的线程中运行相似度计算以获得更好的性能。
在上面的代码中,我们将enhance_similarity_threshold设置为0.5,这意味着如果相似度大于0.7,则新的观察有可能被增强到短期记忆(增强过程中有随机因素)。我们将enhance_threshold设置为3,这意味着如果记忆增强大于等于3倍时,它将被转移到长期记忆中。
现在你可以在智能体中使用增强短期记忆了。
