为什么需要Memory
首先在做之前,要思考一个问题 LLM 有没有记忆, 如果只是和LLM进行对话的话。是没有记忆的
例如:
用户:
我叫张三
↓
LLM
↓
回答:你好张三
下一次请求:
用户:
我叫什么?
如果你没有把上一轮再发给 LLM,它会回答:
我不知道。
所以LLM 是无状态的,是不会自带记忆的。
那么是谁有记忆,不是LLM,而是你的平台,也就是说 Memory 是平台提供给 LLM 的能力。
User
│
▼
Conversation Runtime (对话)
│
▼
Memory Runtime
│
▼
LLM
Memory 到底是什么?
很多人理解为聊天记录,或者说存储上下文,用作记忆。
实际上不是,他应该叫做
Memory = Agent 可以再次利用的信息。
举例:
用户:
我叫张三
保存:
{
key: "user.name",
value: "张三"
}
下次
用户:
我叫什么
Memory Runtime:
找到:
user.name
↓
返回: 张三
LLM:
根据 Memory 回答: 你叫张三。
为什么 Memory 不是数据库?不是用户模块?不是 LLM?而是 Runtime?
我们把 Runtime 定义成:
Runtime = 在一次任务执行过程中,负责管理某种能力的运行逻辑。
例如Agent Runtime
收到问题
↓
Think
↓
Tool
↓
Observe
↓
Finish
例如Tool Runtime
收到 ToolCall
↓
找到 Tool
↓
执行
↓
返回结果
你会发现,Runtime 不只是”存数据”,而是有完整的运行过程。
很多人以为 Memory Runtime 是这样的一环
Memory
↓
数据库
这样肯定是错的,因为 Memory 每次都会 运行
比如用户输入 : 我叫张三
下面是执行过程
Agent
↓
Memory Runtime
↓
① 判断值不值得保存
↓
② 提取信息
↓
③ 去重
↓
④ 更新 Memory
↓
⑤ 写数据库
注意: 数据库只是最后一层,复杂的是前面
下一轮
用户提问: 我叫什么?
Memory Runtime 又开始工作:
收到 Query
↓
理解 Query
↓
检索
↓
排序
↓
过滤
↓
组织 Prompt
↓
返回 LLM
Memory 的职责
Memory Runtime
├── Save(保存)
├── Search(检索)
├── Update(更新)
├── Delete(删除)
├── Summarize(总结)
├── Compress(压缩)
├── Rank(排序)
└── Inject(注入 Prompt)
Memory 与 RAG 的关系
这是很容易混淆的地方
RAG:
回答"世界知识"
例如:
公司的制度是什么?
Memory:
回答"历史上下文"
例如:
我昨天说了什么?
所以
RAG
│
▼
外部知识
Memory
│
▼
历史信息
总结
Memory 是 Agent 平台设计中的一项基础能力(Platform Capability),不是单个 Agent 定义里的核心组成部分。但是 Agent 可以配置使用哪些 Memory,但 Memory 本身不属于 Agent。