日度归档:2024年12月26日

我对智能体记忆能力的设计(初版)

软件工程师罗小东,多年架构和平台设计经验,目前在研究平台与新技术结合中。

此为当前设计及往下编码的手稿方向,为临时记录,避免后期遗忘

术语

这里定义智能体记忆与知识库的区别:

  • 智能体记忆:存储智能体个人经历和学习到的信息,帮助它根据过去的经验做出决策。记忆是动态的,可以随时间更新或遗忘。
  • 知识库:包含结构化的通用知识和规则,提供给智能体或其他系统查询使用。知识库内容较为静态,旨在为决策提供支持,不直接参与学习过程。

输入输出架构

目前AIP的集成的智能体模型,包括配置的Prompt模板也以下面的模型为基础框架,如下:

用户输入(input) ---> [智能体角色设置(prompt) +
                    智能体记忆(memory) +
                    智能体思考(think) +
                    大模型推理(inference) +
                    工具行为(tool and action) +
                    外部知识库(knowledge) ] ---> 智能体输出(output)

基于上面的智能体模型,对智能体记忆模块进行重构设计,使得更符合真实场景,以下为设计思路。

记忆能力场景

为了能更方便的进行智能体角色的复制转移,这里将涉及到智能体本身关联的信息分为感知记忆、关联记忆、临时记忆、短期记忆、长期记忆、静态记忆等。

  • 感知记忆(perceptual): 短暂存储通过世界接收到的信息,如视觉或听觉刺激,持续的时间并不长。
  • 对话记忆(conversation): 记录交流互动的内容,包括言语、语气和情感状态,支持上下文相关的对话理解。
  • [重点]观察记忆(observation): 通过分析对话记录形成的记忆,帮助记住物体的位置、动作序列和社会行为规则。
  • [重点]反思记忆(insight): 涉及从观察中获得的深刻理解和顿悟,指导未来的决策和行为。
  • [重点]长期记忆(longterm): 能够长时间保留信息的记忆,涵盖事实性知识技能和经验,具有较大的容量和持久性。

以下为应用架构的设计,包括推理服务与记忆模块的集成设计:

+-------------------+       +---------------------+       +---------------------+       +-----------------+
|                   |       |                     |       |                     |       |                 |
|   专家服务         |       | 搜索记忆服务          |       | 大模型推理           |       | 向量数据库        |
|   (expert)         |-----> | (search-memory)      |-----> | (inference)          |-----> | (pgvector)       |
|                   |       |                     |       |                     |       |                 |
|   输入:            |       |                     |       |                     |       | 存储记忆与推理结果|
|   - 事件聊天记录   |       | 功能:                |       | 功能:                |       |                 |
|   - 角色知识       |       | - 搜索相关记忆        |       | - 基于记忆进行推理    |       |                 |
|                   |       | - 返回匹配的记忆项    |       | - 生成新的记忆或更新 |       |                 |
+-------------------+       +---------------------+       +---------------------+       +-----------------+

+-------------------+       +---------------------+       +---------------------+       +-----------------+
|                   |       |                     |       |                     |       |                 |
|   数据资产         |       | 搜索记忆服务          |       | 大模型推理           |       | 向量数据库        |
|   (asset)          |-----> | (search-memory)      |-----> | (inference)          |-----> | (pgvector)       |
|                   |       |                     |       |                     |       |                 |
|   输入:            |       |                     |       |                     |       | 存储记忆与推理结果|
|   - 外部知识库     |       | 功能:                |       | 功能:                |       |                 |
|   - 世界环境       |       | - 搜索相关记忆        |       | - 基于记忆进行推理    |       |                 |
|                   |       | - 返回匹配的记忆项    |       | - 生成新的记忆或更新 |       |                 |
+-------------------+       +---------------------+       +---------------------+       +-----------------+

