背景

近期工作中做了 LLM 长记忆功能,对此中的思路,技术做下总结。顺便为了练习自己的系统设计能力,这里按照系统设计的方式来整理

什么是长记忆

简单来说就是让大模型具备记忆功能,记住某个人。产品形态上可以是个人助手。不同于某次会话上下文记忆,长记忆具备的特点:

  1. 跟随个人的:我们目前常见的短期记忆只是跟随某次会话
  2. 时间长:1年,5年,10年,……,终生
  3. 个人信息相关的:比如个人爱好,心情变化,健康,工作,生活等这些属于个人记忆。客观信息事实信息比如:美国在北美洲,地球是圆的等这些不需要作为记忆信息。
  4. 多种类型的:如上条有不同类型的记忆,不同类型的记忆里处理方式有很大差异,比如:日程相关的需要处理时间,绝对时间的转换,个人爱好相关的,比较简单,直接用类似图谱的三元组信息即可,办公工作内容型的记忆类似。

功能点及非功能点梳理

总体其实为了实现个人助手的产品功能。这个助手在产品形态上是一个普通对话机器人,系统的具备的功能及非功能点需求大致如下:

功能点

  1. 登录,因为是私人助手嘛,得知道用户是谁。
  2. 对话:这个不用说了,是助手的主题功能
  3. 配置功能,因为记忆有很多种类型,在助手里最好有配置,比如我想主要是工作,那日程安排比较重要,生活。如果多有记忆都要配置,那就是一个超级个人助手
  4. 记忆生产:根据配置信息,做不同类型的记忆提取存储
  5. 记忆消费:是指根据记忆:做下健康管理,饮食管理,工作学习计划,日程计划,等等。

非功能点

  1. 短期能同时处理 1w+ 人数的并发,长期的话人数可能扩充到 10W+,甚至更多。每天可能有 50W 的请求
  2. 响应时间:在记忆消费时能做到 3s - 5s 内有响应,3s-30s 内响应完成。
  3. 数据规模,根据每个人的配置,记忆长短不同,数据规模有不同要求

方案

工作流程图

Alt text

如图所示。总体为一个 RAG 流程,其中核心是记忆引擎的部分。由于rag流程基础的东西,在社区里做的比较多,也比较简单,不做过多强调。核心强调记忆引擎的东西。

记忆引擎

记忆引擎里完成的功能:

  • 记忆生产 根据配置信息生产一些垂类记忆
  • 记忆存储 把记忆抽出来后
  • 记忆消费 根据用户的问题,召回相关的记忆,并做简单推理规划

记忆生产

这里输入是会话信息,需要做的是从会话信息里提取记忆实体。主要涉及到自然语言处理的部分。 知识图谱,我们使用知识图谱来完成记忆的载体。

知识图谱的实体抽取,以及图数据库语法都是用额外的大模型来推理完成

提示词设计

// 信息抽取
    `
        你是一个信息提取专家

        用户的输入如下:{query}
        实体信息:
    `
// 记忆更新
    `
        你是一个图数据专家,请生成neo4j的sql语句
        历史记忆如下:{memories}
        新的记忆如下:{memory}

        sql:
    `

这里只给出部分,因为其他一些垂类的内容。其他还有很多,也算是核心。

记忆消费

这里就是拼装提示词,召回后相关信息,做一下记忆拼接,最终的提示词

大概如下

`历史记忆如下: {memories}

问题: {query}
`

把记忆引擎抽离出来一个独立服务

这个记忆引擎可以抽你出来一个独立服务,给其他提供服务。

未来如果有类人机器人出现,这个引擎可以作为其大脑的一部分。

小节

本质上记忆引擎里的核心还是提示词,属于是:用大模型本身去解决大模型的问题。是不是有点类似于:我不是要你的钱,我只是拿你的钱办你的事。和珅表示这事我熟悉

技术选型

后端:Python FastApi 存储:图数据库,向量数据库,Postgresql 前端:React Nextjs

未来规划

交互上更加拟人一些,比如加入 tts,以及 stt

社区方案

  1. mem0

我在实践过程中严重依赖了这个方案,不得不说社区力量还是强大

总结

在实际中体验下来,最终方案已经基本能用。提交给产品后,收获到了一些正向反馈。目前这个产品可以定位为超级个人助理。可以配置记忆倾向点,也可以手动录入一些记忆信息,以及一些非结构化的记忆。

方案思路很简单,调优巨复杂。做过的估计都有体会,这也是现阶段很多AI应用的通用问题。所以会涌现出很多奇淫巧技让这些效果变好,或许这就是技术存在的意义吧:在有限的条件下尽量产生价值

方案上还是会演进的,因为目前总体上还是提示词工程的玩法。这种模式会受到大模型本身技术发展影响的。大模型的窗口,推理精读都会影响我们的方案设计。

Any Way 无论如何。在 AI 时代下,此类产品会越来越多,我们一定要利用好这些产品来辅助提升我们的效率。让我们自己变成超级个体,一个人相当于一个团队。