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