上面有三个平台结合:

  • 专家服务: 定义Prompt工程还有角色的平台,提供对应的IM交互平台
  • 记忆服务: 用于数据保存还有记忆保存的平台,还有RAG,ReRank等
  • 资产服务: 针对不同的场景并通过DataOps流程出来的数据内容

待补充平台图片

为了更好的设定智能体的角色,同时更方便理解,按以下流程进行描述设计思路,也方便阐述:

  • 记忆采集: 数据采集方式和使用的技术方式
  • 记忆处理: 当中推理处理的过程及输出、保存到向量数据库的过程
  • 记忆查询: 角色在调用过程中针对不同的场景查询过程

当前的设计为总体的方向设计,后期会进一步进行优化处理,但是整体的设计不变,会不断优化过程,每个设计师思路不一,我有我思,期望有兴趣的同学一起交流学习。

记忆处理设计

这里是设计的整体细节。

记忆采集

数据采集之前需要先设计记忆模型,便于了解需要采集哪些数据项,这里的模型参考MemoryScope项目的模型,以下为模型实体类,以下模型会由LLM形成树或者图关系,通过向量库形成初步记忆能力。

数据模型

待补充架构图

MemoryNode 类字段说明

  • memoryId:记忆节点的唯一标识符,使用UUID生成。用于区分不同的记忆记录。
  • userName:表示记忆所属的用户名称。
  • targetName:记忆的目标或对象名称,可能是指特定的人物、事物或事件。
  • metaData:用于存储记忆的相关信息的映射表,如时间、地点等附加信息。
  • content:记忆的内容文本。
  • vector:记忆的向量表示,可能与keyVector有区别,具体视业务逻辑而定。
  • key:记忆的键,可以存在多个键,具体作用视业务逻辑而定。
  • keyVector:记忆的向量表示,主要用于向量搜索和相似度计算。
  • value:记忆的值,与键(key)相对应,存储具体的记忆数据。
  • memoryType:记忆的类型,用于分类记忆。
  • actionStatus:记忆的当前动作状态,默认为”none”,其他可能的状态包括 “new”, “content_modified”, “modified”, “deleted”。
  • storeStatus:记忆的存储状态,默认为”valid”,表示记忆是否有效或已被删除等。
  • timestampGenerator:静态的时间戳生成器,用于为每个记忆节点分配唯一的时间戳,确保在系统中是唯一的。
  • timestamp:记忆节点的时间戳,由timestampGenerator生成,确保每个记忆节点的时间戳唯一。
  • dt:记忆的日期时间字符串,格式为”yyyy-MM-dd”,便于按日期查询记忆。
  • obsReflected:观察到的记忆被反射次数,用于记录记忆被引用或重现的频率。
  • obsUpdated:观察到的记忆被更新次数,用于记录记忆内容被修改的频率。
  • latitude:位置的纬度坐标。
  • longitude:位置的经度坐标。
  • scoreRecall:记忆的召回分数,用于衡量记忆被检索出来的可能性。
  • scoreRank:记忆的排序分数,用于对记忆进行排序时参考。
  • scoreRerank:记忆的重排序分数,在某些情况下用于重新调整记忆的顺序。

重点说提到几个字段:

  • key: 会存在多个key实体信息,用于关联查询出涉及到当前key其它记忆信息,对key向量化,key相对于实体信息来说,将不同事件或信息片段链接起来的记忆,支持模式识别和因果关系的理解。(比如通过A关联到A以前相关的信息)

模型放到一张数据表中,便于后期的记忆数据迁移还有模型的复制。

采集数据

