Files

5.2 KiB
Raw Permalink Blame History

如何定义记忆Memory组件

根据agentUniverse领域组件的设计特性同其他组件一样创建一个记忆memory定义由2部分组成:

  • xx_memory.yaml
  • xx_memory.py

xx_memory.yaml包含了memory组件的名称、描述、类型、记忆压缩器、记忆存储器等重要信息xx_memory.py包含了记忆的具体定义。理解这一原理后让我们具体看看该如何创建这两部分内容。

如何使用记忆Memory组件

创建记忆配置 - xx_memory.yaml

一个记忆定义配置的实际样例

name: 'demo_memory'
description: 'demo memory with multiple storages'
memory_key: 'chat_history'
max_tokens: 3000
memory_compressor: default_memory_compressor
memory_storages:
  - chroma_memory_storage
  - mysql_memory_storage
memory_retrieval_storage: chroma_memory_storage
metadata:
  type: 'MEMORY'
  module: 'agentuniverse.agent.memory.memory'
  class: 'Memory'
  • name: 记忆组件的名称
  • description: 记忆组件的描述
  • memory_key: 记忆组件的key对应agent智能体的prompt中的记忆变量名称
  • max_tokens: 记忆信息在prompt中的token上限超过该上限时memory组件会自动进行压缩
  • memory_compressor: 记忆组件的压缩器,用于对记忆进行压缩
  • memory_storages: 记忆组件的存储器列表用于对记忆进行多路存储若用户未配置默认使用ram_memory_storage本地内存存储器
  • memory_retrieval_storage: 记忆组件的存储检索器代表记忆的检索源若用户未配置默认使用memory_storages中的第一个记忆存储组件
  • metadata: 记忆组件的元数据,用于标识记忆组件的类型、模块和类名

aU sample工程中包含demo记忆配置样例: demo_memory 挂载chroma存储器的记忆示例

创建Memory领域行为定义 - xx_memory.py

agentUniverse提供了一个标准的Memory类您可以直接在yaml定义文件中使用该类或是继承它并改写其中的部分方法。

Memory类的定义:

  • add(self, message_list: List[Message], session_id: str = '', agent_id: str = '', **kwargs) -> None:
    添加记忆,获取记忆实例中配置的多个memory_storage 记忆存储领域组件将记忆的消息列表、智能体idagent_id、会话idsession_id、source记忆来源等信息进行多路存储。
  • delete(self, session_id: str = None, **kwargs) -> None:
    删除记忆,获取记忆实例中配置的多个memory_storage记忆存储领域组件根据会话idsession_id条件过滤进行多路删除。
  • get(self, session_id: str = '', agent_id: str = '', **kwargs) -> List[Message]:
    记忆检索,获取记忆实例中配置的memory_retrieval_storage领域组件(若用户未配置,默认使用memory_storages 中的第一个记忆存储组件根据智能体idagent_id、会话idsession_id、source记忆来源进行记忆检索。
  • prune(self, memories: List[Message]) -> List[Message]:
    记忆裁剪压缩,获取记忆实例中配置的max_tokens参数prompt中记忆的最大token数memory_compressor 记忆压缩领域组件若检索记忆流程中获取的记忆信息超过最大token数则进行裁剪压缩。

在Agent中配置使用

您可以根据智能体创建与使用中的内容在agent的memory中设置您的memory实例。如上文中创建的demo_memory实例在agent中您可以这样设置

info:
  name: 'demo_agent'
  description: 'demo agent'
# omitted part
memory:
  name: 'demo_memory'
# omitted part

案例

例如在PEER工作模式下将aU sample工程中的demo_planning_agent/demo_expressing_agent/demo_peer_agent三个智能体配置上文中创建的demo_memory实例执行一次peer调用时传入的session_idpeer_1调用完成后查看memory的存储内容如下

mysql_memory_storage

mysql_memory

chroma_memory_storage

chroma_memory

使用Memory管理器

通过Memory管理器中的.get_instance_obj(xx_memory_name) 方法可以获取对应名称的Memory内容。

from agentuniverse.agent.memory.memory_manager import MemoryManager

memory_name = 'xxx'
memory = MemoryManager().get_instance_obj(component_instance_name=memory_name)

总结

至此您已经掌握了记忆Memory的基本使用方法具体memory_compressormemory_storage领域组件内容可查阅MemoryCompressor文档MemoryStorage文档

赶快去尝试使用Memory吧。