乐于分享
好东西不私藏

AI Agent 记忆系统全解析:5种策略让你的AI越用越聪明

AI Agent 记忆系统全解析:5种策略让你的AI越用越聪明

摘要:AI Agent 为什么总是"失忆"?本文深度解析 Agent Memory(智能体记忆)的核心原理,涵盖5种记忆策略、3个代码示例,以及主流开源框架对比。让你的 AI 从"每次都是陌生人"变成"越用越懂你"。

你的 AI 有多"健忘"?

你有没有遇到过这种情况:

你:我上次说喜欢简洁的回答,怎么又给我写这么长?

AI:抱歉,我不记得您之前的偏好...

每次和 AI Agent 对话都像"第一次见面"——它不记得你是谁、你喜欢什么、上次聊了什么。

这不是 AI 的错,而是因为它没有"记忆系统"(Agent Memory)。

今天这篇文章,我会用最通俗的方式,讲清楚 AI Agent 记忆系统的核心原理,让你明白为什么有些 AI 越用越聪明,而有些永远在"失忆"。无论你是 AI 开发者还是产品经理,都能从中找到让 AI 更智能的解决方案。


一、为什么 AI Agent 需要记忆系统?

大语言模型(LLM)有一个天然限制:上下文窗口。

你可以把它想象成 AI 的"工作记忆"——就像人类的短期记忆,容量有限。即使 GPT-4o 支持 128K tokens,对于长期运行的 Agent 来说仍然不够。

更重要的是:

  • 对话结束 = 记忆清零:
    关掉窗口,下次打开 AI 完全不认识你
  • 上下文越长,成本越高:
    Token 数量直接影响 API 费用
  • 早期信息容易被"遗忘":
    长对话中,前面的内容可能被忽略

Agent Memory 的核心目标:让 AI 在跨会话、长时间交互中保持连贯性和个性化。


二、AI Agent 记忆的三种类型

借鉴认知科学,Agent 的记忆分为三层:

1. 工作记忆(Working Memory)

  • 特点:
    任务级、临时、结构化
  • 类比:
    你心算 24×3 时,脑子里暂存的中间结果
  • 存储:
    内存中的字典/对象

2. 短期记忆(Short-term Memory)

  • 特点:
    容量小、时效短、上下文相关
  • 类比:
    刚查到的电话号码,拨完号就忘了
  • 存储:
    对话历史列表(Context Window)

代码示例:最简单的短期记忆实现

from openai import OpenAI
client = OpenAI()

classShortTermMemory:
"""短期记忆:维护对话历史列表"""
def__init__(self):
self.messages = [{"role":"system""content":"你是一个有帮助的助手。"}]

defchat(self, user_input: str) -> str:
# 1. 用户输入加入记忆
self.messages.append({"role":"user""content": user_input})

# 2. 调用 API(携带完整对话历史 = 短期记忆)
        response = client.chat.completions.create(
            model="gpt-4o", messages=self.messages
        )

# 3. 助手回复也加入记忆
        reply = response.choices[0].message.content
self.messages.append({"role":"assistant""content": reply})
return reply

# 使用示例
memory = ShortTermMemory()
memory.chat("我叫小明,正在学 Python")
memory.chat("你还记得我叫什么吗?")  # ✅ 能记住:你叫小明

局限性:对话历史会越来越长,Token 消耗不断增加,且程序重启后记忆丢失。

3. 长期记忆(Long-term Memory)

  • 特点:
    持久存储、可检索、可结构化
  • 类比:
    你记得"10年前去过巴黎",也记得"骑自行车的技巧"
  • 存储:
    数据库 / 向量库 / 知识库

长期记忆又细分为:

  • 情景记忆:
    记录特定事件("上次用户说喜欢简洁回答")
  • 语义记忆:
    抽象知识("巴黎是法国首都")
  • 程序性记忆:
    技能和流程(调用工具链、执行计划)
  • 偏好记忆:
    用户画像("用户喜欢用中文回复")

