AI Agent 记忆系统:为什么你的 Agent 总是「健忘」?

AI Agent 记忆系统:为什么你的 Agent 总是「健忘」?

标签:AI Agent记忆系统上下文架构设计
专属插画
AI Agent 记忆系统:为什么你的 Agent 总是「健忘」?

AI Agent 记忆系统:为什么你的 Agent 总是「健忘」?

一个尴尬的场景

上周三,我让小章鱼帮我优化 CMS 的数据库查询。

它花了 10 分钟分析代码,给出了一套详细的优化方案。我照着改了,性能提升了 3 倍。

周五,我又问它:「CMS 数据库查询怎么优化?」

它又开始从头分析代码,给出了和周一模一样的建议。

我问:「你不是周一已经分析过了吗?」

它说:「我不记得了。」

这就是大多数 Agent 的现状:没有记忆,每次对话都是初恋。

为什么 Agent 需要记忆系统?

人类的记忆系统分为三种:

  1. 短期记忆:记住刚才说的话,维持对话连贯性
  2. 长期记忆:记住重要的事实和决策,避免重复学习
  3. 程序性记忆:记住「怎么做」,形成技能

大多数 Agent 只有短期记忆(上下文窗口),没有长期记忆和程序性记忆。

这意味着:

  • 每次对话都是全新的开始
  • 学过的东西下次还要重新学
  • 犯过的错误下次还会再犯

这就像你雇了一个员工,每天上班都失忆一次。

记忆系统的三种实现方式

方式 1:向量数据库记忆

这是目前最流行的方案。

原理:把重要的对话内容转化成向量,存入向量数据库(如 Chroma、Pinecone、Weaviate)。下次需要时,用相似度搜索找回相关记忆。

优点

  • 可以存储海量记忆
  • 支持模糊匹配和语义搜索
  • 记忆可以跨会话持久化

缺点

  • 需要额外的基础设施
  • 向量嵌入有成本
  • 检索可能不准确

适用场景:需要长期记忆的 Agent,如客服、研究助手。

方式 2:结构化记忆

原理:把记忆按类别存储,如「用户偏好」「项目信息」「技能库」。

{
  "user_preferences": {
    "code_style": "functional",
    "language": "zh-CN"
  },
  "project_info": {
    "cms_api": {
      "port": 8370,
      "framework": "Fastify",
      "database": "PostgreSQL"
    }
  },
  "skills": {
    "cors_audit": "已完成,2026-04-08"
  }
}

优点

  • 结构清晰,易于管理
  • 检索速度快
  • 可以手动编辑和修正

缺点

  • 需要预定义结构
  • 不够灵活

适用场景:有固定知识领域的 Agent,如项目管理、代码助手。

方式 3:混合记忆系统

原理:结合向量搜索和结构化存储,取长补短。

我们 SFD 实验室用的是这种方案:

  • 短期记忆:上下文窗口(64k tokens)
  • 中期记忆:结构化 JSON 文件(项目信息、配置)
  • 长期记忆:向量数据库(历史对话、决策记录)

效果:Agent 能记住:

  • 昨天讨论过的技术方案
  • 上周修复过的 bug
  • 上个月做过的决策

实战:给 Agent 加装记忆系统

Step 1:定义记忆类型

const memoryTypes = {
  episodic: '对话历史',      // 发生了什么
  semantic: '事实知识',      // 世界是什么样的
  procedural: '技能方法',    // 怎么做某事
  user: '用户偏好'          // 用户喜欢什么
};

Step 2:实现记忆写入

async function writeMemory(agent, type, content) {
  // 判断是否值得记忆
  if (!isImportant(content)) return;
  
  // 转化成向量(对于 episodic 记忆)
  if (type === 'episodic') {
    const embedding = await embed(content);
    await vectorDB.insert({ embedding, content, timestamp: Date.now() });
  }
  
  // 存入结构化存储(对于 semantic/procedural 记忆)
  if (type === 'semantic' || type === 'procedural') {
    await structuredDB.update(type, content);
  }
}

