LangMem 三种记忆类型学习总结

部署运行你感兴趣的模型镜像

LLM 智能体中的三类记忆系统:从对话经验到行为智能

在构建具备长期记忆能力的大语言模型(LLM)智能体(Agent)时,如何组织和利用记忆是决定系统智能水平的关键。受人类认知科学启发,LLM 应用中的记忆常被划分为三类:情景记忆(Episodic Memory)语义记忆(Semantic Memory)程序性记忆(Procedural Memory)。这三类记忆并非孤立存在,而是在实际系统中呈现出清晰的衍生关系:情景记忆是基础经验来源,语义记忆与程序性记忆则是对其的抽象与升华


一、情景记忆:对话经验的原始载体

情景记忆记录了智能体与用户在特定时间、特定上下文中的交互历史,其核心特征是时间性、场景性和个人相关性

  • 表现形式:原始对话消息列表(如用户说“我想吃西红柿”,AI 回“好的”),通常附带时间戳、用户 ID 等元数据。
  • 作用:支持模糊回忆(如“我上周说了什么?”)、上下文延续(“接着刚才聊”)。
  • 存储方式:对话日志表(如 MySQL 的 conversation_history),或配合向量库实现语义检索。

✅ 情景记忆是个性化记忆的唯一来源——用户独有的偏好、事件、习惯,只能从与其交互的历史中获得。

然而,原始对话包含噪声、冗余,且难以直接用于高效推理。因此,它主要作为“经验土壤”,用于衍生更高阶的记忆。


二、语义记忆:从事实经验中提炼的“是什么”

语义记忆存储去情境化的事实、知识和用户偏好,回答“是什么”的问题。

  • 来源:通过对多条情景记忆的归纳、抽象和去噪得到。
    • 例:从“用户多次说‘简洁点’” → 提炼为 {"response_style": "concise"}
    • 从“用户提到‘对花生过敏’” → 存为 allergies: ["peanuts"]
  • 特点:结构化、稳定、可键值查询。
  • 存储方式:用户画像表(Profile)、知识图谱、键值存储(如 Redis)。

✅ 语义记忆是个性化服务的核心,使模型无需重复询问即可提供精准响应。

值得注意的是,通用知识(如“巴黎是法国首都”)通常来自预训练或外部知识库,而非用户情景记忆;但用户特有的事实,必然源于情景


三、程序性记忆:从交互模式中总结的“怎么做”

程序性记忆定义了系统的行为模式、任务流程和响应规则,回答“如何做”的问题。

  • 来源:由开发者或系统从大量情景对话中观察、总结并固化而来。
    • 例:分析 1000 次订票对话 → 归纳出标准流程:“问出发地 → 问目的地 → 问日期”;
    • 用户多次中断某步骤 → 优化流程,提前确认关键信息。
  • 表现形式
    • 系统提示(System Prompt):“你是一个耐心的客服”;
    • 业务规则:“遇到投诉先道歉”;
    • LangGraph 节点逻辑:多步骤任务的执行流。
  • 存储方式:硬编码逻辑、LangGraph 工作流、规则引擎。

✅ 在 LLM 系统中,程序性记忆并非本能,而是对情景经验的模式化提炼——这与人类通过练习形成肌肉记忆有本质不同。


四、三类记忆的衍生关系:经验 → 抽象 → 自动化

在智能体系统中,三类记忆形成清晰的演进链条:

graph LR
A[情景记忆<br/>(原始对话日志)] --> B[语义记忆<br/>(用户偏好、事实)]
A --> C[程序性记忆<br/>(任务流程、行为规则)]
  1. 积累经验:系统持续记录与用户的交互(情景记忆);
  2. 抽象知识:通过 LLM 或规则引擎,从中提取稳定偏好与事实(语义记忆);
  3. 固化行为:总结高频任务模式,优化决策流程(程序性记忆);
  4. 协同推理:运行时融合三类记忆,实现上下文感知、个性化、高一致性的响应。

五、工程实践建议

记忆类型存储方案更新机制使用场景
情景记忆MySQL/ES 对话日志 + 向量库(嵌入)追加写模糊回忆、审计、摘要生成
语义记忆用户 Profile 表(结构化字段)覆盖更新(LLM 提取后合并)个性化回复、事实问答
程序性记忆LangGraph 节点逻辑 + System Prompt人工审核后部署 / 自我反思更新任务执行、角色一致性

