AI入门—— 一文读懂什么是AI Agent的Memory

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

一文读懂 Agent Memory:让 AI 智能体真正“记住你”的工程实践

很多 AI Agent Demo 看起来很聪明,但一旦进入真实使用,很快会暴露一个问题:

它每次都像第一次认识你。

你要反复告诉它项目背景、个人偏好、常用命令、代码规范、上次讨论到哪里。
这不是模型不够强,而是 Agent 缺少可控、可持续的 Memory(记忆)系统。

这篇文章结合 LangGraph Memory / PersistenceOpenAI Agents SDK SessionsClaude Code Memory 的设计,系统讲清楚:

  • Agent Memory 是什么
  • 为什么 Agent 需要 Memory
  • Memory 的类型和应用场景
  • Memory 与 Prompt、RAG、Skill、Rule 的区别
  • 基于现有 Agent 框架实现 Memory 的最佳实践

先说结论:Agent Memory 是什么?

Agent Memory 是让 AI Agent 在一次或多次任务之间保存、检索和更新上下文的机制。

它解决的不是“模型会不会推理”,而是“Agent 能不能记住”。
这些记忆可能包括:

  • 当前对话历史
  • 用户偏好
  • 项目结构
  • 已验证的命令
  • 业务规则
  • 历史任务结果
  • 长期用户画像
  • 可复用经验和决策

一个没有 Memory 的 Agent,只能依赖当前 prompt。
一个有 Memory 的 Agent,可以跨会话持续成长。


为什么需要 Memory?

1. 减少重复解释

没有 Memory 时,你每次都要重复:

  • “这个项目用 pnpm”
  • “回答请用中文”
  • “不要改生成文件”
  • “测试命令是 npm run test:unit”
  • “我偏好先给结论再给细节”

Memory 可以把这些长期稳定信息保存下来,让 Agent 自动带入后续任务。

2. 支持多轮任务连续性

复杂任务往往不是一轮完成的。
例如:

  1. 第一次让 Agent 阅读代码
  2. 第二次让它制定计划
  3. 第三次让它实现
  4. 第四次让它修 bug
  5. 第五次让它写总结

短期记忆能保存同一个 thread 中的历史状态,让 Agent 不需要每轮都从零开始。

3. 支持个性化体验

同一个 Agent 面向不同用户时,应该有不同表现:

  • 开发者希望输出命令和代码
  • 产品经理希望输出决策摘要
  • 运维工程师希望输出风险和回滚方案

长期用户记忆可以让 Agent 学会用户偏好。

4. 支持可恢复和可审计

生产级 Agent 不能只靠“上下文窗口”。
它需要能恢复任务、追踪状态、回放历史、排查问题。

LangGraph 的 persistence 就强调 checkpoint、thread 和 state,用于会话恢复、人类审批、调试和容错。


Memory 的常见类型

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

短期记忆保存同一个对话或任务 thread 内的状态。

典型内容:

  • 最近几轮消息
  • 当前任务进度
  • 中间工具结果
  • 临时变量
  • 人类审批状态

LangGraph 中,短期记忆通常通过 checkpointer 保存 thread state。
OpenAI Agents SDK 中,Session 会自动保存和恢复对话历史。

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

长期记忆跨会话、跨 thread 存在。

典型内容:

  • 用户偏好
  • 项目事实
  • 常用命令
  • 业务规则
  • 历史经验
  • 重要决策

LangGraph 的 long-term memory 通常使用 store,以 namespace + key 的形式保存 JSON 文档。

3. 语义记忆(Semantic Memory)

语义记忆保存事实性知识,例如:

  • “用户使用 Windows + PowerShell”
  • “项目后端在 services/api”
  • “公司要求接口变更必须兼容旧版本”

这类记忆常用结构化 JSON 或向量检索存储。

4. 情景记忆(Episodic Memory)

情景记忆保存“发生过什么”:

  • 某次排障过程
  • 某个 bug 的修复路径
  • 某次会议摘要
  • 某个任务的最终决策

它适合回顾、复盘和相似案例检索。

5. 程序性记忆(Procedural Memory)

