短期记忆暂时存储最近的感知,它会接收一些感觉记忆,并且可以通过其他观察或检索的记忆来增强它以进入长期记忆。
在大多数情况下,短期记忆类似于LLM约束的上下文窗口内的输入信息。所以你可以认为短期记忆在大多数情况下都会被写入LLM的提示词中。
使用短期记忆
from dbgpt.agent import AgentMemory, ShortTermMemory
# Create an agent memory, which contains a short-term memory
memory = 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 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)
text2vec(local)
from dbgpt.rag.embedding import DefaultEmbeddingFactory
embeddings = DefaultEmbeddingFactory.default("/data/models/text2vec-large-chinese")
Embedding API Server(cluster)
如果你已经部署了DB-GPT集群模式和APIServer,你可以链接API server获取到embeddings
from dbgpt.rag.embedding import DefaultEmbeddingFactory
embeddings = DefaultEmbeddingFactory.remote(
api_url="http://localhost:8100/api/v1/embeddings",
api_key="{your_api_key}",
model_name="text2vec"
)
使用增强的短期记忆
from concurrent.futures import ThreadPoolExecutor
from dbgpt.agent import AgentMemory, EnhancedShortTermMemory
# Create an agent memory, which contains a short-term memory
memory = 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倍时,它将被转移到长期记忆中。
现在你可以在智能体中使用增强短期记忆了。