Agent记忆与检索

目录

  1. 认知科学基础
  2. 记忆系统架构
  3. 四种记忆类型
  4. MemoryTool核心操作
  5. 检索增强生成(RAG)系统
  6. 智能文档问答助手
  7. 学习要点与建议

1. 认知科学基础

1.1 人类记忆系统层次

人类记忆分为三个主要层次:

  • 感觉记忆:持续时间极短(0.5-3秒),容量巨大,临时保存感官信息
  • 工作记忆:持续时间短(15-30秒),容量有限(7±2个项目),负责当前任务
  • 长期记忆 :持续时间长(可达终生),容量几乎无限,分为:
    • 程序性记忆:技能和习惯(如骑自行车)
    • 陈述性记忆:语义记忆(知识和概念)+ 情景记忆(个人经历)

1.2 智能体的局限与解决方案

  • 无状态导致对话遗忘 → 引入记忆系统
  • 知识局限性 → 引入RAG(检索增强生成)技术

2. 记忆系统架构

2.0 记忆与RAG系统整体架构

记忆系统架构(四层架构)
复制代码
Agents记忆系统
├── 基础设施层 (Infrastructure Layer)
│   ├── MemoryManager - 记忆管理器(统一调度和协调)
│   ├── MemoryItem - 记忆数据结构(标准化记忆项)
│   ├── MemoryConfig - 配置管理(系统参数设置)
│   └── BaseMemory - 记忆基类(通用接口定义)
├── 记忆类型层 (Memory Types Layer)
│   ├── WorkingMemory - 工作记忆(临时信息,TTL管理)
│   ├── EpisodicMemory - 情景记忆(具体事件,时间序列)
│   ├── SemanticMemory - 语义记忆(抽象知识,图谱关系)
│   └── PerceptualMemory - 感知记忆(多模态数据)
├── 存储后端层 (Storage Backend Layer)
│   ├── QdrantVectorStore - 向量存储(高性能语义检索)
│   ├── Neo4jGraphStore - 图存储(知识图谱管理)
│   └── SQLiteDocumentStore - 文档存储(结构化持久化)
└── 嵌入服务层 (Embedding Service Layer)
    ├── DashScopeEmbedding - 通义千问嵌入(云端API)
    ├── LocalTransformerEmbedding - 本地嵌入(离线部署)
    └── TFIDFEmbedding - TFIDF嵌入(轻量级兜底)
RAG系统架构(四层架构)
复制代码
Agents RAG系统
├── 文档处理层 (Document Processing Layer)
│   ├── DocumentProcessor - 文档处理器(多格式解析)
│   ├── Document - 文档对象(元数据管理)
│   └── Pipeline - RAG管道(端到端处理)
├── 嵌入表示层 (Embedding Layer)
│   └── 统一嵌入接口 - 复用记忆系统的嵌入服务
├── 向量存储层 (Vector Storage Layer)
│   └── QdrantVectorStore - 向量数据库(命名空间隔离)
└── 智能问答层 (Intelligent Q&A Layer)
    ├── 多策略检索 - 向量检索 + MQE + HyDE
    ├── 上下文构建 - 智能片段合并与截断
    └── LLM增强生成 - 基于上下文的准确问答

图 2.0 Agents记忆与RAG系统整体架构

记忆系统和RAG系统是两个独立但可协同工作的工具:

  • memory_tool:负责存储和维护对话过程中的交互信息
  • rag_tool:负责从知识库中检索相关信息作为上下文,并可将重要结果自动存储到记忆系统中

2.1 记忆形成过程

记忆形成的五个阶段(认知过程)
复制代码
输入信息 → 编码 → 存储 → 检索 → 整合 → 遗忘
           ↓      ↓      ↓      ↓
         转换格式  保存信息  提取信息  短期→长期

记忆形成的具体阶段:

  1. 编码:将感知到的信息转换为可存储的形式
  2. 存储:将编码后的信息保存在记忆系统中
  3. 检索:根据需要从记忆中提取相关信息
  4. 整合:将短期记忆转化为长期记忆
  5. 遗忘:删除不重要或过时的信息