三、AI Agent 记忆存储:5种策略对比

策略
优点
缺点
适用场景
原始对话
零信息损失
体积大、检索难
客服系统
摘要保存
大幅减少存储
丢失细节
长时间对话
事实抽取
信息密度高
可能遗漏
用户画像构建
向量存储
支持语义检索
需要基础设施
大规模长期记忆
知识图谱
支持关系推理
实现复杂
复杂领域知识

工程实践建议:多数生产级系统采用混合策略——短期用原始对话,长期用事实抽取 + 向量存储。

代码示例:用 Embedding + 向量检索实现长期记忆

import numpy as np
from openai import OpenAI

client = OpenAI()

classLongTermMemory:
"""长期记忆:基于 Embedding 语义检索"""
def__init__(self):
self.memories = []  # {"content": str, "embedding": list}

def_get_embedding(self, text: str) -> list:
"""调用 OpenAI Embedding API 生成向量"""
        response = client.embeddings.create(
            model="text-embedding-3-small"input=text
        )
return response.data[0].embedding

defadd_memory(self, content: str):
"""存储一条记忆"""
        embedding = self._get_embedding(content)
self.memories.append({"content": content, "embedding": embedding})

defsearch(self, query: str, top_k: int = 3) -> list:
"""语义检索最相关的记忆"""
ifnotself.memories:
return []

        query_emb = np.array(self._get_embedding(query))
        scored = []
for mem inself.memories:
            mem_emb = np.array(mem["embedding"])
# 余弦相似度
            sim = np.dot(query_emb, mem_emb) / (
                np.linalg.norm(query_emb) * np.linalg.norm(mem_emb)
            )
            scored.append((sim, mem["content"]))

        scored.sort(key=lambda x: x[0], reverse=True)
return [content for _, content in scored[:top_k]]

# 使用示例
memory = LongTermMemory()
memory.add_memory("小明是后端开发者,主要用 Python 和 FastAPI")
memory.add_memory("小明喜欢简洁的回答风格")
memory.add_memory("小明的项目用 PostgreSQL 数据库")

# 跨会话后,语义检索
results = memory.search("你用什么技术栈?")
print(results)  # ✅ 返回:小明是后端开发者,主要用 Python 和 FastAPI

核心优势:即使用户问"技术栈",也能匹配到"Python 和 FastAPI"——这就是语义检索的威力。


四、AI Agent 短期记忆的5种修剪策略

对话历史会不断膨胀,必须主动修剪。5种策略:

1. 滑动窗口

只保留最近的 N 条消息,超出则从头部丢弃。

  • 优点:
    实现极简
  • 缺点:
    可能丢失重要早期信息

2. Token 限制裁剪

按 Token 数量控制,超限时从最旧消息开始移除。

  • 优点:
    精确控制成本
  • 缺点:
    仍按时间顺序丢弃

3. 摘要压缩

用 LLM 将旧对话压缩成摘要,用摘要替代原始消息。

  • 优点:
    不丢失关键信息
  • 缺点:
    额外 LLM 调用有延迟和成本

4. 重要性评分

对每条消息打分(基于关键词、角色、时间等),优先保留高分消息。

  • 优点:
    智能保留关键信息
  • 缺点:
    评分规则需要针对场景调优

5. 分层修剪

结合多种策略,不同阶段使用不同的修剪方式:

  • 对话开始 → 滑动窗口(轻量级)
  • 达到中等长度 → 重要性评分(智能判断)
  • 达到长度上限 → 摘要压缩(压缩旧消息)
  • 会话结束 → 事实抽取(沉淀到长期记忆)

工程实践建议:简单场景用滑动窗口 + Token 裁剪即可;复杂 Agent 推荐分层修剪。

代码示例:滑动窗口 + 摘要压缩

from openai import OpenAI
client = OpenAI()

