当前位置: 首页 > article >正文

LangChain Memory

一、LangChain Memory 核心概念详解LangChain 的Memory记忆系统是让 Agent / 聊天机器人实现多轮对话、上下文理解、经验复用的核心模块它解决了大模型「单轮对话、上下文窗口有限、跨会话失忆」的三大核心缺陷。1. 什么是 LangChain Memory简单来说Memory 是 LangChain 中存储和管理对话历史、中间结果、用户偏好的模块它能把之前的对话内容自动注入到当前的 LLM 上下文中让 LLM 知道「之前聊了什么」从而实现连贯的多轮对话。2. 短期记忆 vs 长期记忆核心区别LangChain 的 Memory 分为两大类对应人类的记忆模式对比维度短期记忆Short-term Memory长期记忆Long-term Memory核心定义存储当前会话的对话历史、中间结果会话结束就清空存储跨会话的用户偏好、历史经验、知识库永久保存存储载体内存InMemoryChatMessageHistory、会话变量向量数据库Chroma/Pinecone、本地文件、数据库核心作用实现当前会话的多轮对话让 LLM 记住「刚才聊了什么」实现跨会话的经验复用让 LLM 记住「用户喜欢什么、之前做过什么」上下文窗口受 LLM 上下文窗口限制比如 doubao-pro-32k 是 32k token不受上下文窗口限制通过向量检索召回相关信息典型应用日常聊天机器人、多轮问答、当前任务的执行轨迹个人助理、RAG 知识库、历史任务经验复用3. LangChain 1.0 Memory 核心类必须掌握LangChain 1.0 对 Memory 进行了全面重构废弃了旧的ConversationBufferMemory等类现在的核心类都在langchain_core包里表格类名作用说明BaseChatMessageHistory记忆的抽象基类定义了记忆的基本接口添加消息、获取消息、清空消息InMemoryChatMessageHistory短期记忆的默认实现把对话历史存储在内存里会话结束就清空适合当前会话的多轮对话RunnableWithMessageHistory给 Chain/Agent 加上记忆的核心类把普通的 Chain/Agent 和记忆管理结合起来自动处理对话历史的注入和存储二、实战给聊天机器人添加短期记忆下面是一份完全兼容 LangChain 1.0 最新版本的代码实现了一个带短期记忆的聊天机器人能记住当前会话的所有对话内容支持多轮连贯对话。1. 完整可运行代码# LangChain的 Memory核心类 import os from dotenv import load_dotenv # 1. 需要导入的模块 from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.chat_history import BaseChatMessageHistory, InMemoryChatMessageHistory from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables.history import RunnableWithMessageHistory from 学习langchain架构.自定义搜索工具super import chain_with_history load_dotenv() # 2. LLM llm ChatOpenAI( api_keyos.getenv(QWEN_API_KEY), base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, modelqwen3-max, # 必须用 pro模型支持工具调用 temperature0.1 ) # 3. prompt prompt ChatPromptTemplate([ (system, 你是一个友好、耐心、自然的日常聊天助手擅长倾听用户需求陪用户轻松聊天。 核心规则 1. 必须记住用户之前提到的所有信息姓名、喜好、需求后续对话主动呼应 2. 语气亲切自然不使用书面化套话、不生硬、不啰嗦 3. 不确定的内容明确说我不确定哦不猜测、不编造 4. 纯文本回答不使用特殊格式 ), # ✅️核心对话历史占位符名字必须和后面 RunnabelWithMessageHistory 里的一致 MessagesPlaceholder(variable_namechat_history), (user,{input}) ]) # 4. 短期记忆管理 # 用字典存储不同会话的历史支持多用户隔离 store {} def get_session_history(session_id: str) - BaseChatMessageHistory: 根据会话ID获取对应的对话历史 :param session_id: 会话ID区分不同用户/不同对话 :return: 对话历史对象 if session_id not in store: # 如果会话id不存在 创建一个新的短期记忆对象 store[session_id] InMemoryChatMessageHistory() return store[session_id] # 5. 构建带短期记忆的chain # 第一步 构建基础链提示词 - LLM - 字符串输出解析器 base_chain prompt | llm | StrOutputParser() # 第二步 给基础链加上短期记忆核心类 RunnabelWithMessageHistory chain_with_memory RunnableWithMessageHistory( base_chain, # 记忆的基础链 get_session_history, # 记忆获取函数 input_messages_keyinput, history_messages_keychat_history ) # 6. 聊天主程序 def main(): print( LangChain带短期记忆的聊天机器人) print( 输入 q 退出 输入 clear 清空当前会话的记忆) # 会话ID 这里固定位user_001, 多用户场景可以用用户id替换 session_id user_001 while True: user_input input(你).strip() if user_input.lower() q: print( 再见 下次再聊~) break if user_input.lower() clear: if session_id in store: store[session_id].clear() print(当前会话的记忆已清空) continue # 输入空时跳过 if not user_input: continue # 调用带记忆的chain response chain_with_memory.invoke( {input: user_input}, config{configurable:{session_id:session_id}}, # 必须传入会话id ) print(f{response} \n) if __name__ __main__: main()2. 代码核心部分详解重点是 Memory1提示词模板里的MessagesPlaceholder这是实现短期记忆的第一个关键点你必须在提示词模板里加一个MessagesPlaceholder名字叫chat_history它的作用是「把之前的对话历史自动插入到这里」。prompt ChatPromptTemplate.from_messages([ (system, ...), # ✅ 必须加这个占位符名字要和后面一致 MessagesPlaceholder(variable_namechat_history), (user, {input}), ])2记忆管理函数get_session_history这是实现短期记忆的第二个关键点它的作用是「根据会话 ID 返回对应的对话历史对象」支持多用户隔离。store {} # 用字典存储不同会话的历史 def get_session_history(session_id: str) - BaseChatMessageHistory: if session_id not in store: store[session_id] InMemoryChatMessageHistory() # 短期记忆存在内存里 return store[session_id]3给 Chain 加记忆的RunnableWithMessageHistory这是实现短期记忆的第三个关键点它把普通的 Chain 和记忆管理结合起来自动处理「对话历史的存储」和「对话历史的注入」。chain_with_memory RunnableWithMessageHistory( base_chain, get_session_history, input_messages_keyinput, # 用户输入的键名 history_messages_keychat_history, # 对话历史的键名和占位符一致 )4调用时必须传入session_id调用带记忆的 Chain 时必须通过config参数传入session_id它的作用是「告诉 Memory 系统当前是哪个会话」。response chain_with_memory.invoke( {input: user_input}, config{configurable: {session_id: session_id}} # 必须传 )三、运行效果演示 LangChain带短期记忆的聊天机器人 输入 q 退出 输入 clear 清空当前会话的记忆 你你好我叫小明我喜欢打篮球 嗨小明很高兴认识你听说你喜欢打篮球太棒啦我也超爱看大家打球的。你平时是喜欢自己练还是和朋友一起打呀 你我喜欢什么 你喜欢打篮球呀刚刚你告诉我的记得吗 你我叫什么名字 你叫小明我可记着呢 你clear 当前会话的记忆已清空 你我叫什么名字我喜欢什么 哎呀我还不知道你的名字呢也还没听你说过你喜欢什么 不过没关系现在告诉我就好啦你叫什么名字平时喜欢做些什么 你q 再见 下次再聊~四、总结与扩展1. 短期记忆核心要点MessagesPlaceholder提示词里必须加用来插入对话历史get_session_history记忆管理函数根据会话 ID 返回历史RunnableWithMessageHistory给 Chain/Agent 加记忆的核心类session_id调用时必须传用来区分不同会话

