LangChain 实战:大模型对话记忆模块(附完整代码 + Web 案例)

目录

前言:为什么需要对话记忆?

一、核心认知:原始 API vs LangChain 封装

1.1 原生 API 调用的痛点(无记忆)

1.2 LangChain 的价值:封装记忆与简化调用

二、LangChain 记忆模块核心组件

2.1 基础款:ConversationBufferMemory(完整记忆)

2.2 进阶款:窗口记忆与总结记忆

(1)ConversationBufferWindowMemory(窗口记忆)

(2)ConversationSummaryMemory(总结记忆)

三、实战 1:LangChain 记忆链(ConversationChain)

四、实战 2:Streamlit 搭建带记忆的聊天 Web 应用

4.1 项目结构

4.2 后端逻辑(scripts.py)

4.3 前端逻辑(app.py)

4.4 运行应用

五、学习总结 & 避坑指南

5.1 核心知识点总结

5.2 避坑指南

最后


前言:为什么需要对话记忆?

日常使用豆包、ChatGPT 等 AI 应用时,我们习以为常的「上下文记忆」功能(比如问完 “林俊杰是谁” 再问 “他的代表作”,AI 能精准理解),其实并非大模型原生自带 —— 直接调用大模型 API 时,每次请求都是独立的,模型只会基于当前输入的 Token 逐个预测回复,完全没有 “记忆” 能力,返回的也是包含原始格式的完整响应。

LangChain 作为大模型应用开发的核心框架,已经帮我们封装了对话记忆、Prompt 模板、链式调用等高频功能,无需手动解析原始 API 的复杂输出,也不用自己拼接上下文。

一、核心认知:原始 API vs LangChain 封装

1.1 原生 API 调用的痛点(无记忆)

直接调用大模型 API(即使是通义千问等兼容 OpenAI 接口的模型),每次请求都是 “一次性” 的,模型无法关联历史对话:

from openai import OpenAI import os # 初始化客户端(对接阿里云通义千问) client = OpenAI( api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) # 第一次提问:林俊杰是谁 completion1 = client.chat.completions.create( model="qwen3.5-plus", messages=[{"role":"user","content":"林俊杰是谁?"}] ) print("第一轮回复:", completion1.choices[0].message.content) # 第二次提问:他有哪些代表作(无上下文,模型无法识别"他") completion2 = client.chat.completions.create( model="qwen3.5-plus", messages=[{"role":"user","content":"他有哪些代表作?"}] ) print("第二轮回复:", completion2.choices[0].message.content) 

输出结果:第二轮回复会反问 “你说的他是谁?”,因为模型没有历史对话的记忆。

1.2 LangChain 的价值:封装记忆与简化调用

LangChain 的核心价值在于:

  • 封装对话记忆模块,无需手动拼接上下文;
  • 统一不同大模型的调用方式(OpenAI / 通义千问 / 讯飞等);
  • 提供链式调用能力,串联 “记忆→Prompt→模型→输出” 全流程;
  • 自动处理响应格式,直接返回可读的回复内容。

二、LangChain 记忆模块核心组件

LangChain 提供了多种记忆类型,适配不同场景,核心均基于ConversationBufferMemory扩展:

记忆类型核心逻辑适用场景
ConversationBufferMemory保存所有对话历史,无长度限制短对话、需要完整上下文的场景
ConversationBufferWindowMemory只保存最近k轮对话只需要短期记忆、节省 Token 的场景
ConversationSummaryMemory将对话历史总结成文本长对话、需要压缩上下文的场景
ConversationSummaryBufferMemory短对话保留原文,超长部分总结兼顾细节和长度的长对话场景
ConversationTokenBufferMemory按 Token 数限制对话长度严格控制上下文 Token 消耗的场景

2.1 基础款:ConversationBufferMemory(完整记忆)

最核心的记忆组件,保存所有对话历史,是其他记忆类型的基础:

