news 2026/6/15 12:48:35

LangChain框架中的记忆

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain框架中的记忆

《AI Agent智能体开发实践+玩转FastGPT 像搭积木一样构建智能体 LLM大语言模型AI Agent开发 智能体性能优化调试部署实施方法书籍 AIAgent智能体开发实践 无规格》【摘要 书评 试读】- 京东图书

本节将详细介绍LangChain框架中的记忆(Memory)系统,包括概念、接口实现和实际应用。

8.4.1 记忆的概念

在LangChain框架中,记忆是一种机制,用于存储和检索对话历史或其他上下文信息,使得模型能够“记住”之前的交互内容。这对于构建有状态的聊天机器人尤为重要,因为它允许对话具有连贯性和上下文感知能力。LangChain提供了多种记忆类型,包括:

  1. ConversationBufferMemory:存储完整对话历史。
  2. ConversationBufferWindowMemory:存储最近N条消息。
  3. ConversationSummaryMemory:存储对话摘要。
  4. EntityMemory:基于实体提取的记忆。
  5. VectorStoreRetrieverMemory:使用向量数据库存储和检索记忆。

记忆组件通常与ChatOpenAI等聊天模型结合使用,通过memory_key参数将对话历史注入模型调用中。

8.4.2 BaseChatMessageHistory接口及其子类

BaseChatMessageHistory是LangChain中用于管理消息历史的抽象基类,定义了消息存储和检索的标准接口。其主要方法包括:

  1. add_user_message(message:str):添加用户消息。
  2. add_ai_message(message:str):添加AI回复。
  3. clear():清空消息历史。
  4. messages:获取所有消息(属性)。

其常见子类说明如下。

1)内存存储实现

  1. ChatMessageHistory:内存中的存储消息(临时存储)。

2)持久化存储实现

  1. FileChatMessageHistory:基于文件存储(如JSON、CSV)。
  2. RedisChatMessageHistory:使用Redis存储。
  3. MongoDBChatMessageHistory:使用MongoDB存储。
  4. SQLChatMessageHistory:使用SQL数据库(如SQLite、PostgreSQL)。
  5. CassandraChatMessageHistory:使用Cassandra存储。

这些实现允许消息历史在会话间持久化,或在分布式系统中共享。

8.4.3 RunnableWithMessageHistory

RunnableWithMessageHistory是LangChain中用于构建带记忆功能的可运行组件的工具类。它允许将消息历史与链或模型结合,自动管理对话上下文的注入和更新。其核心功能包括:

  1. 自动从用户输入和模型输出中提取消息。
  2. 将历史消息格式化为模型可接受的输入格式。
  3. 支持多种记忆类型和消息历史存储方式。

【示例8.10】RunnableWithMessageHistory(LangChain+Qwen)。

#登录阿里云百炼平台,创建 API-KEY 并替换代码中的 "你的API密钥" #请确保你安装了最新版的 LangChain 相关包 #pip install -U langchain langchain-community langchain-core dashscope from langchain_community.chat_models import ChatTongyi from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.runnables import RunnablePassthrough, RunnableWithMessageHistory from langchain_community.chat_message_histories import ChatMessageHistory import os # 设置你的 DashScope API Key(通义千问) os.environ["DASHSCOPE_API_KEY"] = "你的API密钥" # 替换为你的实际密钥 # 创建聊天模型(使用 Qwen) chat = ChatTongyi(model="qwen-max") # 可选: qwen-turbo, qwen-plus, qwen-max # 创建提示模板,包含历史消息占位符 prompt = ChatPromptTemplate.from_messages([ ("system", "你是一个有用的助手。"), MessagesPlaceholder(variable_name="history"), ("human", "{input}") ]) # 创建链 chain = prompt | chat # 包装为带有历史记录的链 chain_with_history = RunnableWithMessageHistory( chain, lambda session_id: ChatMessageHistory(), # 历史记录工厂函数 input_messages_key="input", history_messages_key="history" ) # 使用链 response = chain_with_history.invoke( {"input": "你好!"}, config={"configurable": {"session_id": "user123"}} ) print(response.content)

输出:

你好!有什么我能帮助你的吗?

8.4.4 基于LangChain的聊天机器人

使用LangChain构建聊天机器人时,记忆组件是关键一环。以下是一个完整示例,展示如何结合RunnableWithMessageHistory和ConversationBufferMemory构建一个简单的聊天机器人。

【示例8.11】基于LangChain的聊天机器人(适配LangChain最新版+Qwen)。