图 2.1 记忆形成的认知过程

人类记忆形成经历五个关键阶段:

  1. 编码:将信息转换为可存储的形式
  2. 存储:保存信息到记忆系统
  3. 检索:根据需要提取相关信息
  4. 整合:将短期记忆转为长期记忆
  5. 遗忘:删除不重要或过时的信息

2.2 记忆系统完整工作流程

记忆系统工作流程
复制代码
新信息进入
    ↓
[编码]:生成向量表示 + 添加元数据(时间戳、重要性等)
    ↓
[存储]:分发到相应的记忆模块
    │
    ├─→ 工作记忆(纯内存,TTL管理)
    ├─→ 情景记忆(SQLite+Qdrant)
    ├─→ 语义记忆(Neo4j+Qdrant)
    └─→ 感知记忆(Qdrant模态分离)
    ↓
[检索]:接收查询 → 多模块并行搜索 → 结果融合排序 → 返回
    ↓
[整合]:定期扫描 → 识别重要记忆 → 转换为长期记忆
    ↓
[遗忘]:三种策略:
        ├─ 基于重要性:删除低重要性记忆
        ├─ 基于时间:删除过期记忆
        └─ 基于容量:存储超限时删除最不重要记忆

图 2.2 Agents记忆系统的完整工作流程

2.2 四层架构设计

  • 基础设施层:MemoryManager(指挥中心)、MemoryItem(标准化记忆项)、MemoryConfig(配置管理)、BaseMemory(基类接口)
  • 记忆类型层:工作记忆、情景记忆、语义记忆、感知记忆
  • 存储后端层:Qdrant(向量存储)、Neo4j(知识图谱)、SQLite(文档存储)
  • 嵌入服务层:百炼API(云端)、本地模型(离线)、TF-IDF(兜底)

3. 四种记忆类型

3.0 具体例子说明:四种记忆在实际场景中的应用

为了更好地理解四种记忆类型的区别和用途,让我们用一个真实的**"个人学习助手"**场景来举例说明。

假设你正在构建一个帮助学生学习编程的智能助手,以下是四种记忆如何协同工作:

场景示例:学生"小明"正在学习Python
记忆类型(英文) 记忆类型(中文) 实际内容示例 存储方式 关键点说明
Working Memory 工作记忆 "小明刚才问了'Python列表怎么切片?',上一轮我们讲了索引从0开始,当前正在看第五章的内容" 纯内存存储 信息只在当前对话有用,需要极快的访问速度,对话结束后可以丢弃,不需要持久化到数据库
Episodic Memory 情景记忆 "2024年3月15日,小明完成了他的第一个Python程序:Hello World。3月18日,小明在做第三章习题时遇到了困难,我们一起解决了循环问题。3月20日,小明问了5个关于函数的问题,理解进展很好" SQLite+Qdrant混合存储 SQLite存储时间戳、会话ID等结构化数据,Qdrant存储向量表示便于语义检索,既可以按"3月的所有事件"查询,也可以按"Python相关的问题"检索
Semantic Memory 语义记忆 "小明喜欢用简洁的示例代码,更擅长理解用实际项目举例的概念,小明的目标是做Web开发,重点需要学习Django。Python是解释型语言,支持面向对象编程" Neo4j+Qdrant混合存储 Neo4j存储知识图谱:小明→目标→Web开发→需要学习→Django,Qdrant存储向量表示,可以推理:小明今天问了Python,那我应该提一下Django,适合存储用户偏好、领域知识等长期记忆
Perceptual Memory 感知记忆 "小明上传了一张他写的代码截图,里面有一个语法错误。小明发了一段他运行程序时的错误日志截图。小明分享了一个他参考的视频教程链接" Qdrant模态分离存储 每个模态(图像、音频)有独立的向量集合,用CLIP模型实现"用文本描述搜索图片",支持跨模态检索:"帮我找到小明上次上传的有语法错误的截图"
为什么选择不同的存储介质?