程序性记忆保存“怎么做”:

  • 常用工作流
  • 排障 SOP
  • 代码发布步骤
  • 文档生成流程

这类内容往往应该从 Memory 升级为 Skill 或 Rule。


Memory、RAG、Prompt、Skill、Rule 的区别

概念解决什么问题典型内容
Prompt本轮任务要做什么用户即时指令
MemoryAgent 应该记住什么偏好、历史、事实、状态
RAG从外部知识库查什么文档、知识库、网页、数据库
Skill某类任务怎么做SOP、脚本、模板、流程
Rule始终必须遵守什么编码规范、安全边界、输出约束

简单判断:

  • 一次性目标:写 Prompt
  • 长期事实:写 Memory
  • 大量文档:用 RAG
  • 重复流程:做 Skill
  • 长期约束:写 Rule

Memory 的应用场景

场景一:个人 AI 助手

Memory 可以保存:

  • 用户语言偏好
  • 常用工具
  • 工作时间
  • 常见任务
  • 常用项目路径

这样 Agent 就能越来越像“专属助理”。

场景二:AI 编程助手

Memory 可以保存:

  • 项目结构
  • 构建命令
  • 测试命令
  • 代码规范
  • 常见错误修复方案

Claude Code 官方建议把构建命令、约定、项目布局、“always do X” 这类长期事实写入 CLAUDE.md

场景三:客服 Agent

Memory 可以保存:

  • 用户历史问题
  • 工单状态
  • 产品版本
  • 偏好渠道
  • 上次未解决事项

这样用户不会每次都重新解释背景。

场景四:企业知识助手

Memory 可以保存:

  • 用户所属团队
  • 常访问系统
  • 权限范围
  • 最近查询主题
  • 已确认的业务规则

同时,大量制度文档仍应放在 RAG 知识库,而不是全部塞进 Memory。

场景五:长期自动化 Agent

例如 Hermes Agent 这类长期在线 Agent,Memory 可以与 Skills、cron、消息网关结合:

  • 记住用户偏好
  • 沉淀任务经验
  • 定期推送报告
  • 从历史任务中学习

基于 LangGraph / LangChain 的 Memory 实践

LangGraph 对 Memory 的划分很清晰:

  • 短期记忆:thread-level state,通过 checkpoint 保存
  • 长期记忆:cross-thread memory,通过 store 保存

短期记忆:Checkpointer

最小示例:

from typing import Annotated, TypedDict
from langchain_core.messages import AnyMessage
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langgraph.checkpoint.memory import InMemorySaver

class AgentState(TypedDict):
    messages: Annotated[list[AnyMessage], add_messages]

def call_model(state: AgentState):
    response = model.invoke(state["messages"])
    return {"messages": [response]}

builder = StateGraph(AgentState)
builder.add_node("model", call_model)
builder.add_edge(START, "model")
builder.add_edge("model", END)

checkpointer = InMemorySaver()
graph = builder.compile(checkpointer=checkpointer)

graph.invoke(
    {"messages": [{"role": "user", "content": "我叫 Alice"}]},
    {"configurable": {"thread_id": "user-1"}}
)

生产环境不要用纯内存 checkpointer,建议用 Postgres、Redis 或其他持久化后端。

长期记忆:Store

长期记忆应该与 thread 解耦。
例如保存用户偏好:

from langgraph.store.memory import InMemoryStore

store = InMemoryStore()

namespace = ("users", "alice", "profile")
store.put(namespace, "preferences", {
    "language": "zh-CN",
    "answer_style": "先结论后细节",
    "preferred_shell": "PowerShell"
})

memory = store.get(namespace, "preferences")

LangGraph 最佳实践

  1. 短期记忆保存任务状态,长期记忆保存稳定事实
  2. 所有长期记忆都要有 namespace
  3. 不要把完整聊天记录当长期记忆
  4. 长期记忆写入前要做筛选和总结
  5. 敏感信息不要写入 Memory
  6. 生产环境使用数据库后端,而不是 InMemoryStore

基于 OpenAI Agents SDK 的 Memory 实践