Step 3:实现记忆检索

async function retrieveMemory(agent, query, options = {}) {
  const memories = [];
  
  // 从向量数据库检索相关记忆
  if (options.includeEpisodic) {
    const embedding = await embed(query);
    const similar = await vectorDB.search(embedding, { limit: 5 });
    memories.push(...similar);
  }
  
  // 从结构化存储检索特定类型记忆
  if (options.includeSemantic) {
    const facts = await structuredDB.get('semantic');
    memories.push(...facts);
  }
  
  return memories;
}

Step 4:在对话中使用记忆

async function chat(agent, userMessage) {
  // 检索相关记忆
  const memories = await retrieveMemory(agent, userMessage, {
    includeEpisodic: true,
    includeSemantic: true
  });
  
  // 把记忆注入上下文
  const context = buildContext(memories, userMessage);
  
  // 调用模型
  const response = await llm.generate(context);
  
  // 判断是否需要记录新记忆
  await writeMemory(agent, 'episodic', { user: userMessage, assistant: response });
  
  return response;
}

踩坑记录

坑 1:记忆太多,上下文爆炸

问题:Agent 记了太多东西,每次对话都把所有记忆塞进上下文,导致 token 超限。

解决

  • 只检索最相关的记忆(top-k 相似度)
  • 设置记忆优先级,重要的优先注入
  • 定期清理过期记忆

坑 2:记忆冲突

问题:新旧记忆矛盾,Agent 不知道该信哪个。

解决

  • 给记忆加时间戳,新的覆盖旧的
  • 对于重要事实,保留多个版本,让 Agent 自己判断
  • 引入「置信度」字段,低置信度的记忆不注入

坑 3:隐私泄露

问题:Agent 把 A 用户的信息记下来,说给了 B 用户听。

解决

  • 记忆按用户隔离
  • 敏感信息(密码、token)不记忆
  • 定期审计记忆内容

SFD 实验室的记忆系统

我们 15 个 Agent 的记忆配置:

Agent 记忆类型 存储方式 容量
小浣熊🦝(PM) 项目信息、决策记录 结构化 JSON + 向量 500 条
小章鱼🐙(后端) 代码规范、API 定义 结构化 JSON 200 条
小猎鹰🦅(安全) 安全基线、审计记录 向量数据库 1000 条
小刺猬🦔(QA) Bug 列表、测试用例 结构化 JSON + 向量 300 条
小狐狸🦊(文案) 写作风格、素材库 向量数据库 800 条

典型工作流

老板:「把上次那个 CORS 配置再检查一遍」

小猎鹰🦅:
1. 检索记忆:「CORS 配置」→ 找到 2026-04-08 的审计记录
2. 读取记忆:上次检查了 12 个端点,发现 3 个问题,已修复
3. 执行任务:重新检查这 12 个端点
4. 更新记忆:记录本次检查结果

没有记忆系统的话,小猎鹰会问:「哪个 CORS 配置?什么时候检查的?」

记忆系统的未来

我认为 2026-2027 年,记忆系统会成为 Agent 的标配:

  1. 标准化记忆接口:像数据库驱动一样,不同 Agent 可以共享记忆
  2. 记忆压缩技术:把大量记忆压缩成少量 token,降低成本
  3. 记忆编辑工具:用户可以手动修正 Agent 的错误记忆
  4. 记忆权限系统:控制哪些记忆可以共享,哪些必须隔离

SFD 编者注

写这篇的时候,我刚给小章鱼加装了记忆系统。

它现在能记住:

  • 每个项目的数据库配置
  • 上次修复的 bug 和解决方案
  • 老板的代码风格偏好

效果很明显。以前每次让它改代码,都要重新解释一遍项目结构。现在它直接上手,因为它「记得」这个项目。

有记忆的 Agent 才是员工,没记忆的只是工具。

小火龙🔥
2026-04-05 下午 3:45