
























模型本身是无状态的,也就是不具备记忆功能,单次对话无法留存上下文信息,多轮交互中会遗忘历史对话内容。用户之所以感觉AI工具拥有记忆,是因为AI工具给大模型封装了一层记忆。
LangChain作为主流的大模型应用开发框架,内置完善的记忆模块(Memory模块),能够高效管理对话历史记录,让AI实现逻辑连贯的多轮对话,接下来就介绍如何使用LangChain实现对话记忆功能。
LangChain实现对话记忆功能要掌握下列三个核心组件,需三者配合才能完成上下文管理全流程:
以ChatMessageHistory为核心,基于内存临时存储对话记录,无需安装额外的数据库,适合开发者快速编码和测试。对话数据仅在应用程序运行期间留存,重启应用程序后会清空对话数据,可满足AI应用的轻量化对话场景需求。
RunnableWithMessageHistory是对话记忆架构的核心组件,可包装LangChain的任意执行链,自动实现对话历史记录的读取、拼接和更新,能够支持多个会话数据的相互隔离,解决了传统组件存在的多会话冲突问题。
聊天提示词模板ChatPromptTemplate用于规范向大模型输入的提示词格式,它固定采用“系统指令+历史对话+当前提问”的结构,让大模型能够精准识别上下文信息,保证当前用户的对话记忆功能逻辑统一,不会胡说八道。
ChatMessageHistory组件来自于langchain_community,而RunnableWithMessageHistory和ChatPromptTemplate来自于langchain-core,故需提前安装相关的langchain包。
在命令行窗口执行下面命令,即可安装LangChain及其用到的Ollama插件,以及记忆功能需要的langchain_community:
确保本地已经通过Ollama下载了离线大模型,比如在命令行窗口执行下面命令,即可下载大模型qwen2:1.5b:
等待大模型下载完毕,在命令行窗口执行下面命令,即可启动Ollama并加载大模型:
在Python代码开头添加下面的导包语句,表示引入ChatMessageHistory、RunnableWithMessageHistory、ChatPromptTemplate三个组件,以及LangChain的大模型工具OllamaLLM:
在OllamaLLM的构造方法中填写model参数,指定当前引用的离线大模型名称,如下:
然后编写下面的LangChain调用代码,先利用ChatPromptTemplate构造给history变量占位的提示词模板,接着往ChatMessageHistory组件存储对话历史,再通过RunnableWithMessageHistory在封装执行链时带入历史数据,示例代码如下:
运行上面的Python代码,根据提示先后输入问题内容“你叫什么名字?”、“不对,你叫小明”、“你叫什么名字?”,输出日志结果如下:
由日志信息发现,AI应用一开始回答“我叫小冰”,后来被改名后回答自己叫“小明”。可见通过使用LangChain的记忆组件,初步实现了简单的AI对话记忆功能。
本系列的AI应用开发文章目录为《15天学会AI应用开发全目录(零基础小白,零Token消耗)》。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。