OpenAI Agents SDK 使用 Session 管理会话历史。
Session 会在 Agent run 之间自动:

  1. 读取已有历史
  2. 合并本轮输入
  3. 执行 Agent
  4. 保存新的输入和输出

核心接口包括:

  • get_items(limit)
  • add_items(items)
  • pop_item()
  • clear_session()

Python Session 示例

from agents import Agent, Runner
from agents.memory import SQLiteSession

agent = Agent(
    name="Assistant",
    instructions="You are a helpful assistant."
)

session = SQLiteSession("user-123", "memory.db")

result = Runner.run_sync(
    agent,
    "记住我喜欢中文回答,并且先给结论。",
    session=session
)

result = Runner.run_sync(
    agent,
    "请解释什么是 RAG。",
    session=session
)

Session 适合:

  • 持久聊天状态
  • 可恢复审批流程
  • 多轮任务
  • 你能控制的存储后端

但它更偏“会话记忆”,如果要做用户画像、长期事实、跨 session 检索,仍建议单独设计长期 Memory store。


基于 Claude Code 的 Memory 实践

Claude Code 的 Memory 主要包括两类:

  1. CLAUDE.md:用户显式写入的持久说明
  2. Auto memory:Claude 从纠正和模式中自动沉淀的学习

CLAUDE.md 适合写:

  • 构建命令
  • 测试命令
  • 项目结构
  • 代码规范
  • 常见约定
  • 用户偏好

示例:

# Project Memory

## Commands

- Install dependencies with `pnpm install`.
- Run tests with `pnpm test`.
- Run lint with `pnpm lint`.

## Conventions

- Keep edits scoped to the user request.
- Do not modify generated files manually.
- Answer in Chinese unless asked otherwise.

Claude Code 还支持不同层级的 memory:

  • 企业/组织级
  • 项目级
  • 用户级
  • 本地覆盖

更具体的规则通常优先级更高。


基于 Hermes Agent 的 Memory 实践

Hermes Agent 把 Memory 作为长期在线 Agent 的核心能力之一。
它会把记忆放在本地 ~/.hermes/memories/,并与 Skills、消息网关、cron、子 Agent 协同。

典型目录:

~/.hermes/
├── memories/
├── skills/
├── sessions/
├── logs/
└── config.yaml

配置示例:

memory:
  memory_enabled: true
  user_profile_enabled: true
  memory_char_limit: 2200
  user_char_limit: 1375

Hermes 的思路更像“个人长期智能体”:

  • Memory 记住用户和项目
  • Skills 记住怎么做
  • cron 主动执行任务
  • gateway 跨平台触达用户

Memory 系统架构设计

一个生产级 Agent Memory 通常分成四层。

1. Session Store

保存当前会话或 thread 的消息历史和状态。

适合:

  • 多轮对话
  • 当前任务进度
  • 临时上下文

2. Profile Store

保存用户画像和偏好。

适合:

  • 语言
  • 风格
  • 时区
  • 常用工具
  • 权限范围

3. Knowledge Store

保存稳定知识或通过 RAG 检索的内容索引。

适合:

  • 项目文档
  • 产品手册
  • FAQ
  • 历史案例

4. Procedure Store

保存可复用流程。
这部分成熟后应该变成 Skill 或 Rule。


Memory 写入策略

Memory 最难的不是读取,而是写入。

什么应该写入?

适合写入:

  • 用户明确要求“记住”
  • 多次重复出现的偏好
  • 长期稳定的项目事实
  • 已验证的命令和路径
  • 重要决策和结论

不适合写入:

  • 临时情绪
  • 未验证猜测
  • 大段日志
  • 机密信息
  • 一次性任务细节

写入前要做总结

不要原样存聊天记录。
应该把对话压缩成短事实:

{
  "type": "preference",
  "subject": "response_style",
  "value": "用户偏好中文回答,先给结论再给细节",
  "confidence": 0.9,
  "source": "explicit_user_request",
  "updated_at": "2026-05-06"
}

给 Memory 加元数据

建议每条 memory 包含:

  • type
  • scope
  • user_id
  • project_id
  • confidence
  • source
  • created_at
  • updated_at
  • expires_at