采集数据从几个方面的采集,主要包括聊天消息记录的采集,角色设定的采集,外部知识库的采集等。

  1. 感知数据:主要从数据资产中采集到数据,同步给智能体,并针对于当前环境的感知情况,生成新的记忆,并保存到向量数据库中,通过时间来做一定的聚合限制。
  2. 对话记忆: 采集方式通过聊天Event事件的形式,进行推理处理,每个事件会生成一个MemoryNode实体,最终生成新的记忆,并保存到向量数据库中。
  3. 观察记忆: 通过对话记忆的进一步提取,然后获取到最新的信息,形成新的记忆,并保存到向量数据库中。
  4. 反思记忆: 定时任务形式的通过一段时间的观察记忆进行提取和总结,生成新的记忆能力,确保记忆片段不矛盾和重复
  5. 长期记忆:通过数据资产提供技术知识能力,获取到最新的记忆,包括更新前期的记忆生成新的记忆,并保存到向量数据库中。

待补充架构图

以下为主要的两个采集说明,一个是对话,还有长期记忆。

  1. [会话]对话方式临时的数据会先保存到推理服务的,用于当前会话交流,获取到的记忆主要为前期的记忆模式,通过Event事件传递到记忆服务。
  2. [分析]记忆服务将事件进行队列中进行消化处理,进行推理分析,获取到对话数据、反思记忆、观察记忆、长期记忆,并进行持久化存储。
  3. [分析]数据资产会不断的采集场景下的数据,并推送到记忆服务,进行推理分析,然后获取到技能、知识库等,形成长期记忆。

记忆处理

记忆的处理包括两部分,一部分是解析记忆信息,另一个部分是记忆持久化。

解析记忆信息

这里的解析使用LLM进行解析处理,这里并不涉及到角色,只需要针对性的提取信息,设置以下Prompt:

当前只是设计阶段,所以Prompt暂时未设置,主要是参考Mem0和MemoryScope的Prompt的处理。

  • 感知数据解析Prompt
  • 对话信息解析Prompt
  • 反思记忆解析Prompt
  • 观察记忆解析Prompt

说明:

  • 长期数据目前暂时不用配置解析,这部分通过数据资产进行采集,然后进行推理分析,获取到长期记忆。
  • 反思数据会根据定时任务来进行解析,如果已经解析过的任务,会添加标识,使用

主要解析以下的信息字段:

  • key: 关联的key信息,用于关联查询出涉及到当前key其它记忆信息,对key向量化,key相对于实体信息来说,后期通过key来进行索引

解析之后,生成新的MemoryNode实体,然后进行向量数据库的持久化存储。 解析的方式会先放到队列中进行缓存,目前设定的记忆的数据是允许有丢失的情况,以内存队列的形式进行处理。

智能体交流记忆信息

解决的记忆内容:观察记忆(observation)和反思记忆(insight)

下面是跟AIP导购销售专员的对话过程,对话信息:

待添加交流图片。

AIP导购销售专员: 你好,我是AIP产品导购销售,很高兴认识你
软件工程师罗小东: 你们有哪些产品,简单介绍一下

AIP导购销售专员: AIP是我们推出的一款智能体平台系统,旨在推动企业的超级自动化转型和创新发展。它提供了Agent管理、智能体开发工具、测试环境、运行平台和协作工具等功能,帮助企业提高竞争力、降低成本、支持创新和业务拓展,并提升团队协作效率。如果您有兴趣了解更多详情或有任何疑问,欢迎留下您的联系方式以便我们后续跟进。
软件工程师罗小东: 我是做传统业务的,智能体对我有什么好处

AIP导购销售专员: 请问您的传统业务具体是什么?这样我可以更精确地说明智能体技术如何帮助您的业务。
软件工程师罗小东: 做的社保的管理系统,但是技术比较老旧,我怎么样才可以使用智能体技术创新的,你们的产品能提供哪些帮助

AIP导购销售专员: 我们理解您希望通过智能体技术创新来改进现有的社保管理系统。AIP产品可以为您提供一系列服务,包括但不限于智能体开发工具、测试环境、运行平台和协作工具等。这些功能可以帮助您实现自动化流程、提高数据处理能力、优化管理决策等目标。为了更好地满足您的需求,请具体说明您希望在社保管理系统中实现哪些方面的创新。
软件工程师罗小东: 我想在社保管理系统中添加自动能力,还有AI人工智能能力

