AI Agent 记忆系统设计:长短期记忆如何实现?什么时候存?什么时候查?

很多人刚开始做 Agent,都会产生一个误区:

给 Agent 接一个向量数据库,它就有记忆了。

实际上,向量数据库 ≠ 记忆系统

真正的 Agent Memory 远不只是「把聊天记录存到 Milvus」这么简单,而是一套完整的记忆管理机制(Memory Management)

目前 OpenAI、Anthropic、Google、Mem0、LangGraph 等主流 Agent 框架,基本都采用类似的设计思路:

短期记忆 + 长期记忆 + 记忆管理 + 检索机制

本文结合目前主流方案,系统总结 Agent 的记忆系统如何设计。


一、Agent 为什么需要记忆?

如果没有记忆,每一次调用 LLM 都是一次新的对话。

例如:

用户:
我叫张三。

下一轮:

用户:
我叫什么?

模型其实不知道。

因为模型本身没有状态。

真正让它"记住"的是:

System Prompt

+

历史消息

+

Memory

一起发送给模型。

所以:

Agent 的记忆,本质就是下一次推理时能够重新提供给模型的信息。


二、目前主流的记忆架构

目前主流 Agent 基本都是下面这种结构。

            User
              │
              ▼
       Memory Manager
              │
     ┌────────┴────────┐
     │                 │
     ▼                 ▼
 Short Memory     Long Memory
 (上下文)        (向量数据库)
     │                 │
     └────────┬────────┘
              ▼
            Prompt
              │
              ▼
             LLM

可以理解成:

Agent 有两个"大脑"。

一个负责当前对话。

一个负责长期知识。


三、短期记忆(Short-term Memory)

短期记忆就是:

当前会话(Context Window)。

例如:

用户:
你好

AI:
你好

用户:
介绍一下 LangChain

AI:
......

用户:
总结一下刚才说的内容

这里模型能够总结。

因为:

Prompt 会自动携带:

User:你好

Assistant:你好

User:介绍 LangChain

Assistant:......

这些消息全部重新发送。

模型并不是"记住"了。

而是重新看了一遍。


主流实现方式

几乎所有 Agent 都采用:

messages = [
    HumanMessage(),
    AIMessage(),
    HumanMessage(),
    AIMessage()
]

例如:

LangGraph

LangChain

OpenAI Agents SDK

Anthropic SDK

都是这种方式。


短期记忆什么时候删除?

目前一般有三种策略。

方法一:窗口截断(Sliding Window)

例如:

最近20轮

超过直接删除。

最简单。

也是最常见。


方法二:Token 控制

例如:

Context ≤ 32000 Token

超过:

删除最旧消息。

目前很多 Agent 都这么做。


方法三:历史摘要(Conversation Summary)

例如:

第一天聊天

↓

LLM 总结

↓

生成摘要

↓

以后只保留摘要

例如:

Summary:

用户目前正在开发 AI 客服系统。

主要使用 FastAPI。

希望支持 MCP。

以后 Prompt:

Summary

+

最近几轮消息

OpenAI、LangGraph 都支持这种做法。


四、长期记忆(Long-term Memory)

长期记忆就是:

跨会话保存的重要信息。

例如:

今天:

用户:

我公司做教育行业。

下周:

帮我设计客服。

Agent:

结合你们教育行业……

这里就是长期记忆发挥作用。


长期记忆一般放:

Vector DB

Milvus

Qdrant

Chroma

PGVector

Weaviate

存的是:

文本

Embedding

Metadata

例如:

{
 "text":"用户公司卖教育实训箱",

 "embedding":[...]

 "type":"user_profile"

}

五、什么时候写入长期记忆?

不是每一句话都存。

否则:

你好

谢谢

好的

哈哈

全部进入向量库。

最终:

垃圾越来越多。

检索越来越差。

所以:

目前主流都会做:

Memory Writing(记忆写入)


方法一:规则判断(Rule-based)

最简单。

例如:

用户说:

我叫张三

↓

保存
我公司做 AI

↓

保存
哈哈哈哈

↓

不保存

例如:

if 包含:

姓名

职业

公司

偏好

长期计划

↓

保存

企业里很多项目就是这样。

实现简单。

效果稳定。


方法二:LLM 判断(主流)

例如:

Prompt:

判断下面内容是否值得长期记忆。

如果值得:

返回 Yes。

否则:

No。

例如:

用户:

我以后都使用 Python。

LLM:

Yes

然后:

写入 Memory

OpenAI

Anthropic

Mem0

基本都有类似做法。


方法三:重要性评分(Importance Score)

很多 Agent 会让模型打分。

例如:

重要程度:

0~10

例如:

今天下雨

2
以后都使用 LangGraph

9

超过:

Score > 7

↓

保存

这是很多论文喜欢的方法。


六、什么时候查询长期记忆?

很多新人都会问:

是不是每轮都去查向量数据库?

答案:

理论可以。

生产一般不会。


原因很简单。

假设:

用户:

你好

你去查:

Milvus

TopK=10