from langchain.memory import ConversationBufferMemory # 初始化记忆(return_messages=True:以消息对象存储,更易复用) memory = ConversationBufferMemory(return_messages=True) # 保存第一轮对话 memory.save_context({"input": "我的名字是陆天宇"}, {"output": "你好,陆天宇!"}) # 保存第二轮对话 memory.save_context({"input": "我是AI开发者"}, {"output": "太酷了!我们是同行~"}) # 加载记忆(查看历史对话) print("记忆中的历史对话:") print(memory.load_memory_variables({})) 

输出结果

记忆中的历史对话: {'history': [HumanMessage(content='我的名字是陆天宇'), AIMessage(content='你好,陆天宇!'), HumanMessage(content='我是AI开发者'), AIMessage(content='太酷了!我们是同行~')]} 

2.2 进阶款:窗口记忆与总结记忆

(1)ConversationBufferWindowMemory(窗口记忆)

只保留最近k轮对话,避免上下文过长:

from langchain.memory import ConversationBufferWindowMemory # k=1:只保留最近1轮对话 memory = ConversationBufferWindowMemory(k=1, return_messages=True) memory.save_context({"input": "名字是陆天宇"}, {"output": "你好"}) memory.save_context({"input": "是AI开发者"}, {"output": "同行"}) # 加载记忆(仅保留最后1轮) print(memory.load_memory_variables({})) # 输出:{'history': [HumanMessage(content='是AI开发者'), AIMessage(content='同行')]} 
(2)ConversationSummaryMemory(总结记忆)

将长对话总结为文本,大幅节省 Token:

from langchain.memory import ConversationSummaryMemory from langchain_openai import ChatOpenAI import os # 初始化模型(用于总结对话) model = ChatOpenAI( model="qwen3.5-plus", api_key=os.getenv("DASHSCOPE_API_KEY"), openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1" ) # 初始化总结记忆 memory = ConversationSummaryMemory(llm=model, return_messages=True) memory.save_context({"input": "名字是陆天宇,是AI开发者,专注NLP方向"}, {"output": "记住了你的信息~"}) # 加载记忆(已自动总结) print(memory.load_memory_variables({})) # 输出:{'history': [SystemMessage(content='陆天宇介绍自己是专注NLP方向的AI开发者,AI表示记住了相关信息。')]} 

三、实战 1:LangChain 记忆链(ConversationChain)

ConversationChain是 LangChain 封装的 “记忆 + 模型” 组合链,无需手动保存 / 加载记忆,自动处理上下文:

from langchain.chains import ConversationChain from langchain_openai import ChatOpenAI from langchain.memory import ConversationBufferMemory import os # 1. 初始化模型 model = ChatOpenAI( model="qwen3.5-plus", api_key=os.getenv("DASHSCOPE_API_KEY"), openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1" ) # 2. 初始化记忆 memory = ConversationBufferMemory(return_messages=True) # 3. 创建记忆链(自动关联模型和记忆) chain = ConversationChain(llm=model, memory=memory) # 4. 第一轮对话 resp1 = chain.invoke({"input": "我的名字是陆天宇"}) print("AI回复1:", resp1["response"]) # 5. 第二轮对话(带上下文) resp2 = chain.invoke({"input": "你知道我的名字吗?"}) print("AI回复2:", resp2["response"]) 

输出结果

AI回复1: 你好,陆天宇!很高兴认识你~ AI回复2: 当然知道啦,你的名字是陆天宇呀 😊 

四、实战 2:Streamlit 搭建带记忆的聊天 Web 应用

基于 Streamlit 快速实现带记忆的聊天界面,模仿 ChatGPT 交互:

4.1 项目结构

chat-app/ ├── app.py # 前端页面逻辑 └── scripts.py # 后端模型调用逻辑 

4.2 后端逻辑(scripts.py)

