在第七章中,我们构建了HelloAgents框架的基础架构,实现了多种智能体范式和工具系统。不过,框架还缺少一个关键能力:记忆。如果智能体无法记住之前的交互内容,也无法从历史经验中学习,那么在连续对话或复杂任务中,其表现将受到极大限制。
本章将在第七章构建的框架基础上,为HelloAgents增加两个核心能力:记忆系统(Memory System)和检索增强生成(Retrieval-Augmented Generation, RAG)。我们将采用“框架扩展 + 知识科普”的方式,在构建过程中深入理解Memory和RAG的理论基础,最终实现一个具有完整记忆和知识检索能力的智能体系统。
📊 全文知识框架图
#mermaid-svg-aM7YFSkmCZCgemJv{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-aM7YFSkmCZCgemJv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aM7YFSkmCZCgemJv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aM7YFSkmCZCgemJv .error-icon{fill:#552222;}#mermaid-svg-aM7YFSkmCZCgemJv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aM7YFSkmCZCgemJv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aM7YFSkmCZCgemJv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aM7YFSkmCZCgemJv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aM7YFSkmCZCgemJv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aM7YFSkmCZCgemJv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aM7YFSkmCZCgemJv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aM7YFSkmCZCgemJv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aM7YFSkmCZCgemJv .marker.cross{stroke:#333333;}#mermaid-svg-aM7YFSkmCZCgemJv svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aM7YFSkmCZCgemJv p{margin:0;}#mermaid-svg-aM7YFSkmCZCgemJv .edge{stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .section–1 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section–1 path,#mermaid-svg-aM7YFSkmCZCgemJv .section–1 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section–1 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section–1 text{fill:#ffffff;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth–1{stroke-width:17;}#mermaid-svg-aM7YFSkmCZCgemJv .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-0 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-0 path,#mermaid-svg-aM7YFSkmCZCgemJv .section-0 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-0 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-0 text{fill:black;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon-0{font-size:40px;color:black;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth-0{stroke-width:14;}#mermaid-svg-aM7YFSkmCZCgemJv .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-1 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-1 path,#mermaid-svg-aM7YFSkmCZCgemJv .section-1 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-1 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-1 text{fill:black;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon-1{font-size:40px;color:black;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth-1{stroke-width:11;}#mermaid-svg-aM7YFSkmCZCgemJv .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-2 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-2 path,#mermaid-svg-aM7YFSkmCZCgemJv .section-2 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-2 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-2 text{fill:#ffffff;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth-2{stroke-width:8;}#mermaid-svg-aM7YFSkmCZCgemJv .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-3 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-3 path,#mermaid-svg-aM7YFSkmCZCgemJv .section-3 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-3 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-3 text{fill:black;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon-3{font-size:40px;color:black;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth-3{stroke-width:5;}#mermaid-svg-aM7YFSkmCZCgemJv .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-4 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-4 path,#mermaid-svg-aM7YFSkmCZCgemJv .section-4 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-4 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-4 text{fill:black;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon-4{font-size:40px;color:black;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth-4{stroke-width:2;}#mermaid-svg-aM7YFSkmCZCgemJv .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-5 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-5 path,#mermaid-svg-aM7YFSkmCZCgemJv .section-5 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-5 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-5 text{fill:black;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon-5{font-size:40px;color:black;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth-5{stroke-width:-1;}#mermaid-svg-aM7YFSkmCZCgemJv .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-6 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-6 path,#mermaid-svg-aM7YFSkmCZCgemJv .section-6 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-6 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-6 text{fill:black;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon-6{font-size:40px;color:black;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth-6{stroke-width:-4;}#mermaid-svg-aM7YFSkmCZCgemJv .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-7 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-7 path,#mermaid-svg-aM7YFSkmCZCgemJv .section-7 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-7 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-7 text{fill:black;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon-7{font-size:40px;color:black;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth-7{stroke-width:-7;}#mermaid-svg-aM7YFSkmCZCgemJv .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-8 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-8 path,#mermaid-svg-aM7YFSkmCZCgemJv .section-8 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-8 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-8 text{fill:black;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon-8{font-size:40px;color:black;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth-8{stroke-width:-10;}#mermaid-svg-aM7YFSkmCZCgemJv .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-9 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-9 path,#mermaid-svg-aM7YFSkmCZCgemJv .section-9 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-9 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-9 text{fill:black;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon-9{font-size:40px;color:black;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth-9{stroke-width:-13;}#mermaid-svg-aM7YFSkmCZCgemJv .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-10 rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-10 path,#mermaid-svg-aM7YFSkmCZCgemJv .section-10 circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-10 polygon,#mermaid-svg-aM7YFSkmCZCgemJv .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-10 text{fill:black;}#mermaid-svg-aM7YFSkmCZCgemJv .node-icon-10{font-size:40px;color:black;}#mermaid-svg-aM7YFSkmCZCgemJv .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .edge-depth-10{stroke-width:-16;}#mermaid-svg-aM7YFSkmCZCgemJv .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled,#mermaid-svg-aM7YFSkmCZCgemJv .disabled circle,#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:lightgray;}#mermaid-svg-aM7YFSkmCZCgemJv .disabled text{fill:#efefef;}#mermaid-svg-aM7YFSkmCZCgemJv .section-root rect,#mermaid-svg-aM7YFSkmCZCgemJv .section-root path,#mermaid-svg-aM7YFSkmCZCgemJv .section-root circle,#mermaid-svg-aM7YFSkmCZCgemJv .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-aM7YFSkmCZCgemJv .section-root text{fill:#ffffff;}#mermaid-svg-aM7YFSkmCZCgemJv .section-root span{color:#ffffff;}#mermaid-svg-aM7YFSkmCZCgemJv .section-2 span{color:#ffffff;}#mermaid-svg-aM7YFSkmCZCgemJv .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-aM7YFSkmCZCgemJv .edge{fill:none;}#mermaid-svg-aM7YFSkmCZCgemJv .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-aM7YFSkmCZCgemJv :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
记忆与检索
为什么需要记忆
大模型的两个局限
无状态导致对话遗忘
内置知识无法更新
智能体记忆的价值
多轮对话连贯性
用户个性化服务
经验持续积累
人类记忆的启发
感觉记忆
工作记忆
长期记忆
程序性记忆
陈述性记忆
语义记忆
情景记忆
智能体记忆架构
MemoryTool接口
MemoryManager
四种记忆类型
工作记忆
情景记忆
语义记忆
感知记忆
记忆巩固机制
RAG检索增强生成
RAG工作原理
文档处理管道
格式转换
语义分块
向量检索
检索策略
基础搜索
多查询扩展
HyDE
记忆与RAG协同
RAG作为工具
记忆自动存储
一、为什么智能体需要记忆与RAG?
1.1 大语言模型的两个根本性局限
当前的大语言模型虽然强大,但设计上是无状态的。这意味着,每一次用户请求都是一次独立的、无关联的计算。模型本身不会自动“记住”上一次对话的内容。
这带来了几个具体问题:
| 上下文丢失 | 在长对话中,早期的重要信息可能会因为上下文窗口限制而丢失 |
| 个性化缺失 | Agent无法记住用户的偏好、习惯或特定需求 |
| 学习能力受限 | 无法从过往的成功或失败经验中学习改进 |
| 一致性问题 | 在多轮对话中可能出现前后矛盾的回答 |
让我们通过一个具体例子来理解这个问题:当用户告诉智能体“我叫张三,正在学习Python,目前掌握了基础语法”后,智能体能够基于当前对话做出回应。但如果重启程序或开始新会话,智能体就会完全忘记之前的信息。
💡 通俗理解:无状态的智能体就像一个“健忘症患者”——每次对话都像第一次见面,记不住你是谁、你喜欢什么、你们之前聊过什么。
第二个局限是内置知识的局限。大语言模型的知识完全来自训练数据,存在两个问题:
- 知识截止日期:模型只知道训练数据截止时间之前的信息,无法获取最新的新闻、事件或数据
- 缺乏私有知识:模型不了解企业的内部文档、个人的私有笔记或特定领域的专业知识
1.2 记忆与RAG的价值
借鉴人类记忆系统的设计,我们可以理解为什么智能体也需要类似的记忆能力。人类智能的一个重要特征就是能够记住过去的经历,从中学习,并将这些经验应用到新的情况中。同样,一个真正智能的智能体也需要具备记忆能力。
记忆系统解决的是“遗忘”问题——让智能体能够记住用户的偏好、历史的对话、过往的经验,在多轮对话中保持一致性和个性化。
RAG(检索增强生成) 解决的是“无知”问题——让智能体能够在回答之前,先从外部知识库中检索相关信息,从而回答超出其训练数据范围的问题。
二、从认知科学到智能体记忆
2.1 人类记忆系统的启发
在构建智能体的记忆系统之前,让我们先从认知科学的角度理解人类是如何处理和存储信息的。人类记忆是一个多层级的认知系统,它不仅能存储信息,还能根据重要性、时间和上下文对信息进行分类和整理。
根据认知心理学的研究,人类记忆可以分为以下几个层次:
#mermaid-svg-527WjCb9vMhNSckr{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-527WjCb9vMhNSckr .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-527WjCb9vMhNSckr .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-527WjCb9vMhNSckr .error-icon{fill:#552222;}#mermaid-svg-527WjCb9vMhNSckr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-527WjCb9vMhNSckr .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-527WjCb9vMhNSckr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-527WjCb9vMhNSckr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-527WjCb9vMhNSckr .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-527WjCb9vMhNSckr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-527WjCb9vMhNSckr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-527WjCb9vMhNSckr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-527WjCb9vMhNSckr .marker.cross{stroke:#333333;}#mermaid-svg-527WjCb9vMhNSckr svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-527WjCb9vMhNSckr p{margin:0;}#mermaid-svg-527WjCb9vMhNSckr .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-527WjCb9vMhNSckr .cluster-label text{fill:#333;}#mermaid-svg-527WjCb9vMhNSckr .cluster-label span{color:#333;}#mermaid-svg-527WjCb9vMhNSckr .cluster-label span p{background-color:transparent;}#mermaid-svg-527WjCb9vMhNSckr .label text,#mermaid-svg-527WjCb9vMhNSckr span{fill:#333;color:#333;}#mermaid-svg-527WjCb9vMhNSckr .node rect,#mermaid-svg-527WjCb9vMhNSckr .node circle,#mermaid-svg-527WjCb9vMhNSckr .node ellipse,#mermaid-svg-527WjCb9vMhNSckr .node polygon,#mermaid-svg-527WjCb9vMhNSckr .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-527WjCb9vMhNSckr .rough-node .label text,#mermaid-svg-527WjCb9vMhNSckr .node .label text,#mermaid-svg-527WjCb9vMhNSckr .image-shape .label,#mermaid-svg-527WjCb9vMhNSckr .icon-shape .label{text-anchor:middle;}#mermaid-svg-527WjCb9vMhNSckr .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-527WjCb9vMhNSckr .rough-node .label,#mermaid-svg-527WjCb9vMhNSckr .node .label,#mermaid-svg-527WjCb9vMhNSckr .image-shape .label,#mermaid-svg-527WjCb9vMhNSckr .icon-shape .label{text-align:center;}#mermaid-svg-527WjCb9vMhNSckr .node.clickable{cursor:pointer;}#mermaid-svg-527WjCb9vMhNSckr .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-527WjCb9vMhNSckr .arrowheadPath{fill:#333333;}#mermaid-svg-527WjCb9vMhNSckr .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-527WjCb9vMhNSckr .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-527WjCb9vMhNSckr .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-527WjCb9vMhNSckr .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-527WjCb9vMhNSckr .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-527WjCb9vMhNSckr .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-527WjCb9vMhNSckr .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-527WjCb9vMhNSckr .cluster text{fill:#333;}#mermaid-svg-527WjCb9vMhNSckr .cluster span{color:#333;}#mermaid-svg-527WjCb9vMhNSckr div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-527WjCb9vMhNSckr .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-527WjCb9vMhNSckr rect.text{fill:none;stroke-width:0;}#mermaid-svg-527WjCb9vMhNSckr .icon-shape,#mermaid-svg-527WjCb9vMhNSckr .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-527WjCb9vMhNSckr .icon-shape p,#mermaid-svg-527WjCb9vMhNSckr .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-527WjCb9vMhNSckr .icon-shape .label rect,#mermaid-svg-527WjCb9vMhNSckr .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-527WjCb9vMhNSckr .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-527WjCb9vMhNSckr .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-527WjCb9vMhNSckr :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
长期记忆细分
人类记忆层次结构
🌊 感觉记忆Sensory Memory━━━━━━━━━━━持续时间: 0.5-3秒容量: 巨大
💭 工作记忆Working Memory━━━━━━━━━━━持续时间: 15-30秒容量: 7±2个项目
📚 长期记忆Long-term Memory━━━━━━━━━━━持续时间: 可达终生容量: 几乎无限
⚡ 程序性记忆技能和习惯
📖 陈述性记忆可用语言表达
🔍 语义记忆一般知识和概念
📅 情景记忆个人经历和事件
感觉记忆(Sensory Memory):持续时间极短(0.5-3秒),容量巨大,负责暂时保存感官接收到的所有信息。就像智能体的“输入缓冲区”——瞬间接收大量信息,但大部分很快消失。
工作记忆(Working Memory):持续时间短(15-30秒),容量有限(7±2个项目),负责当前任务的信息处理。就像智能体的“对话上下文”——当前正在处理的信息,容量有限,过期即忘。
长期记忆(Long-term Memory):持续时间长(可达终生),容量几乎无限,进一步分为:
- 程序性记忆:技能和习惯(如骑自行车)——对应智能体的“工具使用能力”
- 陈述性记忆:可以用语言表达的知识,又分为:
- 语义记忆(Semantic Memory) :一般知识和概念(如“巴黎是法国首都”)——对应智能体从训练数据中获取的世界知识
- 情景记忆(Episodic Memory) :个人经历和事件(如“昨天的会议内容”)——对应智能体与特定用户的交互历史
2.2 从人类记忆到智能体记忆的映射
下表直观展示了人类记忆类型与智能体实现之间的对应关系:
| 感觉记忆(Sensory Memory) | 输入缓冲区 | 瞬时接收用户输入,快速过滤,大部分信息即刻消失 |
| 工作记忆(Working Memory) | 对话上下文(短期) | 当前会话的最近几轮对话,容量有限,过期即忘 |
| 程序性记忆(Procedural Memory) | 工具调用能力 | 如何使用工具、API的技能,一旦学会不易忘记 |
| 语义记忆(Semantic Memory) | 知识库/RAG | 从文档中检索的事实和概念,如“巴黎是法国首都” |
| 情景记忆(Episodic Memory) | 持久化记忆存储 | 用户偏好、历史交互、个人经历,如“张三昨天问了Python问题” |
三、智能体记忆系统的架构设计
3.1 整体架构
HelloAgents的记忆系统实现了一种分层架构,以统一的工具接口作为用户面对的前端,由管理器协调四种专门的记忆类型。
#mermaid-svg-UZU3kgyflzn0BMuW{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UZU3kgyflzn0BMuW .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UZU3kgyflzn0BMuW .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UZU3kgyflzn0BMuW .error-icon{fill:#552222;}#mermaid-svg-UZU3kgyflzn0BMuW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UZU3kgyflzn0BMuW .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UZU3kgyflzn0BMuW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UZU3kgyflzn0BMuW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UZU3kgyflzn0BMuW .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UZU3kgyflzn0BMuW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UZU3kgyflzn0BMuW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UZU3kgyflzn0BMuW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UZU3kgyflzn0BMuW .marker.cross{stroke:#333333;}#mermaid-svg-UZU3kgyflzn0BMuW svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UZU3kgyflzn0BMuW p{margin:0;}#mermaid-svg-UZU3kgyflzn0BMuW .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-UZU3kgyflzn0BMuW .cluster-label text{fill:#333;}#mermaid-svg-UZU3kgyflzn0BMuW .cluster-label span{color:#333;}#mermaid-svg-UZU3kgyflzn0BMuW .cluster-label span p{background-color:transparent;}#mermaid-svg-UZU3kgyflzn0BMuW .label text,#mermaid-svg-UZU3kgyflzn0BMuW span{fill:#333;color:#333;}#mermaid-svg-UZU3kgyflzn0BMuW .node rect,#mermaid-svg-UZU3kgyflzn0BMuW .node circle,#mermaid-svg-UZU3kgyflzn0BMuW .node ellipse,#mermaid-svg-UZU3kgyflzn0BMuW .node polygon,#mermaid-svg-UZU3kgyflzn0BMuW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UZU3kgyflzn0BMuW .rough-node .label text,#mermaid-svg-UZU3kgyflzn0BMuW .node .label text,#mermaid-svg-UZU3kgyflzn0BMuW .image-shape .label,#mermaid-svg-UZU3kgyflzn0BMuW .icon-shape .label{text-anchor:middle;}#mermaid-svg-UZU3kgyflzn0BMuW .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UZU3kgyflzn0BMuW .rough-node .label,#mermaid-svg-UZU3kgyflzn0BMuW .node .label,#mermaid-svg-UZU3kgyflzn0BMuW .image-shape .label,#mermaid-svg-UZU3kgyflzn0BMuW .icon-shape .label{text-align:center;}#mermaid-svg-UZU3kgyflzn0BMuW .node.clickable{cursor:pointer;}#mermaid-svg-UZU3kgyflzn0BMuW .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UZU3kgyflzn0BMuW .arrowheadPath{fill:#333333;}#mermaid-svg-UZU3kgyflzn0BMuW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UZU3kgyflzn0BMuW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UZU3kgyflzn0BMuW .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UZU3kgyflzn0BMuW .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UZU3kgyflzn0BMuW .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UZU3kgyflzn0BMuW .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UZU3kgyflzn0BMuW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UZU3kgyflzn0BMuW .cluster text{fill:#333;}#mermaid-svg-UZU3kgyflzn0BMuW .cluster span{color:#333;}#mermaid-svg-UZU3kgyflzn0BMuW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UZU3kgyflzn0BMuW .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UZU3kgyflzn0BMuW rect.text{fill:none;stroke-width:0;}#mermaid-svg-UZU3kgyflzn0BMuW .icon-shape,#mermaid-svg-UZU3kgyflzn0BMuW .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UZU3kgyflzn0BMuW .icon-shape p,#mermaid-svg-UZU3kgyflzn0BMuW .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UZU3kgyflzn0BMuW .icon-shape .label rect,#mermaid-svg-UZU3kgyflzn0BMuW .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UZU3kgyflzn0BMuW .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UZU3kgyflzn0BMuW .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UZU3kgyflzn0BMuW :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
四种记忆类型
智能体记忆架构
🤖 智能体Agent
🔧 记忆工具统一工具接口
📋 记忆管理器MemoryManager
💭 工作记忆WorkingMemory━━━━━━━━━━━• 容量限制: 50项• TTL: 60分钟• 存储: 内存Dict
📅 情景记忆EpisodicMemory━━━━━━━━━━━• 事件序列• 时间上下文• 存储: SQLite+Qdrant
🔍 语义记忆SemanticMemory━━━━━━━━━━━• 事实与概念• 实体关系• 存储: Neo4j+Qdrant
🖼️ 感知记忆PerceptualMemory━━━━━━━━━━━• 多模态数据• 图像/文档• 存储: 向量库
3.2 统一工具接口
记忆系统以统一的工具接口对外提供服务,支持以下操作:
| add | 存储新记忆 | 全部 |
| search | 查询记忆 | 全部 |
| summary | 获取记忆概览 | 全部 |
| stats | 系统统计信息 | — |
| update | 修改已有记忆 | 全部 |
| remove | 删除特定记忆 | 全部 |
| forget | 删除低重要性记忆 | 全部 |
| consolidate | 在记忆类型间迁移 | 工作→其他 |
| clear_all | 重置系统 | 全部 |
3.3 四种记忆类型的深度解析
(1)工作记忆(Working Memory)
工作记忆实现了容量受限(默认50项)、时间受限(默认60分钟TTL)的内存存储,用于即时任务上下文。它结合了语义搜索和近因评分两种检索策略。
💡 通俗理解:工作记忆就像你的“便签纸”——容量有限,写满就撕,过一会儿就忘,但读写速度最快。
(2)情景记忆(Episodic Memory)
情景记忆使用SQLite存储结构化数据、Qdrant(向量数据库)进行语义搜索,存储带有丰富上下文元数据的事件序列。每条记忆都包含时间戳、会话ID和任意元数据字段。
💡 通俗理解:情景记忆就像你的“日记本”——按时间顺序记录发生了什么、什么时候发生的、和谁一起发生的。
(3)语义记忆(Semantic Memory)
语义记忆使用Neo4j(图数据库)构建知识图谱(实体-关系建模),配合Qdrant进行概念向量检索。它支持概念层次结构和实体链接。
💡 通俗理解:语义记忆就像你的“百科全书”——存储的是“巴黎是法国首都”这类事实性知识,而不是“我昨天去了巴黎”这类个人经历。
(4)感知记忆(Perceptual Memory)
感知记忆处理多模态数据(文本、图像、音频等),使用向量存储作为后端。
💡 通俗理解:感知记忆就像你的“相册”——存储的是图片、声音等感官信息,而不仅仅是文字。
⚠️ 注意区分:这里的“感知记忆(Perceptual Memory)”与认知科学中的“感觉记忆(Sensory Memory)”不同。感觉记忆是记忆系统的第一层,负责瞬时接收感官输入(持续0.5-3秒);而感知记忆是智能体架构中的一种存储类型,负责持久化存储多模态数据。两者概念层级不同,不要混淆。
3.4 记忆巩固:从短期到长期的迁移
记忆系统实现了一个consolidate操作,根据重要性阈值将重要信息从短期记忆(工作记忆)迁移到长期记忆(情景记忆)。
#mermaid-svg-1E90bl9ztrqN5zzc{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1E90bl9ztrqN5zzc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1E90bl9ztrqN5zzc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1E90bl9ztrqN5zzc .error-icon{fill:#552222;}#mermaid-svg-1E90bl9ztrqN5zzc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1E90bl9ztrqN5zzc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1E90bl9ztrqN5zzc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1E90bl9ztrqN5zzc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1E90bl9ztrqN5zzc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1E90bl9ztrqN5zzc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1E90bl9ztrqN5zzc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1E90bl9ztrqN5zzc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1E90bl9ztrqN5zzc .marker.cross{stroke:#333333;}#mermaid-svg-1E90bl9ztrqN5zzc svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1E90bl9ztrqN5zzc p{margin:0;}#mermaid-svg-1E90bl9ztrqN5zzc .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-1E90bl9ztrqN5zzc .cluster-label text{fill:#333;}#mermaid-svg-1E90bl9ztrqN5zzc .cluster-label span{color:#333;}#mermaid-svg-1E90bl9ztrqN5zzc .cluster-label span p{background-color:transparent;}#mermaid-svg-1E90bl9ztrqN5zzc .label text,#mermaid-svg-1E90bl9ztrqN5zzc span{fill:#333;color:#333;}#mermaid-svg-1E90bl9ztrqN5zzc .node rect,#mermaid-svg-1E90bl9ztrqN5zzc .node circle,#mermaid-svg-1E90bl9ztrqN5zzc .node ellipse,#mermaid-svg-1E90bl9ztrqN5zzc .node polygon,#mermaid-svg-1E90bl9ztrqN5zzc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1E90bl9ztrqN5zzc .rough-node .label text,#mermaid-svg-1E90bl9ztrqN5zzc .node .label text,#mermaid-svg-1E90bl9ztrqN5zzc .image-shape .label,#mermaid-svg-1E90bl9ztrqN5zzc .icon-shape .label{text-anchor:middle;}#mermaid-svg-1E90bl9ztrqN5zzc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-1E90bl9ztrqN5zzc .rough-node .label,#mermaid-svg-1E90bl9ztrqN5zzc .node .label,#mermaid-svg-1E90bl9ztrqN5zzc .image-shape .label,#mermaid-svg-1E90bl9ztrqN5zzc .icon-shape .label{text-align:center;}#mermaid-svg-1E90bl9ztrqN5zzc .node.clickable{cursor:pointer;}#mermaid-svg-1E90bl9ztrqN5zzc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-1E90bl9ztrqN5zzc .arrowheadPath{fill:#333333;}#mermaid-svg-1E90bl9ztrqN5zzc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1E90bl9ztrqN5zzc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1E90bl9ztrqN5zzc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1E90bl9ztrqN5zzc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-1E90bl9ztrqN5zzc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1E90bl9ztrqN5zzc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-1E90bl9ztrqN5zzc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1E90bl9ztrqN5zzc .cluster text{fill:#333;}#mermaid-svg-1E90bl9ztrqN5zzc .cluster span{color:#333;}#mermaid-svg-1E90bl9ztrqN5zzc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1E90bl9ztrqN5zzc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-1E90bl9ztrqN5zzc rect.text{fill:none;stroke-width:0;}#mermaid-svg-1E90bl9ztrqN5zzc .icon-shape,#mermaid-svg-1E90bl9ztrqN5zzc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1E90bl9ztrqN5zzc .icon-shape p,#mermaid-svg-1E90bl9ztrqN5zzc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-1E90bl9ztrqN5zzc .icon-shape .label rect,#mermaid-svg-1E90bl9ztrqN5zzc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1E90bl9ztrqN5zzc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-1E90bl9ztrqN5zzc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-1E90bl9ztrqN5zzc :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
记忆巩固流程
定期检查
是
是
否
💭 工作记忆短期存储
重要性≥阈值?
📅 情景记忆长期存储
🔍 语义记忆知识图谱
🗑️ 标记为低优先级容量不足时优先清理
这一机制模仿了人类大脑的“记忆巩固”过程——重要的短期记忆被转化为长期记忆,不重要的则被标记为低优先级,在容量不足时优先清理。
四、RAG:检索增强生成
4.1 什么是RAG?
检索增强生成(Retrieval-Augmented Generation, RAG) 是一种将信息检索与大语言模型生成能力相结合的技术框架。
简单来说,RAG的工作流程是:
#mermaid-svg-urAqShs4ioh0UpZz{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-urAqShs4ioh0UpZz .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-urAqShs4ioh0UpZz .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-urAqShs4ioh0UpZz .error-icon{fill:#552222;}#mermaid-svg-urAqShs4ioh0UpZz .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-urAqShs4ioh0UpZz .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-urAqShs4ioh0UpZz .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-urAqShs4ioh0UpZz .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-urAqShs4ioh0UpZz .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-urAqShs4ioh0UpZz .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-urAqShs4ioh0UpZz .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-urAqShs4ioh0UpZz .marker{fill:#333333;stroke:#333333;}#mermaid-svg-urAqShs4ioh0UpZz .marker.cross{stroke:#333333;}#mermaid-svg-urAqShs4ioh0UpZz svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-urAqShs4ioh0UpZz p{margin:0;}#mermaid-svg-urAqShs4ioh0UpZz .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-urAqShs4ioh0UpZz .cluster-label text{fill:#333;}#mermaid-svg-urAqShs4ioh0UpZz .cluster-label span{color:#333;}#mermaid-svg-urAqShs4ioh0UpZz .cluster-label span p{background-color:transparent;}#mermaid-svg-urAqShs4ioh0UpZz .label text,#mermaid-svg-urAqShs4ioh0UpZz span{fill:#333;color:#333;}#mermaid-svg-urAqShs4ioh0UpZz .node rect,#mermaid-svg-urAqShs4ioh0UpZz .node circle,#mermaid-svg-urAqShs4ioh0UpZz .node ellipse,#mermaid-svg-urAqShs4ioh0UpZz .node polygon,#mermaid-svg-urAqShs4ioh0UpZz .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-urAqShs4ioh0UpZz .rough-node .label text,#mermaid-svg-urAqShs4ioh0UpZz .node .label text,#mermaid-svg-urAqShs4ioh0UpZz .image-shape .label,#mermaid-svg-urAqShs4ioh0UpZz .icon-shape .label{text-anchor:middle;}#mermaid-svg-urAqShs4ioh0UpZz .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-urAqShs4ioh0UpZz .rough-node .label,#mermaid-svg-urAqShs4ioh0UpZz .node .label,#mermaid-svg-urAqShs4ioh0UpZz .image-shape .label,#mermaid-svg-urAqShs4ioh0UpZz .icon-shape .label{text-align:center;}#mermaid-svg-urAqShs4ioh0UpZz .node.clickable{cursor:pointer;}#mermaid-svg-urAqShs4ioh0UpZz .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-urAqShs4ioh0UpZz .arrowheadPath{fill:#333333;}#mermaid-svg-urAqShs4ioh0UpZz .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-urAqShs4ioh0UpZz .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-urAqShs4ioh0UpZz .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-urAqShs4ioh0UpZz .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-urAqShs4ioh0UpZz .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-urAqShs4ioh0UpZz .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-urAqShs4ioh0UpZz .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-urAqShs4ioh0UpZz .cluster text{fill:#333;}#mermaid-svg-urAqShs4ioh0UpZz .cluster span{color:#333;}#mermaid-svg-urAqShs4ioh0UpZz div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-urAqShs4ioh0UpZz .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-urAqShs4ioh0UpZz rect.text{fill:none;stroke-width:0;}#mermaid-svg-urAqShs4ioh0UpZz .icon-shape,#mermaid-svg-urAqShs4ioh0UpZz .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-urAqShs4ioh0UpZz .icon-shape p,#mermaid-svg-urAqShs4ioh0UpZz .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-urAqShs4ioh0UpZz .icon-shape .label rect,#mermaid-svg-urAqShs4ioh0UpZz .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-urAqShs4ioh0UpZz .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-urAqShs4ioh0UpZz .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-urAqShs4ioh0UpZz :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
RAG工作流程
❓ 用户提问
🔍 检索从知识库中搜索相关文档
📝 构建上下文原始问题 + 检索结果
🤖 生成回答大语言模型
✅ 最终答案
4.2 为什么需要RAG?
RAG解决了大语言模型的两个核心痛点:
| 知识截止日期 | 从外部知识库检索最新信息,突破训练数据的时间限制 |
| 缺乏私有知识 | 从企业文档、个人笔记等私有数据源中检索,让模型“知道”它从未被训练过的内容 |
| 幻觉问题 | 检索到的真实信息作为上下文约束,减少模型编造的可能性 |
💡 通俗理解:RAG就像给大模型配了一个“图书馆管理员”——模型回答问题前,管理员先去图书馆(知识库)找到相关的书(文档片段),然后把书递给模型看,模型再根据书的内容回答。这样模型就不需要“背”下所有知识,只需要“读懂”找到的资料。
4.3 RAG文档处理管道
RAG使用一个多阶段的管道来处理文档:
#mermaid-svg-TGvAMD4pRtwSBeCI{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TGvAMD4pRtwSBeCI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TGvAMD4pRtwSBeCI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TGvAMD4pRtwSBeCI .error-icon{fill:#552222;}#mermaid-svg-TGvAMD4pRtwSBeCI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TGvAMD4pRtwSBeCI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TGvAMD4pRtwSBeCI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TGvAMD4pRtwSBeCI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TGvAMD4pRtwSBeCI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TGvAMD4pRtwSBeCI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TGvAMD4pRtwSBeCI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TGvAMD4pRtwSBeCI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TGvAMD4pRtwSBeCI .marker.cross{stroke:#333333;}#mermaid-svg-TGvAMD4pRtwSBeCI svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TGvAMD4pRtwSBeCI p{margin:0;}#mermaid-svg-TGvAMD4pRtwSBeCI .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-TGvAMD4pRtwSBeCI .cluster-label text{fill:#333;}#mermaid-svg-TGvAMD4pRtwSBeCI .cluster-label span{color:#333;}#mermaid-svg-TGvAMD4pRtwSBeCI .cluster-label span p{background-color:transparent;}#mermaid-svg-TGvAMD4pRtwSBeCI .label text,#mermaid-svg-TGvAMD4pRtwSBeCI span{fill:#333;color:#333;}#mermaid-svg-TGvAMD4pRtwSBeCI .node rect,#mermaid-svg-TGvAMD4pRtwSBeCI .node circle,#mermaid-svg-TGvAMD4pRtwSBeCI .node ellipse,#mermaid-svg-TGvAMD4pRtwSBeCI .node polygon,#mermaid-svg-TGvAMD4pRtwSBeCI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TGvAMD4pRtwSBeCI .rough-node .label text,#mermaid-svg-TGvAMD4pRtwSBeCI .node .label text,#mermaid-svg-TGvAMD4pRtwSBeCI .image-shape .label,#mermaid-svg-TGvAMD4pRtwSBeCI .icon-shape .label{text-anchor:middle;}#mermaid-svg-TGvAMD4pRtwSBeCI .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TGvAMD4pRtwSBeCI .rough-node .label,#mermaid-svg-TGvAMD4pRtwSBeCI .node .label,#mermaid-svg-TGvAMD4pRtwSBeCI .image-shape .label,#mermaid-svg-TGvAMD4pRtwSBeCI .icon-shape .label{text-align:center;}#mermaid-svg-TGvAMD4pRtwSBeCI .node.clickable{cursor:pointer;}#mermaid-svg-TGvAMD4pRtwSBeCI .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TGvAMD4pRtwSBeCI .arrowheadPath{fill:#333333;}#mermaid-svg-TGvAMD4pRtwSBeCI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TGvAMD4pRtwSBeCI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TGvAMD4pRtwSBeCI .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TGvAMD4pRtwSBeCI .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TGvAMD4pRtwSBeCI .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TGvAMD4pRtwSBeCI .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TGvAMD4pRtwSBeCI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TGvAMD4pRtwSBeCI .cluster text{fill:#333;}#mermaid-svg-TGvAMD4pRtwSBeCI .cluster span{color:#333;}#mermaid-svg-TGvAMD4pRtwSBeCI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TGvAMD4pRtwSBeCI .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TGvAMD4pRtwSBeCI rect.text{fill:none;stroke-width:0;}#mermaid-svg-TGvAMD4pRtwSBeCI .icon-shape,#mermaid-svg-TGvAMD4pRtwSBeCI .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TGvAMD4pRtwSBeCI .icon-shape p,#mermaid-svg-TGvAMD4pRtwSBeCI .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TGvAMD4pRtwSBeCI .icon-shape .label rect,#mermaid-svg-TGvAMD4pRtwSBeCI .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TGvAMD4pRtwSBeCI .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TGvAMD4pRtwSBeCI .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TGvAMD4pRtwSBeCI :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
RAG文档处理管道
📄 原始文档PDF/DOCX/TXT
🔄 格式转换统一为Markdown
✂️ 语义分块1000 tokens, 200 overlap
📊 向量化生成Embedding
💾 存储向量数据库
🔍 检索语义搜索
第一步:格式转换。将PDF、DOCX等格式统一转换为Markdown格式,统一文本处理标准。
第二步:语义分块。将长文档切分成语义完整的片段(默认1000 tokens,重叠200 tokens),保证每个片段都有独立的语义完整性。
第三步:向量化与存储。将每个文本片段转换为向量(Embedding),存储到向量数据库中。向量是文本的数学表示,通常使用余弦相似度或欧几里得距离来衡量向量之间的相似程度。
第四步:检索。当用户提问时,将问题也转换为向量,在向量数据库中搜索最相似的文档片段。
4.4 三种检索策略
RAG支持三种检索策略:
| 基础搜索 | Basic Search | 直接将用户问题向量化,检索最相似的文档 | 简单直接的问答 |
| MQE | Multi-Query Expansion | 将用户问题扩展为多个相关查询,分别检索后合并结果 | 复杂问题、需要多角度信息 |
| HyDE | Hypothetical Document Embedding | 先用LLM生成一个“假设性答案”,再用假设性答案去检索 | 查询与文档表述差异较大时 |
HyDE的原理尤为巧妙:当用户的问题表述方式与文档中的表述方式不一致时,直接检索可能效果不佳。HyDE先让LLM“想象”一个完美的答案应该是什么样的,然后用这个“想象出来的答案”去检索,往往能命中语义更相关的文档。
五、记忆与RAG的协同工作
在HelloAgents的设计中,记忆和RAG被设计为两个独立的工具,但它们可以协同工作:
#mermaid-svg-mi0qh7Q5T7DW5jFO{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-mi0qh7Q5T7DW5jFO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-mi0qh7Q5T7DW5jFO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-mi0qh7Q5T7DW5jFO .error-icon{fill:#552222;}#mermaid-svg-mi0qh7Q5T7DW5jFO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mi0qh7Q5T7DW5jFO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-mi0qh7Q5T7DW5jFO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mi0qh7Q5T7DW5jFO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mi0qh7Q5T7DW5jFO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-mi0qh7Q5T7DW5jFO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mi0qh7Q5T7DW5jFO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mi0qh7Q5T7DW5jFO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mi0qh7Q5T7DW5jFO .marker.cross{stroke:#333333;}#mermaid-svg-mi0qh7Q5T7DW5jFO svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mi0qh7Q5T7DW5jFO p{margin:0;}#mermaid-svg-mi0qh7Q5T7DW5jFO .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-mi0qh7Q5T7DW5jFO .cluster-label text{fill:#333;}#mermaid-svg-mi0qh7Q5T7DW5jFO .cluster-label span{color:#333;}#mermaid-svg-mi0qh7Q5T7DW5jFO .cluster-label span p{background-color:transparent;}#mermaid-svg-mi0qh7Q5T7DW5jFO .label text,#mermaid-svg-mi0qh7Q5T7DW5jFO span{fill:#333;color:#333;}#mermaid-svg-mi0qh7Q5T7DW5jFO .node rect,#mermaid-svg-mi0qh7Q5T7DW5jFO .node circle,#mermaid-svg-mi0qh7Q5T7DW5jFO .node ellipse,#mermaid-svg-mi0qh7Q5T7DW5jFO .node polygon,#mermaid-svg-mi0qh7Q5T7DW5jFO .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-mi0qh7Q5T7DW5jFO .rough-node .label text,#mermaid-svg-mi0qh7Q5T7DW5jFO .node .label text,#mermaid-svg-mi0qh7Q5T7DW5jFO .image-shape .label,#mermaid-svg-mi0qh7Q5T7DW5jFO .icon-shape .label{text-anchor:middle;}#mermaid-svg-mi0qh7Q5T7DW5jFO .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-mi0qh7Q5T7DW5jFO .rough-node .label,#mermaid-svg-mi0qh7Q5T7DW5jFO .node .label,#mermaid-svg-mi0qh7Q5T7DW5jFO .image-shape .label,#mermaid-svg-mi0qh7Q5T7DW5jFO .icon-shape .label{text-align:center;}#mermaid-svg-mi0qh7Q5T7DW5jFO .node.clickable{cursor:pointer;}#mermaid-svg-mi0qh7Q5T7DW5jFO .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-mi0qh7Q5T7DW5jFO .arrowheadPath{fill:#333333;}#mermaid-svg-mi0qh7Q5T7DW5jFO .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-mi0qh7Q5T7DW5jFO .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-mi0qh7Q5T7DW5jFO .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mi0qh7Q5T7DW5jFO .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-mi0qh7Q5T7DW5jFO .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mi0qh7Q5T7DW5jFO .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-mi0qh7Q5T7DW5jFO .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-mi0qh7Q5T7DW5jFO .cluster text{fill:#333;}#mermaid-svg-mi0qh7Q5T7DW5jFO .cluster span{color:#333;}#mermaid-svg-mi0qh7Q5T7DW5jFO div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-mi0qh7Q5T7DW5jFO .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-mi0qh7Q5T7DW5jFO rect.text{fill:none;stroke-width:0;}#mermaid-svg-mi0qh7Q5T7DW5jFO .icon-shape,#mermaid-svg-mi0qh7Q5T7DW5jFO .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mi0qh7Q5T7DW5jFO .icon-shape p,#mermaid-svg-mi0qh7Q5T7DW5jFO .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-mi0qh7Q5T7DW5jFO .icon-shape .label rect,#mermaid-svg-mi0qh7Q5T7DW5jFO .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mi0qh7Q5T7DW5jFO .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-mi0qh7Q5T7DW5jFO .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-mi0qh7Q5T7DW5jFO :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
记忆与RAG协同
重要检索结果自动存入
👤 用户
🤖 智能体
🔧 记忆工具
📚 RAG工具
💾 记忆系统
📄 知识库
- 记忆工具负责存储和维护对话过程中的交互信息,让智能体“记住”用户
- RAG工具负责从用户提供的知识库中检索相关信息作为上下文,让智能体“知道”更多
- 重要的检索结果可以自动存储到记忆系统中,实现“学到的东西不会忘”
这种设计让智能体既拥有了“长期记忆”(记住用户),又拥有了“无限知识”(检索文档),两者结合,大大扩展了智能体的能力边界。
六、核心概念速查表
| 记忆系统(Memory System) | 让智能体能够记住历史交互、用户偏好和过往经验的机制 |
| RAG(检索增强生成) | 让模型在回答前先从外部知识库检索相关信息的增强技术 |
| 无状态 | 大模型每次处理请求都是独立的,不会自动“记住”之前的内容 |
| 工作记忆(Working Memory) | 智能体的“便签纸”——容量有限、读写最快、过一会儿就忘 |
| 情景记忆(Episodic Memory) | 智能体的“日记本”——按时间顺序记录个人经历和事件 |
| 语义记忆(Semantic Memory) | 智能体的“百科全书”——存储事实、概念和知识 |
| 感知记忆(Perceptual Memory) | 智能体的“相册”——存储图像、音频等多模态信息 |
| 记忆巩固(Consolidation) | 将重要的短期记忆转化为长期记忆的过程 |
| 向量检索(Vector Search) | 将文本转换为数学向量,通过计算向量相似度来找到相关内容 |
| HyDE | 先用LLM生成假设性答案,再用假设性答案去检索的聪明策略 |
| 语义分块(Semantic Chunking) | 将长文档切分成语义完整的片段,方便检索 |
七、思考题(帮助加深理解)
“无状态”是大语言模型的设计特点而非缺陷。 为什么大模型被设计为无状态的?这种设计有什么好处?记忆系统是如何在保持这种好处的同时弥补其不足的?
人类记忆分为感觉记忆、工作记忆和长期记忆三个层次。 智能体的四种记忆类型(工作、情景、语义、感知)分别对应人类记忆的哪些部分?有没有人类记忆类型是智能体目前还无法实现的?
RAG中的HyDE策略是先让LLM生成一个“假设性答案”,再用它去检索。 为什么这种方法有时比直接用原始问题检索效果更好?它可能带来什么风险?
记忆工具的consolidate操作实现了“记忆巩固”——将重要信息从工作记忆迁移到长期记忆。 如何判断一条信息是否“重要”?重要性阈值应该由谁来设定?为什么?
记忆系统和RAG都涉及“存储”和“检索”。 它们之间有什么区别?什么信息应该存入记忆系统,什么信息应该存入RAG的知识库?两者可以如何协同工作?
参考资料
Datawhale Hello-Agents 第八章《记忆与检索》
https://datawhalechina.github.io/hello-agents/#/./chapter8/第八章 记忆与检索
Memory and Retrieval Systems | datawhalechina/hello-agents | DeepWiki
https://deepwiki.com/datawhalechina/hello-agents/3.3-part-3:-advanced-capabilities-(chapters-8-12)
结语
在这一章中,我们为智能体添加了两个核心能力:
- 记忆系统(Memory System) ——借鉴人类认知科学的记忆层次理论,设计了工作记忆、情景记忆、语义记忆和感知记忆四种类型,并通过记忆巩固机制实现从短期到长期的迁移
- 检索增强生成(RAG) ——通过文档处理管道(格式转换→语义分块→向量化存储→语义检索)和多种检索策略(基础搜索、MQE、HyDE),让智能体能够从外部知识库中获取信息
记忆让智能体“记住你”,RAG让智能体“知道更多”。两者结合,智能体不再是一个“健忘的无知者”,而是一个能够持续学习、不断积累的智能助手。
本文参考:Datawhale《Hello-Agents》教程第八章《记忆与检索》的内容框架与核心知识点。本文在忠实呈现该教程内容的基础上,为便于新手理解进行了通俗化改写和图表化呈现。