#依赖安装(确保版本兼容) #pip install --upgrade langchain langchain-community langchain-core dashscope #登录阿里云DashScope控制台,创建API Key并替换代码中的"your_dashscope_api_key" from langchain_community.chat_models import ChatTongyi from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_community.chat_message_histories import ChatMessageHistory from langchain_core.runnables import RunnableWithMessageHistory # ✅ 修正导入路径 import os # 设置 DashScope API Key(请替换为你自己的) api_key=os.getenv("DASHSCOPE_API_KEY") # 1. 创建聊天模型(使用 Qwen) chat_model = ChatTongyi( model="qwen-plus", # 可选: qwen-turbo, qwen-plus, qwen-max api_key=api_key, temperature=0.7 ) # 2. 创建提示模板 prompt_template = ChatPromptTemplate.from_messages([ ("system", "你是一个友好的AI助手,名字叫小智。"), MessagesPlaceholder(variable_name="chat_history"), ("human", "{user_input}") ]) # 3. 创建处理链 chain = prompt_template | chat_model # 4. 创建历史记录存储字典 store = {} def get_session_history(session_id: str) -> ChatMessageHistory: if session_id not in store: store[session_id] = ChatMessageHistory() return store[session_id] # 5. 创建带有历史记录的链 chatbot = RunnableWithMessageHistory( chain, get_session_history, input_messages_key="user_input", history_messages_key="chat_history" ) # 6. 模拟对话 def chat(session_id, message): response = chatbot.invoke( {"user_input": message}, config={"configurable": {"session_id": session_id}} ) return response.content # 测试对话 session = "user_123" print("AI:", chat(session, "你好!")) print("AI:", chat(session, "你叫什么名字?")) print("AI:", chat(session, "我们刚才聊了什么?"))

输出:

AI: 你好呀!有什么我可以帮你的吗?😊 AI: 我叫小智,很高兴认识你!🌟 有什么问题或者需要帮助的吗? AI: 我们刚刚聊到我是小智,一个友好且乐于助人的AI助手!🌟 你还问我我们之前聊了什么,现在你看到的就是我们的最新对话啦!有什么其他想知道的吗?😊

这个实现完整展示了LangChain的对话记忆功能,能够跨多个交互回合保持上下文一致性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 12:31:17

LangFlow开发客户投诉根因分析器

LangFlow开发客户投诉根因分析器 在客户服务领域,每天都有成千上万条用户反馈涌入企业系统——从APP评价、客服工单到社交媒体留言。这些文本中藏着产品质量问题、物流瓶颈或服务漏洞的线索,但传统处理方式往往依赖人工阅读与经验判断,效率低…

作者头像 李华
网站建设 2026/6/15 8:09:05

LangFlow打造用户画像动态更新系统

LangFlow打造用户画像动态更新系统 在个性化推荐、智能客服和精准营销日益依赖数据驱动的今天,如何让系统真正“理解”用户,并实时适应其行为变化,是企业构建智能化服务体系的核心命题。传统的用户画像系统多基于静态标签和批量处理&#xff…

作者头像 李华
网站建设 2026/6/13 22:52:04

LangFlow实现直播带货话术优化建议

LangFlow实现直播带货话术优化建议 在今天的直播电商战场上,每一秒的停留、每一次互动都可能决定一场直播的成败。而在这背后,真正撬动用户情绪、促成下单的关键,往往是那一句恰到好处的话术——“姐妹们!这色号真的黄皮亲妈&…

作者头像 李华
网站建设 2026/6/12 21:57:17

2025年第50周最热门的开源项目(Github)

对本期榜单的综合分析如下: 一、整体趋势 AI与Agent类项目强势崛起 本期榜单中以AI技术驱动的项目表现尤为突出,前几名大多围绕AI应用和智能体构建展开,如: 第1名 DayuanJiang/next-ai-draw-io(利用自然语言结合AI绘图…

作者头像 李华
网站建设 2026/6/15 3:30:51

LangFlow实现续约预警与挽留建议

LangFlow实现续约预警与挽留建议 在SaaS企业运营中,客户流失往往不是突然发生的事件,而是一个缓慢滑坡的过程。某位客户最后一次登录是25天前,使用频率下降了70%,最近三个月提了6次工单——这些信号散落在数据库的不同表里&#x…

作者头像 李华
网站建设 2026/6/11 18:14:45

1、Windows 7:开启高效便捷的计算新体验

Windows 7:开启高效便捷的计算新体验 1. 走近 Windows 7 Windows 7 是一款备受期待的计算机操作系统,它带来了看似简单却功能强大的计算体验。其用户界面优雅美观,对于熟悉 Windows Vista 的用户而言,界面经过了优化和升级,只需学习少量新的导航功能;而使用早期 Window…

作者头像 李华