毫无意义。

增加:

延迟。

Token。

成本。


主流方案一:每轮检索(简单)

流程:

User

↓

Embedding

↓

Vector Search

↓

TopK

↓

Prompt

↓

LLM

优点:

实现简单。

缺点:

浪费很多查询。


很多 Demo 都这样。

真正线上一般不会。


主流方案二:Memory Router(推荐)

增加一个判断器。

User

↓

Memory Router

↓

是否需要记忆?

↓

Yes

↓

Vector Search

↓

LLM

例如:

Prompt:

用户:

继续昨天那个客服项目。

Router:

需要历史。

↓

查询 Memory

如果:

你好

Router:

无需查询。

这是目前越来越主流的方案。


方法三:LLM 自主决定(Agent Memory)

很多 Agent 会让模型自己决定。

例如:

Thought:

我需要知道用户之前公司的信息。

↓

Action:

Search Memory

↓

Observation:

……

↓

继续回答

例如:

ReAct Agent

Tool Calling

Memory Search Tool

模型自己调用:

search_memory()

这也是现在很多 Agent Framework 的设计。


七、长期记忆如何检索?

目前一般都是:

Memory

↓

Embedding

↓

Vector Search

↓

TopK

↓

Rerank(可选)

↓

Prompt

例如:

用户:

继续上次那个 AI 客服。

↓

Embedding

↓

Milvus

↓

Top5

↓

Rerank

↓

最相关2条

↓

Prompt

很多系统还会结合:

向量检索

+

关键词检索(BM25)

+

Metadata过滤

+

Rerank

例如:

type=user_profile

AND

project=客服

这样命中率会更高。

目前 Hybrid Search(混合检索)已经成为很多生产系统的默认方案。


八、长期记忆存什么?

长期记忆不是聊天记录。

而是:

对未来还有价值的信息。

建议保存:

类型 示例
用户身份 我叫张三
公司信息 公司做教育行业
技术偏好 默认使用 LangGraph
编程习惯 默认 Python
长期目标 做 AI Agent 平台
项目背景 正在开发智能客服
固定约束 数据库存 PostgreSQL

不建议保存:

你好

谢谢

好的

哈哈

今天天气不错

这些没有长期价值。


九、目前主流框架如何实现?

LangGraph

短期:

Messages State

长期:

Memory Store

+

Checkpoint

开发者需要自行实现:

什么时候存

什么时候查

自由度最高。


Mem0(目前最流行)

Mem0 把 Memory 做成了一个独立系统。

它负责:

  • 自动判断是否值得保存
  • 自动提取重要信息
  • 自动更新旧记忆
  • 自动检索相关记忆
  • 自动去重
  • 自动合并相似记忆

开发者只需要:

Memory.add()

Memory.search()

即可完成完整记忆管理。

很多团队已经直接使用 Mem0,而不是自己从零开发。


OpenAI Memory

目前主要面向 ChatGPT 产品。

特点:

  • 自动保存用户偏好
  • 自动更新
  • 自动引用

整体思路与 Mem0 类似。


十、推荐的生产级架构

                    User
                      │
                      ▼
               Short Memory
              (最近对话)
                      │
                      ▼
               Memory Router
        (判断是否查询长期记忆)
              │              │
          不需要             需要
              │              ▼
              │      Vector Search
              │              │
              └──────┬───────┘
                     ▼
                Prompt Builder
                     │
                     ▼
                    LLM
                     │
                     ▼
             Memory Writer
      (判断是否写入长期记忆)
                     │
                     ▼
              Long Memory DB

整个流程可以总结为:

  1. 短期记忆:保存当前会话,维持上下文连续性。
  2. 长期记忆:保存用户长期有效的信息,支持跨会话。
  3. Memory Router:决定当前问题是否需要检索长期记忆,避免无效查询。
  4. Memory Writer:决定哪些信息值得保存,避免向量库被无意义内容污染。
  5. Hybrid Search + Rerank:检索长期记忆时结合向量、关键词和元数据,提高命中率。

总结

真正的 Agent 记忆系统,不是简单地把聊天记录放进向量数据库,而是一套完整的「写入、管理、检索、更新」机制。

目前主流实践已经逐渐形成共识:

  • 短期记忆:保存最近几轮对话,通过消息列表、滑动窗口或摘要实现。
  • 长期记忆:保存用户画像、项目背景、长期偏好等跨会话信息,通常存储在向量数据库中。
  • 写入时机:不是每句话都保存,而是通过规则、LLM 判断或重要性评分筛选有价值的信息。
  • 检索时机:不是每轮都查询,而是通过 Memory Router 或 Agent 自主调用,在真正需要历史信息时再检索。
  • 检索方式:以向量检索为基础,结合关键词检索、Metadata 过滤和 Rerank,形成 Hybrid Search,提高准确率。

随着 Agent 技术的发展,记忆管理已经成为 Agent 系统中与规划(Planning)、工具调用(Tool Use)同等重要的核心能力,也是未来智能体走向长期自治的重要基础。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