MetaGPT中的Brain Memory系统为代理提供了长期存储和记忆管理能力。它处理对话历史存储、知识保留、自动记忆摘要以及使用Redis进行的持久化存储。该系统使代理能够在交互过程中保持上下文,回忆相关信息,并通过智能摘要优化内存使用。
有关Experience Pooling(一种用于缓存函数输出的独立记忆系统)的信息,请参阅Experience Pooling。
BrainMemory是主要由Assistant角色使用的核心记忆组件,用于存储对话历史、相关知识并生成过去交互的摘要。
来源:metagpt/memory/brain_memory.py26-259 metagpt/roles/assistant.py37-45
BrainMemory类由几个关键组件组成,它们协同工作以提供一个全面的记忆系统。
| 组件 | 类型 | 目的 |
|---|---|---|
history | List[Message] | 存储最近的对话消息 |
knowledge | List[Message] | 存储代理可用的知识/事实 |
historical_summary | str | 早期对话历史的压缩摘要 |
last_history_id | str | 最新消息的ID |
is_dirty | bool | 指示自上次保存以来内存是否已被修改的标志 |
last_talk | Optional[str] | 最近的用户消息 |
cacheable | bool | 内存是否应缓存在Redis中 |
llm | Optional[BaseLLM] | 用于摘要和其他操作的LLM实例 |
config | Optional[_Config] | 配置设置 |
来源:metagpt/memory/brain_memory.py26-36
下图说明了消息如何通过BrainMemory系统进行流动,包括添加消息、摘要和持久化的过程。
来源:metagpt/memory/brain_memory.py45-110 metagpt/roles/assistant.py118-130
BrainMemory提供了添加和管理不同类型消息的方法。
消息通过两种主要方法添加到内存中:
add_talk(msg):添加用户消息,将角色设置为“user”。add_answer(msg):添加助手消息,将角色设置为“assistant”。这两种方法都调用add_history(msg),该方法会:
is_dirty标志设置为True。来源:metagpt/memory/brain_memory.py45-57 metagpt/memory/brain_memory.py103-110
The knowledge 属性存储代理可用的信息。get_knowledge() 方法将所有知识消息合并为一个文本块。
此知识文本用于LLM的提示中,以提供响应的上下文。
来源:metagpt/memory/brain_memory.py59-61
BrainMemory使用Redis对内存数据进行持久化存储。
内存使用dumps方法保存到Redis。
内存使用loads方法从Redis加载。
Redis中的键使用to_redis_key方法进行格式化。
来源:metagpt/memory/brain_memory.py63-89 metagpt/utils/redis.py19-63
BrainMemory通过摘要技术实现了复杂的记忆优化。
该系统支持基于LLM提供商的不同摘要方法:
摘要过程:
来源:metagpt/memory/brain_memory.py130-344
BrainMemory包含文本的语义分析能力。
The is_related 方法确定两个文本是否在语义上相关。
对于OpenAI模型,它使用结构化提示询问两个段落是否在语义上相关。
The rewrite 方法使用上下文中的信息来增强句子。
对于OpenAI模型,它构建了一个提示,要求LLM使用上下文来增强句子。
来源:metagpt/memory/brain_memory.py198-246
Assistant角色使用BrainMemory来管理对话上下文并生成响应。
关键集成点
添加用户输入:Assistant的talk方法将用户消息添加到内存中。
内存优化:refine_memory方法:
生成响应:act方法:
加载和保存内存:get_memory和load_memory方法用于在会话之间持久化内存。
来源:metagpt/roles/assistant.py36-140 metagpt/actions/talk_action.py16-96
TalkAction利用BrainMemory的历史和知识为LLM响应提供上下文。
来源:metagpt/actions/talk_action.py74-90
Brain Memory系统是MetaGPT的一个复杂组件,它为会话代理提供了智能记忆管理。它平衡了即时上下文(近期历史)与压缩上下文(历史摘要)和相关知识,以实现自然、上下文感知的交互。它与Redis的集成允许持久化存储,而其摘要和语义分析能力则优化了内存使用并增强了响应的相关性。
该系统展示了MetaGPT在长期会话中保持上下文并同时高效管理内存的解决方案。