classSmartMemory:
"""智能记忆:滑动窗口 + 摘要压缩"""
def__init__(self, max_turns: int = 10, summarize_threshold: int = 15):
self.messages = []
self.summary = ""# 压缩后的摘要
self.max_turns = max_turns
self.threshold = summarize_threshold

defadd(self, role: str, content: str):
self.messages.append({"role": role, "content": content})

# 超过阈值时,用 LLM 压缩旧消息为摘要
iflen(self.messages) > self.threshold * 2:
self._compress()

# 超过窗口大小时,丢弃最早的消息
whilelen(self.messages) > self.max_turns * 2:
self.messages.pop(0)

def_compress(self):
"""将旧消息压缩为摘要"""
        to_summarize = self.messages[:-4]  # 保留最近4条
        to_keep = self.messages[-4:]

        conversation = "\n".join(
f"{m['role']}:{m['content']}"for m in to_summarize
        )

        response = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{
"role":"system",
"content":"将对话压缩为简洁摘要,保留关键信息。"
            }, {"role":"user""content": conversation}]
        )

self.summary = response.choices[0].message.content
self.messages = to_keep

defget_context(self) -> list:
        result = []
ifself.summary:
            result.append({"role":"system""content":f"[历史摘要] {self.summary}"})
        result.extend(self.messages)
return result

# 使用示例
memory = SmartMemory()
# 对话超过阈值时,自动压缩旧消息为摘要
# 摘要保留关键信息,新消息保持原文

效果:对话越长,越智能——旧消息被压缩成摘要,新消息保持原文,兼顾信息保留和成本控制。


五、AI Agent 记忆如何融入系统?

一个完整的 Agent 系统,记忆贯穿整个生命周期:

用户输入
   │
   ▼
① 记忆检索 → 从存储中检索相关记忆
   │
   ▼
② 上下文构建 → 将检索到的记忆注入 Prompt
   │
   ▼
③ LLM 推理 → 基于记忆+当前输入生成响应
   │
   ▼
④ 记忆存储 → 将新的交互信息写入记忆
   │
   ▼
⑤ 记忆管理 → 压缩、合并、清理过期记忆

关键设计原则:

  1. 不要把所有东西都存进上下文
     — 只检索与当前对话最相关的记忆
  2. 记忆需要定期维护
     — 合并重复记忆、清理过期信息
  3. 区分记忆类型
     — 不同类型用不同的存储和检索策略
  4. 保护用户隐私
     — 敏感信息加密存储,提供遗忘/删除机制

六、主流 AI Agent 记忆框架对比

框架
特点
适用场景
Mem0
专为 Agent 设计,支持自动记忆提取、向量检索、冲突解决
需要开箱即用的记忆增强
LlamaIndex Memory
短期/长期记忆分离,支持 token 限制 + 持久化
已使用 LlamaIndex 生态
LangChain Memory
多种内存策略(Buffer/Window/Summary/Entity)
已使用 LangChain 生态
OpenAI Agents SDK
内置 examples/memory,轻量级
使用 OpenAI Agents SDK
agents.md
将记忆写入文件,实现跨会话持续学习
轻量级、无需额外依赖

总结:你的 Agent 需要什么记忆?

你的 Agent 需要什么记忆?

├── 只需要当前对话 → 对话历史列表

├── 对话很长但只需最近内容 → 滑动窗口

├── 需要跨会话记住事实 → 向量检索

└── 完整的个性化体验 → 多层架构

记住:没有记忆的 Agent 每次对话都是"失忆"状态;有记忆的 Agent 能记住你是谁、你喜欢什么、上次聊了什么,越用越聪明。


参考资料

  • 解密prompt系列55.Agent Memory的工程实现 - Mem0 & LlamaIndex
  • Agent 记忆系统完整实现系列
  • MemOS 源码笔记 — 记忆分类
  • Agentic Memory: 大模型智能体的统一记忆管理框架
  • 一口气读完 Agent Memory 的 21 篇核心论文

如果这篇文章对你有帮助,欢迎点赞、收藏、转发!

关注我,获取更多 AI Agent 和大模型技术干货!