from langchain.chains import ConversationChain from langchain_openai import ChatOpenAI def get_chat_response(prompt, memory, api_key): # 初始化模型 model = ChatOpenAI( model="qwen3.5-plus", openai_api_key=api_key, openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1" ) # 创建记忆链 chain = ConversationChain(llm=model, memory=memory) # 调用模型 response = chain.invoke({"input": prompt}) return response["response"] 

4.3 前端逻辑(app.py)

import streamlit as st from langchain.memory import ConversationBufferMemory from scripts import get_chat_response # 页面配置 st.title("💬 带记忆的AI聊天助手") st.sidebar.title("配置") api_key = st.sidebar.text_input("阿里云API Key", type="password") # 初始化会话状态(保存记忆和消息) if "memory" not in st.session_state: st.session_state["memory"] = ConversationBufferMemory(return_messages=True) st.session_state["messages"] = [{"role": "ai", "content": "你好,我是你的AI助手~"}] # 渲染历史消息 for msg in st.session_state["messages"]: st.chat_message(msg["role"]).write(msg["content"]) # 处理用户输入 prompt = st.chat_input("请输入你的问题...") if prompt: if not api_key: st.warning("请先输入API Key!") st.stop() # 添加用户消息 st.session_state["messages"].append({"role": "human", "content": prompt}) st.chat_message("human").write(prompt) # 调用AI回复 with st.spinner("AI思考中..."): response = get_chat_response(prompt, st.session_state["memory"], api_key) # 添加AI消息 st.session_state["messages"].append({"role": "ai", "content": response}) st.chat_message("ai").write(response) 

4.4 运行应用

# 安装依赖 pip install streamlit langchain langchain-openai # 运行应用 streamlit run app.py 

运行后访问http://localhost:8501,即可体验带上下文记忆的聊天界面。

五、学习总结 & 避坑指南

5.1 核心知识点总结

  1. 记忆本质:LangChain 的记忆模块本质是 “保存对话历史→拼接上下文→传给模型” 的封装,核心解决大模型 “无状态” 的问题;
  2. 核心组件ConversationBufferMemory是基础,其他记忆类型均为其优化(窗口、总结、Token 限制);
  3. 链式调用ConversationChain自动关联 “记忆 + 模型”,无需手动保存 / 加载记忆,是最常用的简化方式;
  4. 工程化:结合 Streamlit 可快速实现可视化应用,会话状态(st.session_state)是保存跨刷新数据的核心。

5.2 避坑指南

  1. API Key 问题:避免硬编码 API Key,优先使用环境变量(os.getenv)或前端输入;
  2. 模型兼容问题:调用通义千问等非 OpenAI 模型时,需指定openai_api_base,且模型名称要准确(如qwen3.5-plus);
  3. Token 计数报错:使用ConversationSummaryBufferMemory/ConversationTokenBufferMemory时,需自定义get_num_tokens_from_messages函数(解决NotImplementedError);
  4. 会话状态丢失:Streamlit 应用中,记忆和消息必须存在st.session_state中,否则刷新页面会丢失历史。

最后

LangChain 的记忆模块是大模型应用开发的核心基础,掌握不同记忆类型的适用场景,能大幅提升 AI 应用的交互体验。从手动实现记忆到封装链,再到前端可视化,一套完整的学习路径能帮助我们快速落地实际应用。后续可进一步学习记忆的持久化(保存到数据库)、多轮对话总结优化等进阶内容。

Read more

深度解析Claude官方Skill-Creator,不止是模板,更是AI技能工程化的完整体系

深度解析Claude官方Skill-Creator,不止是模板,更是AI技能工程化的完整体系

