Hello-Agents 记忆与检索
一、前言上一篇我们初步认识了什么是Agent进行了传统智能体和现代智能体的多种对比并且实现了一个简单的旅游推荐系统。这一篇我们来讲讲智能体的记忆与检索功能的必要性采用 “框架扩展 知识科普”的方式在构建过程中深入理解 Memory 和 RAG 的理论基础。二、启发与思考从我们人类自身出发我们的记忆是一个多层级的认知系统它不仅能够存储信息还能根据重要性、时间和上下文来对信息进行分类和整理拿认知心理提供的理论框架图来看如下我们的记忆可以分为三个层次感觉记忆Sensory Memory持续时间极短0.5-3秒容量巨大负责暂时保存感官接收到的所有信息工作记忆Working Memory持续时间短15-30秒容量有限7±2个项目负责当前任务的信息处理长期记忆Long-term Memory持续时间长可达终生容量几乎无限进一步分为程序性记忆技能和习惯如骑自行车陈述性记忆可以用语言表达的知识又分为语义记忆一般知识和概念如巴黎是法国首都情景记忆个人经历和事件如昨天的会议内容从上面的描述可以知道人类的重要特性就是能够记住过去的经历对此进行学习并用于新的情况中。同样要实现一个真正的智能体也需要这些。但目前对基于LLM的智能体来说通常存在两个局限对话状态的遗忘和内置知识的局限这也是为什么智能体需要记忆和RAG的原因1无状态导致的对话遗忘大模型虽然强大但设计上是无状态的这使得用户每次请求或调用API都是独立的计算模型本身不会自动记住上一次对话的内容而这就带来了很多个问题上下文丢失在长对话中早期的重要信息可能会因为上下文窗口限制而丢失个性化缺失Agent无法记住用户的偏好、习惯或特定需求学习能力受限无法从过往的成功或失败经验中学习改进一致性问题在多轮对话中可能出现前后矛盾的回答要解决这些问题就必须引入记忆系统2模型内置知识的局限除了遗忘对话历史LLM的另一个核心局限在于知识是静态的、有限的。这些知识完全来自于它的训练并带来一系列的问题知识时效性大模型的训练数据有时间截止点无法获取最新信息专业领域知识通用模型在特定领域的深度知识可能不足事实准确性通过检索验证减少模型的幻觉问题可解释性提供信息来源增强回答的可信度基于这个局限RAG技术就出现了它的核心是在模型生成回答之前先从外部知识库如文档、数据库、API中检索出最新信息并将其作为上下文一起提供给模型。因此基于之前我们学到的基础以及科学的启发我们设计了一个分层的记忆与RAG系统框架如下图所示这个框架不仅借鉴了人类记忆系统的层次结构还充分考虑了工程实现的可扩展性。我们讲记忆和RAG设计为独立的两个工具memory_tool负责存储和维护对话过程中的交互信rag_tool负责从用户提供的知识库中检索相关信息作为上下文并可将重要的检索结果自动存储到记忆系统中。其记忆系统和RAG系统的设计如下HelloAgents 记忆系统 ├── 基础设施层 (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嵌入轻量级兜底 HelloAgents RAG系统 ├── 文档处理层 (Document Processing Layer) │ ├── DocumentProcessor - 文档处理器多格式解析 │ ├── Document - 文档对象元数据管理 │ └── Pipeline - RAG管道端到端处理 ├── 嵌入表示层 (Embedding Layer) │ └── 统一嵌入接口 - 复用记忆系统的嵌入服务 ├── 向量存储层 (Vector Storage Layer) │ └── QdrantVectorStore - 向量数据库命名空间隔离 └── 智能问答层 (Intelligent QA Layer) ├── 多策略检索 - 向量检索 MQE HyDE ├── 上下文构建 - 智能片段合并与截断 └── LLM增强生成 - 基于上下文的准确问答三、记忆系统工作流程学习不能图快我们先熟悉记忆系统的工作流程理解各种映射关系上图描述了我们人类记忆形成的几个阶段编码Encoding将感知到的信息转换为可存储的形式存储Storage将编码后的信息保存在记忆系统中检索Retrieval根据需要从记忆中提取相关信息整合Consolidation将短期记忆转化为长期记忆遗忘Forgetting删除不重要或过时的信息基于此记忆系统通过模仿人脑处理不同类型信息的方式可划分多个模块并建立一套智能化的管理机制如下图我们的记忆系统由四种不同类型的记忆模块构成每种模块都针对特定的应用场景和生命周期进行了优化工作记忆“短期记忆”用于存储当前会话的上下文信息为确保高速访问和响应其容量被限制如默认50条并且生命周期与单个会话绑定会话结束后自动清理情景记忆复制长期存储具体的交互事件和智能体的学习经历它包括了丰富的上下文信息并支持按时间序列或主题进行检索是智能体学习和复盘的基础语言记忆存储更为抽象的知识、概念和规则如通过对话了解到的用户偏好、需要长期遵守的指令或领域知识点都适合存放在这里。这部分记忆具有高度的持久性和重要性是智能体形成“知识体系”和进行关联推理的核心。感知记忆该模块专门处理图像、音频等多模态信息并支持跨模态检索。其生命周期会根据信息的重要性和可用存储空间进行动态管理。四、RAG系统知识检索增强在深入了解RAG系统之前我们先来了解了解RAG技术的基本概念、发展历程以及Helloagents的核心原理1什么是RAG检索增强生成Retrieval-Augmented GenerationRAG是一种结合了信息检索和文本生成的技术。它的核心思想是在生成回答之前先从外部知识库中检索相关信息然后将检索到的信息作为上下文提供给大语言模型从而生成更准确、更可靠的回答。因此检索增强生成可以拆分为三个词汇。检索是指从知识库中查询相关内容增强是将检索结果融入提示词辅助模型生成生成则输出兼具准确性与透明度的答案。2基本工作流程一个完整的RAG应用流程主要分为两大核心环节。在数据准备阶段系统通过数据提取、文本分割和向量化将外部知识构建成一个可检索的数据库。随后在应用阶段系统会响应用户的提问从数据库中检索相关信息将其注入Prompt并最终驱动大语言模型生成答案。3发展历程第一阶段朴素RAGNaive RAG, 2020-2021。这是RAG技术的萌芽阶段其流程直接而简单通常被称为“检索-读取”Retrieve-Read模式。检索方式主要依赖传统的关键词匹配算法如TF-IDF或BM25。这些方法计算词频和文档频率来评估相关性对字面匹配效果好但难以理解语义上的相似性。生成模式将检索到的文档内容不加处理地直接拼接到提示词的上下文中然后送给生成模型。第二阶段高级RAGAdvanced RAG, 2022-2023。随着向量数据库和文本嵌入技术的成熟RAG进入了快速发展阶段。研究者和开发者们在“检索”和“生成”的各个环节引入了大量优化技术。检索方式转向基于稠密嵌入Dense Embedding的语义检索。通过将文本转换为高维向量模型能够理解和匹配语义上的相似性而不仅仅是关键词。生成模式引入了很多优化技术例如查询重写文档分块重排序等。第三阶段模块化RAGModular RAG, 2023-至今。在高级RAG的基础上现代RAG系统进一步向着模块化、自动化和智能化的方向发展。系统的各个部分被设计成可插拔、可组合的独立模块以适应更多样化和复杂的应用场景。检索方式如混合检索多查询扩展假设性文档嵌入等。生成模式思维链推理自我反思与修正等。4Helloagents核心原理如上图所示展示了RAG系统的两个主要工作模式数据处理流程处理和存储知识文档在这里我们采取工具Markitdown设计思路是将传入的一切外部知识源统一转化为Markdown格式进行处理。查询与生成流程根据查询检索相关信息并生成回答。其他的具体细节就不介绍了可以参考 Hello-Agent 的第八章五、总结这里放一个思维导图来总结第八章的知识体系