工作记忆为什么用纯内存?

想象一下,如果每次对话都要读写数据库来获取上一句话,响应会有多慢!工作记忆需要毫秒级的响应,所以必须存在内存里。而且这些临时信息对话结束后就没用了,不需要持久化。

情景记忆为什么用SQLite+Qdrant?

你可能想查"3月份小明学了什么",这需要按时间查询(SQLite擅长);也可能想查"小明遇到过什么循环问题",这需要语义搜索(Qdrant擅长)。两者结合,既有结构化查询的灵活性,又有语义检索的智能性。

语义记忆为什么用Neo4j+Qdrant?

纯向量搜索只能找到"相关"的知识,但知识图谱能理解"关系"。比如系统知道"小明→目标→Web开发→需要→Django",这就可以做推理:"小明今天问了Python,那我应该提一下Django,因为他想做Web开发"。这是纯向量检索做不到的。

感知记忆为什么用模态分离存储?

图片和文本的向量维度完全不同,如果硬塞在一起会互相干扰。分开存储,每个模态用专门的编码器,效果最好。而且CLIP模型可以让它们在语义空间中对齐,实现跨模态搜索。


3.1 四种记忆类型对比

记忆类型(英文) 记忆类型(中文) 特点 存储方式 评分重点 应用场景
Working Memory 工作记忆 容量有限(50条)+ TTL自动清理 纯内存 语义相似度 + 时间衰减 + 重要性权重 临时会话信息
Episodic Memory 情景记忆 长期存储事件和经历 SQLite+Qdrant 语义相似度 + 时间近因性 + 重要性 学习历程、交互事件
Semantic Memory 语义记忆 抽象知识和概念 Neo4j+Qdrant 语义相似度 + 图检索 + 重要性 用户偏好、领域知识
Perceptual Memory 感知记忆 多模态信息(图像、音频等) Qdrant(模态分离) 语义相似度 + 时间近因性 + 重要性 文档特征、多模态内容

3.2 工作记忆(Working Memory)

  • 纯内存存储,访问速度极快
  • TTL机制自动清理过期数据(默认60分钟)
  • 容量限制防止内存溢出(默认50条)
  • 混合检索策略:TF-IDF向量化 + 关键词匹配

3.3 情景记忆(Episodic Memory)

  • SQLite存储结构化元数据,Qdrant存储语义向量
  • 支持时间序列和会话级检索
  • 复杂评分机制:语义相似度(0.8权重)+ 时间近因性(0.2权重)
  • 适合记录具体事件和学习经历

3.4 语义记忆(Semantic Memory)

  • 知识图谱存储实体和关系,向量存储语义表示
  • 混合检索:向量检索(语义理解)+ 图检索(关系推理)
  • 评分公式:(向量×0.7 + 图检索×0.3)×重要性权重
  • 支持复杂的关系推理和知识发现

3.5 感知记忆(Perceptual Memory)

  • 模态分离的存储策略,支持文本、图像、音频检索
  • 使用CLIP模型实现跨模态语义对齐
  • 评分公式与情景记忆类似,但针对多模态进行优化
  • 适合处理文档特征和多媒体内容

4. MemoryTool核心操作

4.1 统一接口设计

MemoryTool提供统一的入口,支持所有记忆操作。核心操作包括:

  1. add(添加记忆) :支持四种类型,自动管理会话和元数据
    • 重要参数:content(内容)、memory_type(类型)、importance(重要性,0.0-1.0)
  2. search(搜索记忆):语义检索,支持类型和重要性过滤
  3. forget(遗忘记忆) :三种策略
    • 重要性策略:删除低于阈值的记忆
    • 时间策略:删除超过天数的记忆
    • 容量策略:存储超限时删除最不重要的记忆
  4. consolidate(整合记忆) :自动将重要的短期记忆转为长期记忆
    • 默认:工作记忆 → 情景记忆(重要性≥0.7)

