Files

4.7 KiB
Raw Permalink Blame History

记忆(Memory)

对于智能体而言记忆是非常重要的一个组成部分,它让智能体能够记住发生过的事。在绝大部分对话与任务场景中,我们希望智能体能够结合历史信息进行解答与交流。

同人类的记忆一样,智能体的记忆可以简单分为下列两类:

  • 短期记忆Agent执行任务过程中的即时上下文信息暂时保存和操作有限数量的记忆信息
  • 长期记忆将Agent的上下文信息实时进行持久化始终保证提供长期的记忆信息

在这个定义过程中我们会发现,记忆除其本身的定义外,还会依赖如向量存储、快速检索等一些列技术。

此外,记忆除了上述提到的给智能体提供基于长短期上下文能力外,记忆还可提供非常多可观的作用。例如:通过对于记忆进行挖掘与处理,我们可以将记忆沉淀为经验知识;记忆可以记录与智能体的全部运行过程记录用户的“偏好”等等。

记忆架构

agentUniverse中记忆的整体架构图如下所示 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记忆存储领域组件将记忆的消息列表、智能体idagent_id、会话idsession_id、source记忆来源等信息进行多路存储。

目前agentUniverse内置ChromaDBSqlAlchemy本地内存三种记忆存储方式,用户可根据实际需求选择合适的记忆存储方式。

特别提醒在agent基类的pre_parse_input方法中aU会自动读取当前智能体配置的name,设置为agent_input中的agent_idsession_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中的第一个记忆存储组件根据智能体idagent_id、会话idsession_id、source记忆来源进行记忆检索。

ChromaDB可根据query进行向量检索 SqlAlchemy本地内存根据时间顺序条件过滤,检索出指定的记忆信息。

裁剪压缩记忆流程

在裁剪压缩记忆流程中,获取记忆实例中的max_tokens参数prompt中记忆的最大token数若检索记忆流程中获取的记忆信息超过最大token数则进行裁剪压缩。

获取记忆实例中配置的memory_compressor记忆压缩领域组件对裁剪的记忆进行压缩总结并合成满足token数限制的最终记忆信息。

总结

至此您已初步了解记忆的作用,在下一节我们将具体向您介绍记忆组件的标准定义、如何自定义创建记忆、如何使用记忆等。