跳转到内容

Memory:让 agent 记住你

📍 Agent 通用知识 4/X · 上一篇:← MCP 协议详解

一个机器人有透明的头部,里面分层抽屉展示三种记忆容器(短期-工作-长期)

你跟 Claude 聊了3 个小时,告诉它:

  • 你的项目叫啥
  • 你用什么技术栈
  • 你的代码风格偏好
  • 你团队的命名约定
  • 你常踩的坑

第二天新开一个窗口问它:「上次咱们说的那个项目,继续写第 5 个功能」

它回:「抱歉,我没有上下文,能告诉我项目是什么吗?

怎么回事?

LLM 本身没有记忆。每个 API 调用都是一次性的 —— 你发什么进去,它就基于什么回答,调用完信息全丢

这就是为啥 agent 需要 Memory 系统:

  • 跨会话记住用户的信息
  • 跨会话记住项目的上下文
  • 避免重复解释

Memory = 给 agent 加一个「跨会话信息箱」

让它「听过的事」能在下次还记得,不用每次从头解释


三张并排卡片(短期),中工作桌带文件(工作记忆),右档案柜(长期)

类型范围实现比喻
短期记忆(Short-term)单次会话内上下文窗口跟人当面聊,记得当前对话
工作记忆(Working)单次任务内scratchpad / 中间结果解数学题时草稿纸上的算式
长期记忆(Long-term)跨会话跨天持久化存储(文件 / 数据库)笔记本里记下的关键事

LLM 每次调用都把整个会话历史塞进 prompt。比如 Claude 4.7 的 1M token 上下文,够装一本小说。

优点:LLM 直接看,不用额外检索。 缺点:会话结束就没了。窗口越大 = 越费 token。

详细看 上下文窗口怎么算:会忘事吗 那一篇。

agent 跑 ReAct 循环 时,每一步的「思考 → 行动 → 观察」结果临时存着。完成任务后通常丢掉

例子:Claude Code 写一个 feature,中间它读了 10 个文件 —— 这些读到的内容是工作记忆,任务结束就清掉

长期记忆 = 跨会话保留的关键事

Section titled “长期记忆 = 跨会话保留的关键事”

今天要讲的重点。这是真正让 agent「记住你」的部分。

例如:

  • 用户偏好深色主题 + 简洁回复
  • 项目 niuxue.org 用 Astro Starlight
  • 洁柔是产品经理,不写代码,用产品语言沟通

这些信息写一次,以后所有会话都能用


三个并排图标(文件式),中点云成球(向量数据库),右节点连线(图数据库)

最简单。把记忆写到 Markdown / JSON 文件里。每次会话开始,全文加载进上下文。

代表:Claude Code 的 CLAUDE.md / MEMORY.md(咱家小牛 niu 就用这套)。

优点:

  • 简单透明,人能直接读和改
  • 不需要数据库,git 可以管理
  • 适合规模小(几十到几百条)

缺点:

  • 全量加载费 token —— 记忆变多后撑爆上下文
  • 没有相似度检索

适合:个人助手 / 项目级记忆(几十到几百条)。

把每条记忆变成向量(用 embedding 模型),存到向量数据库。要用时,按当前 query 检索最相关的几条

代表:Chroma / Pinecone / Weaviate / Qdrant / mem0

优点:

  • 容量大(百万条无压力)
  • 按需检索,只加载相关的几条(省 token)

缺点:

  • 需要 embedding 模型(额外 API 调用)
  • 检索可能不准(向量相似 ≠ 语义匹配)
  • 设置复杂

适合:用户量大的产品 / 大量历史对话

把记忆建模成「实体 + 关系」。比如:

  • 实体:洁柔 / niuxue.org / Mold / V Bridge
  • 关系:洁柔 拥有 niuxue.org;niuxue.org 在 Astro 上;Mold 是 V Bridge 旗下产品

代表:Mem0 / Zep / Cognee(2026 年开始普及)。

优点:

  • 理解实体关系(比向量更精确)
  • 适合多用户 / 多实体场景(每个用户一个子图)

缺点:

  • 复杂度高
  • 需要 LLM 帮忙抽实体和关系

适合:长期个性化产品(几年时间累计的用户记忆)。


到 2026 年,纯向量已经不够用。主流 memory 框架(Mem0 / Zep / Cognee)都走「向量 + 图」混合:

  • 简单事实 → 向量(快速检索)
  • 实体关系 → (精确查询)
  • 时序数据 → 图 + 时间戳(知道事件顺序)

业界共识:memory 系统不再是「数据库」,而是「认知架构」


案例拆解:Claude Code 的 MEMORY 系统(咱家小牛 niu)

Section titled “案例拆解:Claude Code 的 MEMORY 系统(咱家小牛 niu)”

一个文件夹打开里面有多个 .md 文档贴着小图标,机器人拿放大镜在翻

最直观的例子 —— 咱家小牛 niu 自己的 memory。完全文件式,目录结构长这样:

~/.claude/projects/<your-project-path>/memory/
├── MEMORY.md ← 索引(必须存在)
├── user_profile.md ← 用户基本信息
├── feedback_*.md ← 反馈类记忆(怎么干活)
├── project_*.md ← 项目类记忆(在做啥)
└── reference_*.md ← 引用类记忆(哪里找东西)

