# LLM 长记忆工具总结

作者：zhongling
原文：https://tomorrowthief.vercel.app/posts/ai-longterm-memory/
发布日期：2024-10-19
更新日期：2024-10-19
语言：zh

摘要：以个人助手为场景，梳理 LLM 长期记忆的系统设计：记忆提取、知识图谱存储、RAG 召回与记忆消费。

---


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

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

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

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

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

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

## 方案
工作流程图

![Alt text](/long-term-memory.png)

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


## 记忆引擎
记忆引擎里完成的功能：
* 记忆生产
    根据配置信息生产一些垂类记忆
* 记忆存储
    把记忆抽出来后
* 记忆消费
    根据用户的问题，召回相关的记忆，并做简单推理规划

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

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

#### 提示词设计

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

        用户的输入如下：{query}
        实体信息：
    `
```


```js
// 记忆更新
    `
        你是一个图数据专家，请生成neo4j的sql语句
        历史记忆如下：{memories}
        新的记忆如下：{memory}

        sql:
    `
```

这里只给出部分，因为其他一些垂类的内容。其他还有很多，也算是核心。
### 记忆消费
这里就是拼装提示词，召回后相关信息，做一下记忆拼接，最终的提示词

大概如下

```js
`历史记忆如下: {memories}

问题: {query}
`
```


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

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

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

## 技术选型
后端：Python FastApi
存储：图数据库，向量数据库，Postgresql
前端：React Nextjs


## 未来规划
交互上更加拟人一些，比如加入 tts，以及 stt

## 社区方案

1. [mem0](https://github.com/mem0ai/mem0)

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



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

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

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

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