在AI Agent快速迭代的今天,Anthropic推出的Claude Skill系统,正在重新定义AI能力的扩展方式。而作为这个系统的“元技能”,Skill-Creator更是打破了人们对“技能开发”的固有认知——它不是简单的SKILL.md文档模板,也不是零散的工具集合,而是一套将AI技能开发标准化、流程化、工程化的完整体系。基于Claude官方Skill-Creator源码(485行SKILL.md,2026年3月7日版本)及Anthropic官方博客资料,我们从设计理念、架构细节、实操流程到企业落地,全方位拆解这个强大的“技能工厂”,让每一位从业者都能看懂其核心价值与应用逻辑。 一、认知澄清:Skill-Creator的本质的是“AI技能工程化系统” 很多人初次接触Skill-Creator时,都会误以为它只是一个用来生成SKILL.md文件的工具,毕竟从表面上看,它确实能引导用户完成技能文档的撰写。但深入源码和官方文档后会发现,它的本质是一个“AI技能工程化系统”,核心目标是解决三类关键问题:Skill是否真的能提升结果质量而不是单纯的心理安慰,Skill是否能在正确的场

封神!2026最火本地AI智能体OpenClaw保姆级教程|新手10分钟部署(领一键部署文档)

封神!2026最火本地AI智能体OpenClaw保姆级教程|新手10分钟部署(领一键部署文档)

封神!2026最火本地AI智能体OpenClaw保姆级教程|新手10分钟部署,扫码直接领一键部署文档 家人们谁懂啊😭! 还在羡慕别人的AI助理能自动干活、管理文件、写代码、发消息?还在为复杂的AI部署步骤头大,看半天教程还是无从下手,要么报错不断,要么适配不了国内环境? 今天给大家挖到宝了—— OpenClaw (原Clawdbot、Moltbot),2026年初正式更名升级,堪称“普通人的第一款本地AI智能体”,不用懂复杂代码,新手跟着走,10分钟就能部署成功,隐私可控还能自定义功能,办公、学习效率直接翻倍! 重点来了:文末附专属福利, 扫描微信二维码,免费领取OpenClaw一键部署教程文档 ,包含详细命令、避坑指南、国内平台适配技巧,打印出来跟着操作,零失败! 先搞懂:OpenClaw到底牛在哪?(新手必看) 很多人以为它是普通聊天机器人,大错特错!OpenClaw是一款 开源、本地优先的AI个人智能体 ,简单说就是“能在你电脑上长期干活的AI助理”,核心优势直接戳中普通人痛点: * 隐私拉满 :所有数据都存在你自己的设备上,不泄露、不上传,

2026 最全 AI 应用学习路线图:工具、心法、资源、趋势、博主推荐一文打包,这一篇够了(万字长文,建议收藏!)

大家好啊,我是甲木。 今天是 2026 年,年后复工第一天,先祝大家复工愉快(bushi 春节期间,好几个朋友问我同一个问题:「你不是搞 AI 的吗,我也想学学,从哪开始啊?」做老师的、做销售的、刚毕业的学生、创业十几年的老板,当然也包括后台经常私信我的粉丝朋友们。 背景完全不同,困惑高度一致,想用 AI 却不知从何入手。 一搜「AI 学习路线」,弹出来的东西直接劝退:线性代数、概率论与数理统计、机器学习、深度学习balabla一堆…直接从入门到放弃.. 所以趁着复工第一天,我把这两年自己摸索的、观察到的、跟各路高手聊出来的经验,做一次彻底的梳理。给大家一份AI学习路线图。 先说清楚:这篇文章不是写给 AI 工程师的。 如果你是计算机科班出身,想去大厂做算法岗,传统路线图对你有用,按部就班学就好。但如果你是运营、老师、

微信也能养“小龙虾”了?QClaw 爆火背后:AI 正在从“会聊天”走向“会干活”

微信也能养“小龙虾”了?QClaw 爆火背后:AI 正在从“会聊天”走向“会干活”

🔥 个人主页:杨利杰YJlio❄️ 个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》《Python》《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更简单,让重复的工作自动化 微信也能养“小龙虾”了?QClaw 爆火背后:AI 正在从“会聊天”走向“会干活” * 1、微信也能养“小龙虾”了?这次真的不是玩梗 * 2、OpenClaw 为什么突然这么火? * 3、QClaw 和普通 AI 的本质区别,到底在哪? * 3.1 传统 AI 的工作流 * 3.2 QClaw 这类