5. 检索增强生成(RAG)系统

5.1 基本概念

RAG系统工作流程
复制代码
┌────────────────────────────────────────────────────────────────────┐
│                        数据准备阶段                               │
└────────────────────────────────────────────────────────────────────┘
任意格式文档(PDF/Word/图片/音频)
    ↓
MarkItDown统一转换
    ↓
Markdown文本
    ↓
智能分块(基于Markdown标题结构)
    ↓
向量化(嵌入模型)
    ↓
存储到Qdrant向量数据库

┌────────────────────────────────────────────────────────────────────┐
│                        查询与生成阶段                               │
└────────────────────────────────────────────────────────────────────┘
用户查询
    ↓
转换为向量表示
    ↓
Qdrant向量检索(支持MQE+HyDE)
    ↓
注入到LLM的prompt中
    ↓
生成包含来源参考的准确回答

图 5.1 RAG系统的核心工作原理

RAG(检索增强生成)是结合信息检索和文本生成的技术,流程分为两个主要模式:

数据处理流程:处理和存储知识文档

  • 使用MarkItDown将任意格式文档统一转换为Markdown格式
  • 基于Markdown结构进行智能分块
  • 对每个分块进行向量化
  • 存储到Qdrant向量数据库

查询与生成流程:根据查询检索相关信息并生成回答

  • 将用户查询转换为向量表示
  • 在向量数据库中检索相关文档分块
  • 将检索到的信息作为上下文注入到LLM的prompt中
  • 生成包含来源参考的准确回答

5.2 核心技术

5.2.1 多模态文档处理

使用MarkItDown统一转换:

  • 支持PDF、Word、Excel、图片、音频等格式
  • 图像通过OCR识别,音频通过转录
  • 一切格式 → Markdown格式
5.2.2 智能分块策略

基于Markdown结构的精确分割:

  1. 标题层次解析
  2. 段落语义分割
  3. Token计算分块(中英文混合支持)
  4. 重叠策略保持上下文连续性
5.2.3 高级检索策略
  • MQE(多查询扩展):生成语义等价的多样化查询,提升召回率30%-50%
  • HyDE(假设文档嵌入):生成假设答案文档,改善检索精度
  • 扩展检索框架:统一管理多种检索策略,支持并行执行和结果合并

6. 学习要点与建议

6.1 关键设计思想

  1. 认知科学启发:模仿人类记忆的分层架构
  2. 关注点分离:MemoryTool处理接口,MemoryManager负责核心逻辑
  3. 混合存储:向量存储(快速检索)+ 图存储(关系推理)+ 文档存储(元数据)
  4. 统一接口:单一入口,支持所有操作
  5. 自动化管理:TTL自动清理、智能整合、选择性遗忘

6.2 最佳实践

  • 选择合适的记忆类型:临时信息→工作记忆,事件→情景记忆,知识→语义记忆
  • 使用重要性参数:为重要信息设置高评分(≥0.7)
  • 定期整合:让系统自动提升重要记忆到长期存储
  • 合理配置分块:根据文档类型调整大小(默认1000Token)
  • 启用高级检索:MQE+HyDE提升专业领域问题的准确性

6.3 进阶方向

  • 多模态RAG:处理图像、音频、视频
  • 持续学习:让智能体从经历中学习
  • 记忆编辑:允许用户修正智能体的记忆
  • 性能优化:提升大知识库的检索速度

总结