相关文章:

LangChain Memory

一、LangChain Memory 核心概念详解LangChain 的 Memory(记忆系统) 是让 Agent / 聊天机器人实现多轮对话、上下文理解、经验复用的核心模块,它解决了大模型「单轮对话、上下文窗口有限、跨会话失忆」的三大核心缺陷。1. 什么是 LangChain Me…...

【RK3568】dummy.c

阶段1:主要是注册 platform_driver,创建设备static struct platform_driver snd_dummy_driver {.probe snd_dummy_probe,.remove snd_dummy_remove,.driver {.name SND_DUMMY_DRIVER,.pm SND_DUMMY_PM_OPS,}, };module_init( alsa_card_dummy_i…...

3分钟掌握Xenos:Windows平台最全面的DLL注入解决方案

3分钟掌握Xenos:Windows平台最全面的DLL注入解决方案 【免费下载链接】Xenos Windows dll injector 项目地址: https://gitcode.com/gh_mirrors/xe/Xenos 你是否曾想在Windows系统中为其他程序添加功能或进行调试,却发现传统的DLL注入方法既复杂又…...

全自动的智能鱼缸推荐

养鱼本是件陶冶情操的事,可传统养鱼方式却状况百出,让不少人头疼不已。数据显示,新手死鱼率超60%,37%鱼友因维护麻烦放弃,出差旅游时也无法照顾。传统养鱼的痛点新手养鱼,死鱼率高是大问题。因为缺乏科学水…...

Sunshine游戏串流终极指南:如何打造你的个人云游戏服务器

Sunshine游戏串流终极指南:如何打造你的个人云游戏服务器 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一个强大的自托管游戏串流服务器解决方案&#xff…...

RimSort终极指南:3分钟搞定环世界MOD管理,告别加载顺序混乱

RimSort终极指南:3分钟搞定环世界MOD管理,告别加载顺序混乱 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable…...

5分钟打造你的智能文献助手:Zotero AI插件终极指南

5分钟打造你的智能文献助手:Zotero AI插件终极指南 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 还在为海量文献管理而烦恼吗?每天面对堆积如山的PDF文件,你是否也经历过这…...

Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接。[windows]

目标计算机积极拒绝:你的程序(比如 redis-cli 或你的应用)已经成功找到了 127.0.0.1 这台计算机(就是本机),也找到了 6379 这个端口,但是当它尝试在这个端口上建立连接时,对方(也就是…...

YOLOv2算法全方位解析:从BatchNorm到聚类先验框的九大改进

YOLOv2 在 v1 的基础上引入了 BatchNorm、高分辨率分类器、Anchor Box、K-means 聚类先验框、直接位置预测、细粒度特征与多尺度训练等多项关键改进,彻底解决了 v1 在小目标检测和定位精度方面的痛点。本文逐层拆解 YOLOv2 的设计细节与实现逻辑,带你系统…...

SmartFusion2 FPGA在安全关键系统中的设计与实践

1. SmartFusion2在安全关键应用中的核心优势解析 在工业自动化、轨道交通和能源控制等领域,安全关键系统的设计一直面临着严苛的技术挑战。这类系统一旦失效,可能导致人员伤亡、重大经济损失或环境灾难。作为深耕工业级FPGA领域十余年的工程师&#xff0…...

深入解读C++中的指针变量

针变量是一种特殊的变量,它和以前学过的其他类型的变量的不同之处是:用它来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,在C中用“*”符号表示指向,例如,i_pointer是一个指针变量,而*i_po…...

基于Simulink的燃料电池-锂电池混合动力能量流管理​

目录 手把手教你学Simulink——基于Simulink的燃料电池-锂电池混合动力能量流管理​ 摘要​ 一、背景与挑战​ 1.1 为什么1+1<2?揭秘多能源系统的“木桶效应”​ 1.2 核心痛点与设计目标​ 二、系统架构与核心控制推导​ 2.1 整体架构:从“各自为战”到“黄金搭档”…...

白沟全屋定制厂家哪家好

想找白沟靠谱的全屋定制厂家&#xff1f;选不好可就掉坑里了。我之前装修就踩过雷&#xff0c;找的小厂家&#xff0c;板材质量差&#xff0c;设计也不合理&#xff0c;入住没多久就出问题。后来我做了很多功课&#xff0c;重新选了宁创全屋定制&#xff0c;效果非常满意。选全…...

告别断电丢时!手把手教你为RK3568开发板配置外置RTC(PCF8563T)并设置开机自动同步

RK3568开发板外置RTC配置实战&#xff1a;从硬件连接到系统集成 在工业控制、物联网网关和边缘计算设备中&#xff0c;精确的时间同步往往关系到整个系统的可靠性。RK3568作为一款高性能嵌入式处理器&#xff0c;虽然内置了RTC模块&#xff0c;但在需要更高精度或更长断电保持的…...

如何实现Gofile高速下载:多线程文件传输的终极解决方案

如何实现Gofile高速下载&#xff1a;多线程文件传输的终极解决方案 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader 你是否曾经因为Gofile下载速度缓慢而感到沮丧&#xff1…...

如何在5分钟内为Unity游戏添加自动翻译:XUnity.AutoTranslator完整指南

如何在5分钟内为Unity游戏添加自动翻译&#xff1a;XUnity.AutoTranslator完整指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而错过了精彩的Unity游戏&#xff1f;面对日文、…...

BPSK调制中的相位旋转与ISI实现差分隐私

1. BPSK调制中的相位旋转与ISI实现差分隐私&#xff1a;原理与实现在物联网和联邦学习等分布式系统中&#xff0c;数据隐私保护正面临前所未有的挑战。传统差分隐私(DP)机制依赖人工噪声注入&#xff0c;往往带来额外的能耗和通信开销。而最新研究表明&#xff0c;BPSK调制中的…...

.NET 9云原生落地实践(2024年Q3最新Gartner验证架构):Service Mesh集成+自动扩缩容+可观测性闭环

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;.NET 9云原生容器化部署概览 .NET 9 正式引入对云原生场景的深度原生支持&#xff0c;包括更轻量的运行时裁剪、内置 OpenTelemetry 指标导出、Kubernetes 原生健康检查端点&#xff08;/healthz 和 /r…...

video-subtitle-extractor:本地AI字幕提取终极方案深度解析

video-subtitle-extractor&#xff1a;本地AI字幕提取终极方案深度解析 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测、字…...

Cursor破解工具深度解析:如何实现永久免费使用AI编程助手的技术奥秘

Cursor破解工具深度解析&#xff1a;如何实现永久免费使用AI编程助手的技术奥秘 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve rea…...

2026年,呼和浩特市唯一专业疗愈茶空间,究竟有何独特魅力?

在呼和浩特这座繁华都市&#xff0c;车水马龙、人来人往&#xff0c;高知、高收入、高审美的我们&#xff0c;每天都在社交、工作的漩涡里打转。职场的竞争压力、复杂的人际关系&#xff0c;让我们的内心疲惫不堪&#xff0c;情绪内耗严重&#xff0c;就像在茫茫大海中漂泊的船…...

COT-FM框架:机器人策略优化的条件最优传输方法

1. COT-FM框架概述&#xff1a;机器人策略优化的新范式 在机器人控制领域&#xff0c;策略优化一直面临着样本效率低、泛化能力差等核心挑战。COT-FM&#xff08;Conditional Optimal Transport-Flow Matching&#xff09;框架的提出&#xff0c;为这一领域带来了全新的解决思路…...

贪心算法:经典题目与证明

贪心算法&#xff1a;经典题目与证明 贪心算法因其简洁高效的特点&#xff0c;在解决优化问题时备受青睐。它通过每一步的局部最优选择&#xff0c;试图达到全局最优解。虽然并非所有问题都适用&#xff0c;但许多经典问题如背包问题、活动选择问题等&#xff0c;都能通过贪心…...

CodePercept:多模态AI在STEM视觉任务中的代码增强理解

1. 项目背景与核心价值CodePercept这个项目名本身就揭示了它的双重基因——"Code"代表编程能力&#xff0c;"Percept"暗示感知增强。作为一名长期关注AI工程化落地的开发者&#xff0c;我第一次看到这个标题就意识到&#xff1a;这可能是解决传统计算机视觉…...

大数据处理框架入门

大数据处理框架入门&#xff1a;解锁数据洪流的钥匙 在信息爆炸的时代&#xff0c;每天产生的数据量以ZB级增长&#xff0c;传统工具已难以应对。大数据处理框架应运而生&#xff0c;成为挖掘数据价值的核心工具。无论是企业决策、科学研究还是智能应用&#xff0c;掌握这些框…...

CodePercept:代码增强多模态模型在工业视觉中的应用

1. 项目背景与核心价值 去年在开发一个工业质检系统时&#xff0c;我发现传统CV模型对复杂缺陷的识别率始终卡在87%左右难以突破。当时尝试了各种数据增强和模型微调手段&#xff0c;直到偶然将代码逻辑作为辅助输入喂给视觉模型&#xff0c;准确率突然跃升到93.5%。这个意外发…...

技术赎罪券交易:软件测试从业者的专业实践与未来展望

在软件开发的复杂生态中&#xff0c;每一行代码都可能潜藏缺陷——这些“代码原罪”源于人为失误、需求漂移或技术债务积累。2026年&#xff0c;全球因代码错误导致的系统崩溃事件年增长率高达15%&#xff0c;尤其在金融和医疗领域&#xff0c;后果往往是灾难性的。作为软件测试…...

量子计算与可视化技术融合的前沿探索

1. 量子计算与可视化&#xff1a;当两种前沿技术相遇作为一名长期从事科学可视化研究的工程师&#xff0c;我见证了GPU如何彻底改变图形处理领域。如今&#xff0c;量子计算(QC)正在引发类似的变革讨论。但与GPU不同&#xff0c;量子计算机不是简单的"更快处理器"&am…...

时间序列预测中的功率变换技术与实战应用

## 1. 时间序列预测中的功率变换核心价值当我在2015年第一次尝试预测某电商平台的节日销量时&#xff0c;发现传统ARIMA模型在原始数据上表现糟糕。直到将销售额数据取对数后&#xff0c;预测准确率突然提升了37%。这个经历让我深刻认识到功率变换在时间序列分析中的魔法般的作…...

智慧树学习辅助插件:3分钟实现视频学习自动化 ⚡

智慧树学习辅助插件&#xff1a;3分钟实现视频学习自动化 ⚡ 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台繁琐的视频学习流程而烦恼吗&#xff1f;…...