💡 最佳实践

  • 优先构建语义记忆(成本低、效果直接);
  • 按需引入情景记忆的向量检索(用于开放域回忆);
  • 将程序性记忆固化到系统架构中,确保行为可靠。

结语

LLM 智能体的记忆系统,不应是简单的历史对话堆砌,而应是一个从经验中学习、抽象并自动优化的动态体系。情景记忆提供原始素材,语义记忆承载个性化知识,程序性记忆定义行为本能——三者协同,方能构建真正“记得住、用得上、不断进化”的智能对话系统。

未来,随着Agent 自我反思(Self-Reflection)自动化工作流生成技术的发展,记忆的衍生过程将更加自主:系统不仅能记住过去,更能从过去中学习如何更好地行动。这正是记忆系统从“存储”走向“智能”的关键跃迁。

您可能感兴趣的与本文相关的镜像

Qwen3-VL-8B

Qwen3-VL-8B

图文对话
Qwen3-VL

Qwen3-VL是迄今为止 Qwen 系列中最强大的视觉-语言模型,这一代在各个方面都进行了全面升级:更优秀的文本理解和生成、更深入的视觉感知和推理、扩展的上下文长度、增强的空间和视频动态理解能力,以及更强的代理交互能力

<think>我们面对的是多个库之间的版本冲突问题,具体包括: - langgraph-sdk 0.2.9 需要 orjson>=3.10.1,但当前环境为3.10.0 - langmem 0.0.29 需要 langchain>=0.3.15,但当前环境为0.1.20 此外,还有其他库:llama-index-storage-kvstore-redis 0.4.1, llama-index-vector-stores-redis 0.6.1, ragas 0.3.4,它们可能也有依赖冲突。 解决思路: 1. **明确依赖关系**:使用工具(如`pip check`或`pipdeptree`)来检查当前环境的依赖冲突。 2. **升级或降级**:根据冲突的具体情况,尝试升级或降级相关包。 3. **使用兼容版本**:寻找一组能够满足所有包依赖的版本组合。 由于直接安装这些库时出现了冲突,我们可以尝试分步骤安装,并优先处理核心冲突。 步骤: ### 步骤1:安装依赖检查工具 ```bash pip install pipdeptree ``` ### 步骤2:生成依赖树并分析冲突 ```bash pipdeptree ``` ### 步骤3:解决具体冲突 #### 冲突1:langgraph-sdk 0.2.9 需要 orjson>=3.10.1,但当前为3.10.0 解决方案:升级orjson ```bash pip install --upgrade orjson ``` #### 冲突2:langmem 0.0.29 需要 langchain>=0.3.15,但当前为0.1.20 解决方案:升级langchain ```bash pip install --upgrade langchain ``` 注意:升级langchain可能会引发其他依赖冲突,因为其他库可能依赖于低版本的langchain。 ### 步骤4:处理升级langchain后可能出现的冲突 如果升级langchain后,其他库要求低版本,则可能需要协调版本。例如,如果某个库要求langchain<0.3.0,那么我们就不能安装0.3.15。这时我们需要寻找一个中间版本。 如果出现这种情况,我们可以尝试: ```bash # 查看langchain的可用版本 pip index versions langchain # 选择一个既满足langmem>=0.3.15,又满足其他库要求的版本,假设为0.3.15 pip install langchain==0.3.15 ``` 如果无法同时满足,可能需要考虑降级langmem,或者升级其他依赖库。 ### 步骤5:依次安装其他库 在解决上述两个主要冲突后,再安装其他库: ```bash pip install langgraph-sdk==0.2.9 langmem==0.0.29 llama-index-storage-kvstore-redis==0.4.1 llama-index-vector-stores-redis==0.6.1 ragas==0.3.4 ``` 如果安装过程中出现其他冲突,再根据具体错误信息解决。 ### 备选方案:使用约束文件 如果上述步骤复杂,可以创建一个约束文件(如`requirements.txt`),并指定每个库的版本以及它们冲突的依赖的版本。例如: requirements.txt 内容: ``` orjson>=3.10.1 langchain>=0.3.15 langgraph-sdk==0.2.9 langmem==0.0.29 llama-index-storage-kvstore-redis==0.4.1 llama-index-vector-stores-redis==0.6.1 ragas==0.3.4 ``` 然后运行: ```bash pip install -r requirements.txt ``` ### 终极方案:创建新环境 如果当前环境冲突太多,建议创建一个新的虚拟环境,然后按照上述约束文件安装。 ```bash # 创建新环境 python -m venv new_env # 激活环境 source new_env/bin/activate # Linux/Mac new_env\Scripts\activate # Windows # 安装 pip install -r requirements.txt ``` ### 注意事项 - 在升级过程中,可能会升级其他依赖,导致其他库不兼容。因此,建议在虚拟环境中操作,避免影响主环境。 - 如果遇到循环依赖或无法解决的冲突,可能需要联系库维护者或暂时不使用某个库的特定版本。 ### 相关问题 1. 如何有效管理Python项目的依赖版本以避免冲突?[^1] 2. 使用虚拟环境管理Python项目有哪些最佳实践?[^2] 3. 当Python库依赖出现循环冲突时有哪些解决方案?[^3] 4. 如何向开源社区反馈依赖冲突问题?[^4] </think>## 解决 Python 库版本冲突的完整方案 针对您遇到的多库版本冲突问题(langgraph-sdk、langmem、llama-index相关库、ragas),以下是系统化的解决方案: ### 冲突分析 | 库名称 | 要求版本 | 当前版本 | 冲突类型 | |---------------------------|--------------------|--------------|------------------| | langgraph-sdk 0.2.9 | orjson≥3.10.1 | orjson=3.10.0 | 依赖版本过低 | | langmem 0.0.29 | langchain≥0.3.15 | langchain=0.1.20 | 主依赖缺失 | | llama-index-storage-kvstore-redis | 依赖网络未知 | - | 潜在版本约束冲突 | ### 解决步骤 #### 1. 创建干净的虚拟环境(关键步骤) ```bash # 创建新环境 python -m venv conflict_resolution_env # 激活环境 source conflict_resolution_env/bin/activate # Linux/Mac conflict_resolution_env\Scripts\activate # Windows ``` #### 2. 安装基础依赖 ```bash # 优先安装存在严格版本要求的库 pip install "orjson>=3.10.1" "langchain>=0.3.15" ``` #### 3. 安装目标库及其依赖 使用约束文件解决依赖冲突: ```bash # 创建 requirements.txt cat > requirements.txt << EOF langgraph-sdk==0.2.9 langmem==0.0.29 llama-index-storage-kvstore-redis==0.4.1 llama-index-vector-stores-redis==0.6.1 ragas==0.3.4 EOF # 安装所有库(自动解析依赖) pip install -r requirements.txt ``` #### 4. 人工干预冲突解决 若步骤3报错,使用手动安装策略: ```bash # 分步安装核心库(按依赖顺序) pip install langgraph-sdk==0.2.9 # 依赖orjson pip install langmem==0.0.29 # 依赖langchain pip install llama-index-storage-kvstore-redis==0.4.1 pip install llama-index-vector-stores-redis==0.6.1 pip install ragas==0.3.4 # 验证安装 python -c "import langgraph, langmem, llama_index, ragas; print('Success!')" ``` ### 依赖解析数学原理 库版本约束可建模为不等式系统: $$ \begin{cases} v_{\text{orjson}} \geq 3.10.1 \\ v_{\text{langchain}} \geq 0.3.15 \\ v_{\text{libA}} \in [a, b] \\ \vdots \end{cases} $$ 使用SAT求解器(如pip的resolver)寻找满足所有约束的版本组合[^1]。 ### 验证方案 ```bash # 检查最终版本 pip list | grep -E "langgraph|langmem|llama|ragas|orjson|langchain" # 预期输出示例 langchain 0.3.15 langgraph-sdk 0.2.9 langmem 0.0.29 llama-index... 0.4.1 orjson 3.10.1 ragas 0.3.4 ``` ### 冲突预防策略 1. **依赖冻结**:使用 `pip freeze > requirements.txt` 锁定版本 2. **兼容性检查**:定期运行 `pip check` 检测冲突 3. **依赖隔离**:对冲突库使用不同虚拟环境 4. **版本约束**:在setup.py中使用宽松版本范围如`numpy>=1.2,<2.0`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值