复制代码
│
├── 1. 认知科学基础
│   ├── 人类记忆系统层次
│   │   ├── 感觉记忆(0.5-3秒)
│   │   ├── 工作记忆(15-30秒,7±2个项目)
│   │   └── 长期记忆
│   │       ├── 程序性记忆(技能和习惯)
│   │       └── 陈述性记忆
│   │           ├── 语义记忆(知识概念)
│   │           └── 情景记忆(个人经历)
│   └── 智能体的局限与解决方案
│       ├── 无状态导致对话遗忘 → 记忆系统
│       └── 知识局限性 → RAG系统
│
├── 2. 记忆系统架构
│   ├── 记忆形成过程
│   │   ├── 编码 → 存储 → 检索 → 整合 → 遗忘
│   ├── 四层架构设计
│   │   ├── 基础设施层:MemoryManager、MemoryItem、MemoryConfig、BaseMemory
│   │   ├── 记忆类型层:Working、Episodic、Semantic、Perceptual
│   │   ├── 存储后端层:Qdrant、Neo4j、SQLite
│   │   └── 嵌入服务层:DashScope、Local、TF-IDF
│   └── 完整工作流程:编码→存储→检索→整合→遗忘
│
├── 3. 四种记忆类型
│   ├── Working Memory(工作记忆):纯内存+TTL
│   ├── Episodic Memory(情景记忆):SQLite+Qdrant
│   ├── Semantic Memory(语义记忆):Neo4j+Qdrant
│   └── Perceptual Memory(感知记忆):Qdrant模态分离
│
├── 4. MemoryTool核心操作
│   ├── add:添加记忆
│   ├── search:搜索记忆
│   ├── forget:遗忘记忆(三种策略)
│   └── consolidate:整合记忆(短期→长期)
│
├── 5. RAG系统
│   ├── 数据处理流程:文档处理→分块→向量化→存储
│   ├── 查询与生成流程:查询→检索→增强→生成
│   ├── 核心技术
│   │   ├── 多模态文档处理(MarkItDown)
│   │   ├── 智能分块策略(基于Markdown)
│   │   └── 高级检索策略(MQE + HyDE)
│
├── 6. 智能文档问答助手
│   └── PDFLearningAssistant类:RAGTool + MemoryTool
│
└── 7. 学习要点与建议
    ├── 关键设计思想
    ├── 最佳实践
    └── 进阶方向

图 8.1 agents第八章知识总结

记忆系统让智能体能够"记住"过去,RAG系统让智能体能够"学习"新知。两者结合,构建了真正"智能"的助手。关键创新:

  1. 分层记忆架构:工作→情景→语义→感知,覆盖所有场景
  2. 认知科学算法:遗忘、整合、检索策略模拟人类大脑
  3. 统一文档处理:MarkItDown转换任意格式为标准Markdown
  4. 高级检索:MQE+HyDE解决用词差异和语义鸿沟
  5. 可扩展设计:支持云端、本地、混合部署方案

这种架构可以应用于:

  • 个人助理:记住用户偏好和习惯
  • 知识问答:基于文档提供专业解答
  • 客户服务:个性化服务和历史查询
  • 学习系统:追踪学习历程和进度
相关推荐
这张生成的图像能检测吗2 小时前
(论文速读)MoECLIP:零射异常检测补丁专家
人工智能·深度学习·计算机视觉·异常检测·clip·zero-shot方法
炽烈小老头2 小时前
【每日天学习一点算法 2026/03/31】不同路径
学习·算法
TOSUN同星2 小时前
研发周期缩短、成本压力大?同星云平台用“数字孪生+AI”重构研发模式
人工智能·重构
wzl202612132 小时前
从0到1搭建私域数据中台——公域引流的数据采集与分析
python·自动化·企业微信
计算机安禾2 小时前
【数据结构与算法】第17篇:串(String)的高级模式匹配:KMP算法
c语言·数据结构·学习·算法·visual studio code·visual studio·myeclipse
Deepoch2 小时前
Deepoc具身模型:让智能轮椅从“避障”转向“预判”
人工智能·科技·开发板·具身模型·deepoc
源码之家2 小时前
大数据毕业设计汽车推荐系统 Django框架 可视化 协同过滤算法 数据分析 大数据 机器学习(建议收藏)✅
大数据·python·算法·django·汽车·课程设计·美食
领尚2 小时前
OpenClaw 2026.3.28 使用model qwen 无法统计tokens使用量及费用的解决过程
ai
TopDawn2 小时前
自然语言处理
人工智能·自然语言处理