让LangChain应用记住对话:内存机制详解与最佳实践(收藏级教程)
了解LangChain内存机制的工作原理、如何存储和回忆对话,以及构建更具人性化AI应用的最佳实践。
为什么内存对AI应用至关重要
想象一下,与一个10秒前就把您说的话全部忘光的助手聊天。很烦人,对吧?
这就是早期AI应用的感觉——每条消息都是孤立的,没有任何连续性。
LangChain通过内存模块解决了这个问题,让您的应用具备存储和回忆对话的能力。这使得聊天机器人能够记住您的姓名、偏好或正在进行的讨论背景。
让我们深入了解LangChain中内存的工作机制以及如何有效使用它。
LangChain中的内存是什么?
从高层次来看,内存就是上下文存储。
它跟踪记录:
- 对话历史(用户和AI说了什么)。
- 从交互中提取的关键事实。
- 长对话的摘要。
在代码中,内存通常只是一个传递给Chain或Agent的对象,它将过去的上下文注入到下一个提示中。
LangChain中的内存类型
LangChain提供了几种内置的内存类,每种都有其权衡。
ConversationBufferMemory
- 存储原始对话记录。
- 最适合短对话。
- 缺点:很快变得庞大。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.save_context(
{"input": "嗨,我的名字是爱丽丝"},
{"output": "你好,爱丽丝!"}
)
print(memory.load_memory_variables({}))
ConversationBufferWindowMemory
- 仅存储最近的N条消息。
- 保持上下文相关性而不会膨胀。
ounter(lineounter(lineounter(line
from langchain.memory import ConversationBufferWindowMemory
memory = ConversationBufferWindowMemory(k=3)
适用于只有最近上下文重要的助手(例如,面向任务的机器人)。
ConversationSummaryMemory
- 使用LLM总结过去的交流。
- 适用于无法携带每个token的长对话。
ounter(lineounter(lineounter(lineounter(line
from langchain.memory import ConversationSummaryMemory
from langchain.chat_models import ChatOpenAI
memory = ConversationSummaryMemory(llm=ChatOpenAI())
现在,您的应用回忆的是滚动摘要而不是原始日志。
ConversationKnowledgeGraphMemory
- 构建实体和关系的知识图谱。
- 示例:将"爱丽丝住在巴黎"记住为结构化信息。
这更具实验性,但对于需要事实回忆的应用来说功能强大。
将内存集成到链中
内存本身并不能做太多事情。您需要将其附加到链上。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.chains import ConversationChain
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(temperature=0)
memory = ConversationBufferMemory()
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True
)
conversation.predict(input="我最喜欢的颜色是蓝色。")
conversation.predict(input="我最喜欢的颜色是什么?")
输出:
ounter(line
"您最喜欢的颜色是蓝色。"
没有内存,模型会忘记。有了内存,它能正确回忆。
为生产环境扩展内存
在实际应用中,内存需要持久性和效率。
- 持久化到数据库
而不是使用内存中的对象,将历史记录保存到Postgres、Redis或向量存储中。
使用Redis的示例:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.memory import RedisChatMessageHistory
history = RedisChatMessageHistory(
session_id="user123",
url="redis://localhost:6379"
)
现在对话可以在重启后存活。
- 使用向量存储进行语义回忆
对于长期记忆,您不希望重放每条消息。相反,嵌入过去的消息并通过语义相似性检索它们。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.memory import VectorStoreRetrieverMemory
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
embedding = OpenAIEmbeddings()
vectorstore = FAISS(embedding.embed_query, embedding.embed_documents)
memory = VectorStoreRetrieverMemory(
retriever=vectorstore.as_retriever()
)
这样,AI通过含义回忆事实,而不仅仅是关键词匹配。
- 混合策略
许多生产应用结合:
- 短期内存(最近几次对话)。
- 摘要内存(滚动摘要)。
- 长期向量内存(语义检索)。
把它想象成人类大脑:短期回忆、长期事实,加上事件摘要。
一个思维模型
这里有一个类比:
ounter(lineounter(lineounter(line
ConversationBuffer → 短期内存(像RAM)
SummaryMemory → 日志摘要(像笔记)
Vector Memory → 长期回忆(像您大脑的搜索)
当结合使用时,您会得到在回忆过去上下文方面感觉惊人地"生动"的助手。
常见陷阱
- 过度填充上下文。 将每条过去的消息都输入LLM会快速消耗token。使用摘要或窗口。
- 忘记持久性。 重启应用不应清除内存——使用Redis、Postgres或S3。
- 混合不相关的历史。 并非每条过去的消息都重要。检索内存有助于过滤噪音。
- 仅依赖内存。 对于关键数据(如订单、付款),始终存储在数据库中——而不仅仅是内存。
总结
内存是让LangChain应用感觉个性化、情境化和人性化的关键。
无论您使用简单的缓冲区进行快速原型设计、长对话的摘要,还是长期回忆的向量存储,关键是设计一个平衡准确性、成本和可扩展性的策略。
AI大模型从0到精通全套学习大礼包
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
只要你是真心想学AI大模型,我这份资料就可以无偿共享给你学习。大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!
如果你也想通过学大模型技术去帮助就业和转行,可以扫描下方链接👇👇
大模型重磅福利:入门进阶全套104G学习资源包免费分享!

01.从入门到精通的全套视频教程
包含提示词工程、RAG、Agent等技术点
02.AI大模型学习路线图(还有视频解说)
全过程AI大模型学习路线


03.学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的


04.大模型面试题目详解


05.这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
所有的视频由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能 突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
更多推荐


所有评论(0)