为什么需要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。