Memory 检索策略

读取 Memory 时不要“全量塞入 prompt”。
应该按任务检索相关记忆。

推荐流程

  1. 识别当前任务类型
  2. 读取 session memory
  3. 检索用户偏好
  4. 检索项目相关事实
  5. 检索历史相似案例
  6. 组装最小必要上下文

伪代码:

def build_context(user_id, project_id, query):
    short_term = session_store.get_recent(thread_id=query.thread_id, limit=10)
    profile = memory_store.search(("users", user_id), query.text, top_k=3)
    project = memory_store.search(("projects", project_id), query.text, top_k=5)
    cases = memory_store.search(("episodes", project_id), query.text, top_k=3)

    return assemble_context(
        short_term=short_term,
        profile=profile,
        project=project,
        cases=cases
    )

Memory 的风险与治理

1. 错误记忆

Agent 可能把错误结论写成长期事实。
解决方案:

  • 写入时标注 confidence
  • 用户确认后再提升权重
  • 允许用户查看和删除记忆

2. 过期记忆

项目命令、路径、API 可能变化。
解决方案:

  • 设置 updated_at
  • 定期刷新
  • 对低置信度记忆重新验证

3. 隐私风险

Memory 可能保存敏感信息。
解决方案:

  • 禁止保存密钥、密码、token
  • 对 PII 做脱敏
  • 加密存储
  • 按用户隔离 namespace

4. 上下文污染

塞入太多 Memory 会降低回答质量。
解决方案:

  • top-k 检索
  • 摘要压缩
  • 按任务类型过滤
  • 只注入最小必要记忆

Memory 最佳实践清单

设计原则

  • 区分短期记忆和长期记忆
  • 区分事实、偏好、流程和历史事件
  • 先检索再注入,不要全量注入
  • 写入前总结,写入后可修改
  • 每条记忆都带来源和置信度
  • 敏感信息默认不写入

技术选型

  • 短期会话:Session / Checkpointer / Redis
  • 长期事实:Postgres / SQLite / KV Store
  • 语义检索:Vector DB
  • 审计回放:事件日志
  • 用户可控:Memory 管理 UI

工程落地

  • 开发期可用内存存储
  • 生产期使用数据库
  • 对团队项目做 namespace 隔离
  • 给用户提供“查看/删除/更新记忆”的入口
  • 对 memory 写入建立 eval 或人工确认

一个推荐架构

用户输入

Router 判断任务类型

读取 Session Memory

检索 User Profile

检索 Project Knowledge

检索 Episodic Memory

Context Builder

Agent 推理与工具调用

输出结果

是否值得写入长期记忆?

结束

总结/脱敏/加元数据

Memory Store


常见误区

误区一:把聊天记录全存起来就是 Memory

不是。
聊天记录只是原始材料,Memory 应该是筛选、总结、结构化后的长期有用信息。

误区二:Memory 可以替代 RAG

不能。
Memory 适合保存用户和任务相关的个性化事实,RAG 适合检索大规模外部知识。

误区三:Memory 越多越好

不是。
过多记忆会污染上下文,甚至让 Agent 坚持过期信息。

误区四:所有记忆都应该自动写入

高质量 Memory 需要写入门槛。
用户明确要求、重复出现、长期稳定、已验证的信息才值得写。


总结

Agent Memory 的本质,是让 AI 从“一次性问答系统”变成“可持续协作伙伴”。

你可以这样记:

  • 短期记忆保存当前任务连续性
  • 长期记忆保存跨会话事实和偏好
  • 语义记忆保存稳定知识
  • 情景记忆保存历史事件
  • 程序性记忆最终应该沉淀成 Skill 或 Rule

如果你正在构建生产级 Agent,建议从三件事开始:

  1. 用 Session 或 Checkpointer 管理短期会话状态
  2. 用独立 Store 管理长期用户偏好和项目事实
  3. 给 Memory 写入加上总结、脱敏、置信度和用户可控机制

Memory 不是越自动越好,而是越可控越可靠。

参考资料

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Numb_昵称被抢了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值