AIP导购销售专员: 为了更好地帮助您实现社保管理系统的自动能力和AI人工智能能力的集成,我们需要先了解您具体的需求。比如,您希望利用AI进行数据分析预测还是自动化处理某些业务流程?请允许我们记录您的联系方式,以便我们能够为您提供更详细的信息和后续的支持服务。
软件工程师罗小东: 这个是我的联系方式 小东 12345678901

AIP导购销售专员: 请问您的全名是什么?以便我为您保存相关信息。
软件工程师罗小东: 罗小东

AIP导购销售专员: 感谢您提供的联系方式,罗小东先生。我们已经记录了您的信息,后续会针对您的需求提供更多关于AIP产品的详细资料,并解答您的任何疑问。

上面的场景针对的是[AIP导购销售专员]需要保留这段记忆,下面是记忆的处理流程。

明确提出的一点,这里信息是[AIP导购销售专员]对[软件工程师罗小东]的记忆信息,提取出[软件工程师罗小东]的信息,保存到[AIP导购销售专员]insight记忆里面,按以下流程处理:

  • 从ObservationWorker中获取到[罗小东]基本信息,放到观察记忆里面
  • 从InsightWorker中获取到[罗小东]的更深层信息,放到反思记忆里面

总结出来的[AIP导购销售专员]对[罗小东]的记忆信息是:

软件工程师罗小东的联系方式是12345678901
软件工程师罗小东希望在社保管理系统中添加自动能力和AI人工智能能力
软件工程师罗小东是一名软件工程师
软件工程师罗小东的技术比较老旧。
软件工程师罗小东的业务是做社保的管理系统。
软件工程师罗小东希望通过智能体技术创新来改进现有的社保管理系统。
软件工程师罗小东希望利用AI进行数据分析预测和自动化处理某些业务流程。
AIP产品可以帮助软件工程师罗小东实现自动化流程、提高数据处理能力、优化管理决策等目标。

后续根据关键字进行关联查询。

长期记忆

解决的记忆内容:感知记忆和长期记忆

这里也可以理解成知识库,为了更好管理,我们统一划分到记忆体系中。

同样针对的是AIP导购销售专员,他需要知道一些知识,比如:AIP是什么? AIP能做什么?为了初期的方便,这里内容统一由官网提供数据。通过数据治理体系处理,这个过程相对就比较简单一些。

以下为ETL处理过程:

待补充图

清理之后获取到数据资产信息,放到资产平台,也方便其它服务后缀使用。从数据到数据资产形态,这个过程为单独的流程,针对于业务场景需求, 感知数据的处理也类似,也会转换成数据资产,方便其它智能体直接获取。
单独建立一个流程将数据导入到智能体长期记忆中, 以下为数据资产到长期记忆和感知记忆流程。

待补充图

后续可能会还有其它的数据资产接入,比如团队信息,这里统一在角色的流程里面进行调整。为了数据隔离还有数据的访问权限控制,在智能体[雇佣]时,数据抽取流程不会被复制过去。

记忆的更新机制

每个记忆场景下有不同的更新机制,从多个角度来获取到最新的信息情况:

  • 感知数据:感知数据不需要更新,需要指定范围,默认为当天,比如今天的天气情况。
  • 对话数据:对话数据长期保留,是长期记忆的一种特殊形式,为增量数据
  • 观察数据:

总结

智能体的记忆模块的重新设计会更加的符合业务场景,还有相对拟人的角色思考过程, 这些只是初步的设计方案,感觉并不是特别完美,还有一定的优化空间,比如MemoryBank模式的考虑,
另外是否使用图数据库等,这些都可进一步优化,目前来说,在技术预演过程中有一定的效果,也期望有兴趣的同学可以多流程。

鸣谢

主要参考以下项目

  • MemoryScope
  • Mem0
  • ai-town
  • GraphRAG