跳到主要内容
Cowers://
全部文章
Agent 架构

Agent 记忆架构

Agent 的记忆架构,最好不要只按“存在哪里”来设计,而要同时考虑 记忆类型、存储层、写入机制、检索机制、更新/遗忘机制。

Agent 的记忆架构,最好不要只按“存在哪里”来设计,而要同时考虑 记忆类型、存储层、写入机制、检索机制、更新/遗忘机制

一个比较完整的 Agent Memory Architecture 可以设计成下面这样:

                         ┌───────────────────────┐
                         │       Agent Loop      │
                         │  感知→思考→行动→反馈   │
                         └──────────┬────────────┘

                         ┌──────────▼───────────┐
                         │    Memory Manager    │
                         │      记忆管理器       │
                         └──────────┬───────────┘

         ┌──────────────────────────┼──────────────────────────┐
         │                          │                          │
         ▼                          ▼                          ▼
┌─────────────────┐       ┌─────────────────┐       ┌─────────────────┐
│ 工作记忆         │       │ 情景记忆         │       │ 语义记忆         │
│ Working Memory  │       │ Episodic Memory │       │ Semantic Memory │
├─────────────────┤       ├─────────────────┤       ├─────────────────┤
│ 当前对话         │       │ 历史对话         │       │ 用户偏好         │
│ 当前任务         │       │ 历史任务         │       │ 人物关系         │
│ Tool Result     │       │ Agent执行记录    │       │ 已知事实         │
│ 当前计划         │       │ 成功/失败案例    │       │ 实体/关系         │
└────────┬────────┘       └────────┬────────┘       └────────┬────────┘
         │                         │                         │
         ▼                         ▼                         ▼
 Context Window              Vector / SQL              Graph / SQL
 短期存储                    原始长期记忆               抽象长期记忆
 


                         ┌─────────────────────┐
                         │  Procedural Memory  │
                         │      程序记忆        │
                         ├─────────────────────┤
                         │ Skills              │
                         │ SOP                 │
                         │ Workflow            │
                         │ Tool使用经验         │
                         │ 问题解决策略         │
                         └─────────────────────┘

其中最关键的一点是:

记忆架构 ≠ Context + Vector DB + Graph DB。

这只是“存储架构”。真正的记忆系统核心其实是:

经历

Memory Write

记忆抽取

记忆分类

去重 / 合并 / 冲突处理

持久化

Memory Retrieval

相关性排序

注入 Context

Agent 使用

反馈

更新 / 强化 / 遗忘

1. 第一层:工作记忆 Working Memory

这是最短期的记忆,本质上就是 Agent 当前“脑子里正在想的东西”。

包括:

当前用户输入
当前对话
当前任务
当前计划
当前步骤
最近 Tool Result
临时变量
中间推理状态

例如:

{
  "goal": "帮用户设计RAG系统",
  "current_step": "设计retrieval",
  "constraints": [
    "使用Milvus",
    "需要hybrid search"
  ],
  "tool_results": []
}

主要放:

Context Window
Agent State
LangGraph State
Redis

它的特点是:

生命周期:分钟 ~ 小时
容量:小
读取频率:极高
准确性:高

2. 第二层:情景记忆 Episodic Memory

这是 Agent 的“经历”。

例如:

2026-08-20
用户问过 Milvus hybrid search
最终采用:
Dense + BM25 + RRF
 
2026-08-21
用户部署 Milvus 时出现:
DEADLINE_EXCEEDED
 
解决方法:
batch size 500 → 100
timeout 10s → 60s

注意,这层不应该只是简单保存:

User: xxx
Assistant: xxx
User: xxx
Assistant: xxx

更推荐保存成 Episode:

{
  "time": "2026-08-21",
  "topic": "Milvus写入失败",
  "context": "...",
  "problem": "DEADLINE_EXCEEDED",
  "actions": [
    "降低batch size",
    "增加timeout"
  ],
  "result": "success"
}

也就是说:

Conversation 是原始日志,Episode 才是真正有价值的情景记忆。

存储可以用:

PostgreSQL
+
Vector DB

Vector DB 主要解决:

“有没有发生过类似事情?”

例如现在出现:

Milvus insert timeout

就能召回以前:

Milvus DEADLINE_EXCEEDED

3. 第三层:语义记忆 Semantic Memory

这是非常重要的一层。

Agent 不应该每次都检索几十次历史对话来知道:

用户使用 Python
用户正在学习 Agent
用户项目用了 Milvus
用户喜欢紧凑的技术笔记

这些应该从 Episode 中不断抽取成 Semantic Memory:

Episode

Memory Extraction

Fact

例如:

用户项目使用 Milvus
用户偏好 Python
用户正在开发 RAG 项目

可以建成:

Entity:
User
 
Relation:
User --uses--> Milvus
User --learning--> Agent
User --developing--> RAG Project

所以:

Conversation

Episode

Semantic Memory

其实是一种逐级压缩:

100000 Token 原始对话
 

 
100 个 Episode
 

 
20 个稳定事实

这才是长期记忆真正应该做的事情。


4. 第四层:程序记忆 Procedural Memory

这个经常被 Agent Memory 设计忽略。

它不是:

“我知道什么?”

而是:

“我知道怎么做。”

比如 Agent 曾经完成过很多次:

部署 FastAPI
分析 Bug
创建 RAG Pipeline
写技术方案

逐渐可以形成:

Skill
SOP
Workflow
Playbook

例如:

Skill: diagnose_milvus_timeout
 
