【大模型应用开发】记忆
【大模型应用开发】记忆1. 记忆功能的重要性1.1 人类记忆系统1.2 为何智能体需要记忆1.2.1 无状态导致的对话遗忘1.3 记忆与RAG系统架构设计1.4 记忆类型层1.4.1 WorkingMemory 工作记忆短时记忆 TTL1.4.2 EpisodicMemory 情景记忆经历、故事、对话历史1.4.3 SemanticMemory 语义记忆知识、事实、关系、图谱1.4.4 PerceptualMemory 感知记忆图片、声音、多模态附录1. 记忆功能的重要性1.1 人类记忆系统人类记忆是一个多层级的认知系统它不仅能存储信息还能根据重要性、时间和上下文对信息进行分类和整理。认知心理学为理解记忆的结构和过程提供了经典的理论框架如下图所示。根据认知心理学的研究人类记忆可以分为以下几个层次感觉记忆Sensory Memory持续时间极短0.5-3秒容量巨大负责暂时保存感官接收到的所有信息工作记忆Working Memory持续时间短15-30秒容量有限7±2个项目负责当前任务的信息处理长期记忆Long-term Memory持续时间长可达终生容量几乎无限进一步分为程序性记忆技能和习惯如骑自行车陈述性记忆可以用语言表达的知识又分为语义记忆一般知识和概念如巴黎是法国首都情景记忆个人经历和事件如昨天的会议内容1.2 为何智能体需要记忆借鉴人类记忆系统的设计我们可以理解为什么智能体也需要类似的记忆能力。人类智能的一个重要特征就是能够记住过去的经历从中学习并将这些经验应用到新的情况中。同样一个真正智能的智能体也需要具备记忆能力。对于基于LLM的智能体而言通常面临局限对话状态的遗忘。1.2.1 无状态导致的对话遗忘当前的大语言模型虽然强大但设计上是无状态的。这意味着每一次用户请求或API调用都是一次独立的、无关联的计算。模型本身不会自动“记住”上一次对话的内容。这带来了几个问题上下文丢失在长对话中早期的重要信息可能会因为上下文窗口限制而丢失个性化缺失Agent无法记住用户的偏好、习惯或特定需求学习能力受限无法从过往的成功或失败经验中学习改进一致性问题在多轮对话中可能出现前后矛盾的回答让我们通过一个具体例子来理解这个问题fromhello_agentsimportSimpleAgent,HelloAgentsLLM agentSimpleAgent(name学习助手,llmHelloAgentsLLM())# 第一次对话response1agent.run(我叫张三正在学习Python目前掌握了基础语法)print(response1)# 很好Python基础语法是编程的重要基础...# 第二次对话新的会话response2agent.run(你还记得我的学习进度吗)print(response2)# 抱歉我不知道您的学习进度...要解决这个问题我们的框架需要引入记忆系统。1.3 记忆与RAG系统架构设计memory_tool负责存储和维护对话过程中的交互信息。rag_tool则负责从用户提供的知识库中检索相关信息作为上下文并可将重要的检索结果自动存储到记忆系统中。记忆系统采用了四层架构设计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嵌入轻量级兜底RAG系统专注于外部知识的获取和利用HelloAgents RAG系统 ├── 文档处理层 (Document Processing Layer) │ ├── DocumentProcessor - 文档处理器多格式解析 │ ├── Document - 文档对象元数据管理 │ └── Pipeline - RAG管道端到端处理 ├── 嵌入表示层 (Embedding Layer) │ └── 统一嵌入接口 - 复用记忆系统的嵌入服务 ├── 向量存储层 (Vector Storage Layer) │ └── QdrantVectorStore - 向量数据库命名空间隔离 └── 智能问答层 (Intelligent QA Layer) ├── 多策略检索 - 向量检索 MQE HyDE ├── 上下文构建 - 智能片段合并与截断 └── LLM增强生成 - 基于上下文的准确问答1.4 记忆类型层从上图中可以看到记忆类型层分为WorkingMemory(纯内存TTL)、EpisodicMemory(事件序列)、SemanticMemory(知识图谱)、PerceptualMemory(多模态)1.4.1 WorkingMemory 工作记忆短时记忆 TTL对应人类当下正在想的事过会儿就忘特点临时、有过期时间、只存在内存里举例场景典型用途当前对话上下文临时任务状态多轮对话里的临时信息用完就丢不存库1.4.2 EpisodicMemory 情景记忆经历、故事、对话历史对应人类我记得上次我们聊过什么、发生过什么特点按时间线存、长期保存、像日记举例场景更多例子“你上次说你喜欢吃辣”“你上周让我帮你查过北京天气”“你昨天让我写一份离职邮件”凡是“我记得我们之间发生过什么”都是情景记忆。1.4.3 SemanticMemory 语义记忆知识、事实、关系、图谱对应人类常识、知识点、人物关系、结构化信息特点不是故事是 “事实”可推理举例场景典型用途用户基本信息领域知识如 “Transformer 是一种注意力模型”关系推理A 是 B 的老公 → B 怀孕 → A 要注意育儿规则、定义、常识1.4.4 PerceptualMemory 感知记忆图片、声音、多模态对应人类我记得你长什么样、那首歌的旋律、那张截图内容特点非文本、多模态、存向量举例场景附录1.参考 hello-agents https://hello-agents.datawhale.cc/#/./chapter8/第八章 记忆与检索