4.7 KiB
记忆(Memory)
对于智能体而言记忆是非常重要的一个组成部分,它让智能体能够记住发生过的事。在绝大部分对话与任务场景中,我们希望智能体能够结合历史信息进行解答与交流。
同人类的记忆一样,智能体的记忆可以简单分为下列两类:
- 短期记忆:Agent执行任务过程中的即时上下文信息,暂时保存和操作有限数量的记忆信息
- 长期记忆:将Agent的上下文信息实时进行持久化,始终保证提供长期的记忆信息
在这个定义过程中我们会发现,记忆除其本身的定义外,还会依赖如向量存储、快速检索等一些列技术。
此外,记忆除了上述提到的给智能体提供基于长短期上下文能力外,记忆还可提供非常多可观的作用。例如:通过对于记忆进行挖掘与处理,我们可以将记忆沉淀为经验知识;记忆可以记录与智能体的全部运行过程记录用户的“偏好”等等。
记忆架构
agentUniverse中,记忆的整体架构图如下所示:
包含多智能体记忆传递、添加记忆、检索记忆、裁剪压缩记忆流程。
多智能体记忆传递流程
在多智能体记忆传递流程中,以chat_history参数为入口,将智能体A的特定记忆信息携带source(来源Agent A)标签,传递给智能体B,智能体B参照aU agent基础类中的process_memory方法,读取chat_history携带的记忆信息,并添加到智能体B对应的记忆中。
多智能体记忆传递代码示例
在智能体A运行时,传递特定记忆信息给到智能体B,具体应用案例可参照aU sample工程中的多轮多Agent讨论小组。
from typing import List
from agentuniverse.agent.agent import Agent
from agentuniverse.agent.memory.message import Message
from agentuniverse.agent.agent_manager import AgentManager
memory_messages: List[Message] = [Message(content='你好,我是智能体A,很高兴认识你', source='agent_a')]
agent_b: Agent = AgentManager().get_instance_obj('agent_b')
agent_b.run({'chat_history': memory_messages})
添加记忆流程
在添加记忆流程中,获取记忆实例中配置的多个memory_storage(记忆存储)领域组件,将记忆的消息列表、智能体id(agent_id)、会话id(session_id)、source(记忆来源)等信息,进行多路存储。
目前agentUniverse内置ChromaDB 、SqlAlchemy、本地内存三种记忆存储方式,用户可根据实际需求选择合适的记忆存储方式。
特别提醒:在agent基类的pre_parse_input方法中,aU会自动读取当前智能体配置的name,设置为agent_input中的agent_id;session_id需用户执行智能体时传入。 记忆流程可以使用agent_input解析的参数作为入参。
def pre_parse_input(self, input_object) -> dict:
agent_input = dict()
# Omitted code
agent_input['agent_id'] = self.agent_model.info.get('name', '')
agent_input['session_id'] = input_object.get_data('session_id') or ''
# Omitted code
return agent_input
检索记忆流程
在检索记忆流程中,获取记忆实例中配置的memory_retrieval_storage领域组件(若用户未配置,默认使用memory_storages中的第一个记忆存储组件),根据智能体id(agent_id)、会话id(session_id)、source(记忆来源),进行记忆检索。
ChromaDB可根据query进行向量检索, SqlAlchemy、本地内存根据时间顺序条件过滤,检索出指定的记忆信息。
裁剪压缩记忆流程
在裁剪压缩记忆流程中,获取记忆实例中的max_tokens参数(prompt中记忆的最大token数),若检索记忆流程中获取的记忆信息超过最大token数,则进行裁剪压缩。
获取记忆实例中配置的memory_compressor(记忆压缩)领域组件,对裁剪的记忆进行压缩总结,并合成满足token数限制的最终记忆信息。
总结
至此您已初步了解记忆的作用,在下一节我们将具体向您介绍记忆组件的标准定义、如何自定义创建记忆、如何使用记忆等。