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