1. 检查网络
2. 检查batch size
3. 检查grpc timeout
4. 检查Milvus日志
5. 尝试小批量insert

下一次就不需要重新规划。

这也是为什么未来 Agent Memory 很可能和:

Memory
+
Skill

逐渐融合。


一个比较推荐的完整架构

可以拆成 6 层

┌──────────────────────────────────────┐
│              Agent                  │
│ LLM / Planner / Tools / Reflection  │
└──────────────────┬───────────────────┘


┌──────────────────────────────────────┐
│        ① Working Memory             │
│ Context / State / Scratchpad        │
└──────────────────┬───────────────────┘


┌──────────────────────────────────────┐
│        ② Conversation Log           │
│ 完整原始事件流                        │
│ PostgreSQL / Object Storage         │
└──────────────────┬───────────────────┘

             Memory Pipeline

       ┌───────────┼───────────┐
       ▼           ▼           ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│③ Episodic │ │④ Semantic  │ │⑤Procedural│
│ 情景记忆    │ │ 语义记忆    │ │ 程序记忆    │
│            │ │            │ │            │
│ 做过什么    │ │ 知道什么    │ │ 怎么做      │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘
      │              │              │
 Vector DB       Graph/SQL       Skill Store
      │              │              │
      └──────────────┼──────────────┘

          ┌──────────────────────┐
          │ ⑥ Memory Retrieval  │
          │ 检索 / 排序 / 融合    │
          └───────────┬──────────┘

                Context Injection

但是到这里仍然不够。

真正决定这个 Memory System 好不好用的是 Memory Manager


Memory Manager 才是核心

Memory Manager 至少负责 7 件事情:

1. Memory Write
2. Memory Extraction
3. Memory Consolidation
4. Memory Retrieval
5. Memory Ranking
6. Memory Update
7. Memory Forgetting

例如一段对话:

用户:
我的 RAG 项目以后统一用 Milvus,
不要再推荐 Pinecone。

Memory Manager 可以抽取:

{
  "subject": "user",
  "predicate": "preferred_vector_database",
  "object": "Milvus",
  "confidence": 0.98,
  "importance": 0.9,
  "source": "conversation_xxx",
  "created_at": "...",
  "last_accessed": "..."
}

如果以前有:

user --preferred_vector_database--> Pinecone

就不能简单新增一条:

user → Pinecone
user → Milvus

否则记忆冲突。

需要做:

旧记忆:
Pinecone
confidence ↓
status = superseded
 
新记忆:
Milvus
status = active

所以成熟的 Memory 其实还需要:

Version
Confidence
Importance
Timestamp
Source
Access Count
Decay
Superseded By

记忆检索也不能只是 Vector Search

这是另一个常见误区。

实际应该是:

                Query

       ┌──────────┼───────────┐
       ▼          ▼           ▼
 Semantic      Keyword      Graph
 Retrieval     Retrieval    Traversal
       │          │           │
       └──────────┼───────────┘

             Candidate


             Reranking

         ┌────────┼─────────┐
         │        │         │
      relevance importance recency
         │        │         │
         └────────┼─────────┘

            Top Memories


              Context

例如最终评分:

Memory Score =
0.4 × Semantic Similarity
+ 0.2 × Importance
+ 0.15 × Recency
+ 0.15 × Confidence
+ 0.1 × Access Frequency

具体权重当然可以调整。


还有一个非常重要的机制:记忆固化

可以借鉴人类:

短期记忆

经历

重复出现

总结

长期知识

Agent 可以周期性做:

Memory Consolidation

例如历史中出现:

Episode 1:
用户使用 Milvus
 
Episode 2:
用户 Milvus insert 报错
 
Episode 3:
用户询问 Milvus collection
 
Episode 4:
用户设计 Milvus hybrid search

Agent 可以固化:

Semantic Memory:
 
User Project

    └── Vector DB → Milvus

甚至进一步:

User
 └── Project
      └── RAG
           ├── Vector DB → Milvus
           ├── Retrieval → Hybrid Search
           └── Sparse → BM25

这时 Graph Memory 的价值才真正体现出来。


最后我会把 Agent Memory 总结成一个公式

Agent Memory
=
Working Memory
+
Episodic Memory
+
Semantic Memory
+
Procedural Memory
+
Memory Lifecycle

其中:

Working
= 当前正在发生什么
 
Episodic
= 过去发生过什么
 
Semantic
= 我知道什么
 
Procedural
= 我知道怎么做

而:

Memory Lifecycle
=
Write
→ Extract
→ Consolidate
→ Retrieve
→ Rank
→ Inject
→ Update
→ Forget

所以如果真正设计一个生产级 Agent,我不会采用简单的:

Context
→ Vector DB
→ Graph DB

而会采用:

                     Memory System
 
        ┌──────────── Working ────────────┐
        │                                 │
Agent ←─┼──── Memory Retrieval ←──────────┤
        │                                 │
        └──────────────┬──────────────────┘

              Memory Manager

         ┌─────────────┼─────────────┐
         │             │             │
      Episodic      Semantic      Procedural
         │             │             │
      Vector         Graph         Skills
         │             │             │
         └─────────────┼─────────────┘

                  Raw History

                Conversation Log

这里面真正的核心其实不是 Vector DB 或 Graph DB,而是中间这一层 Memory Manager / Memory Pipeline。数据库只是记忆的载体,什么时候记、记什么、怎么抽象、什么时候召回、什么时候覆盖、什么时候遗忘,才决定 Agent 是否真正具有“记忆”。