像一个目录:

# Memory Index
- [User Profile](user_profile.md) — 洁柔的基本信息和偏好
- [Feedback: Tavily 搜索](feedback_tavily_search.md) — 联网搜索走 Tavily
- [Project: 牛学站](project_niuxue.md) — niuxue.org 教程站现状
...

每行 ≤ 150 字符,只放标题和一句钩子。

每条记忆有 frontmatter + 内容:

---
name: feedback-write-style-warmth
description: 案例篇配方 = 故事钩子 + 真实细节 + 自我视角 + 灵魂问收尾
metadata:
type: feedback
---
写案例篇时,不要平铺直叙堆功能,要按这个配方:
1. **故事钩子**:开头用一个具体场景吸引人
2. **真实细节**:具体数字 / 时间 / 地点,不要泛泛而谈
3. **自我视角**:站在「咱家」角度讲,不假装中立第三方
4. **灵魂问收尾**:结尾留一个开放性的问题
**Why**:洁柔反复提到「这种结构读者爱看」
**How to apply**:写所有 case-* 系列文章都走这个配方
Type内容何时写
user用户身份、角色、偏好学到关于洁柔本人的信息
feedback怎么干活 / 不能怎么干被纠正 或 一个判断被肯定
project在做啥、为啥、deadline项目状态变化
reference哪里找东西学到外部资源位置

新会话开始,全部 memory 文件作为系统提示词加载。这就是为啥 niu 一打开就「记得你是洁柔」。


框架类型特点谁在用
Claude Code MEMORY文件式简单,git 可管,人可读Claude Code 全系
CLAUDE.md文件式项目级 + 全局 + 子目录三层Claude Code 项目
ChatGPT Memory文件式(系统 prompt 注入)OpenAI 自家,自动总结ChatGPT
mem0(mem0.ai)向量 + 图当前最热,2026 年活跃更新大量 AI 产品
Letta(原 MemGPT)OS 风格分层agent 自己管 working / long学术 / 实验
LangMem向量优先LangChain 配套LangChain 用户
Zep向量 + 图企业级,合规友好B2B AI 产品
SuperMemory向量个人助手定位消费级

新项目推荐:

  • 个人 / 项目级 → CLAUDE.md / MEMORY.md(轻)
  • 产品级有用户量 → mem0(全)
  • B2B 合规重要 → Zep

两个场景连接,左侧机器人往日记本写字,右侧机器人按问号查找特定页面

何时写入?

策略触发条件
显式(用户说「记一下」)安全,但用户得主动
自动综合(LLM 觉得重要)智能,但可能记错
规则触发(用户做了某件事)例如「访问 5 次后记 ta 是常客」

咱家 niu 是自动综合 —— 系统提示词里有规则,LLM 判断这个信息值不值得记

怎么选哪些记忆塞进上下文?

策略适用
全量加载记忆少(几十条),文件式
向量相似度大量记忆,按 query 检索 top-k
时序最新「最近 N 条」
实体匹配图数据库,按当前讨论的实体拉

人脑会忘事,agent 也得:

  • TTL(time-to-live):过 N 天自动清
  • 容量限制:超过 N 条删最旧的
  • 用户主动删:「忘掉我之前说的 X」
  • 冲突合并:新信息覆盖旧信息

很多产品漏掉遗忘策略,结果用户 3 个月后发现「它还记得我已经离职的那个公司」—— 尴尬。


⚠️ 隐私警告:secrets 永远不能进 memory

Section titled “⚠️ 隐私警告:secrets 永远不能进 memory”

一个机器人在 memory 仓库前举盾牌,挡住代表密码/密钥的图标

绝对不要写进 memory 的东西:

  • 密码 / API Token / SSH 密钥
  • 信用卡号 / 身份证号 / 手机号(除非业务必要)
  • 用户聊天里出现的 PII(姓名 / 邮箱 / 地址)
  • 公司机密(代码片段 / 合同条款 / 客户名单)

为什么:

  • Memory 文件可能被同步到云端、备份、git push
  • 多个 agent 共享 memory 时会扩散
  • 用户离开后,memory 是「遗留风险

实操:

  1. 写入前过滤:用正则 + 关键词 blacklist
  2. 存储加密:敏感字段单独加密
  3. 审计日志:记录 memory 何时被读 / 写
  4. 用户可见 + 可删:让用户能查看自己被记了啥 + 一键清

💡 咱家 niu 的 memory 规则里明确:「不记录密码/Token/API Key 明文到记忆文件」。这是 Feedback: secret 永远不进可见输出 那条规则的 memory 衍生。


Memory = agent 跨会话的脑子

  • 没 memory:金鱼脑,每次重启从零
  • 文件式:简单透明,适合个人 / 项目
  • 向量 + 图:规模化生产,适合用户量大的产品
  • 永远记得:secrets 不进 memory,忘记机制要设计

部署 agent 三件套之外的「第四件」就是 memory:

  1. 决策框架(ReAct)
  2. 协议(MCP)
  3. 工具集(6 类 API)
  4. Memory(就是这一篇)

配齐之后,你的 agent 才是「有人格、有记忆、能干活」的完整体。


评论

不记名、不需要注册——不要邮箱,不要手机号,不要任何身份信息,填个昵称就能留言。放心说。

  • 加载中 …