LangChain 大模型对话记忆模块实战与 Web 应用
目录
- 前言:为什么需要对话记忆?
- [一、核心认知:原始 API vs LangChain 封装](#一、核心认知:原始 API vs LangChain 封装)
- [1.1 原生 API 调用的痛点(无记忆)](#1.1 原生 API 调用的痛点无记忆)
- [1.2 LangChain 的价值:封装记忆与简化调用](#1.2 LangChain 的价值封装记忆与简化调用)
- [二、LangChain 记忆模块核心组件](#二、LangChain 记忆模块核心组件)
- [2.1 基础款:ConversationBufferMemory(完整记忆)](#2.1 基础款 ConversationBufferMemory 完整记忆)
- [2.2 进阶款:窗口记忆与总结记忆](#2.2 进阶款窗口记忆与总结记忆)
- [(1)ConversationBufferWindowMemory(窗口记忆)](#1 ConversationBufferWindowMemory 窗口记忆)
- [(2)ConversationSummaryMemory(总结记忆)](#2 ConversationSummaryMemory 总结记忆)
- [三、实战 1:LangChain 记忆链(ConversationChain)](#三、实战 1 LangChain 记忆链 ConversationChain)
- [四、实战 2:Streamlit 搭建带记忆的聊天 Web 应用](#四、实战 2 Streamlit 搭建带记忆的聊天 Web 应用)
- [4.1 项目结构](#4.1 项目结构)
- [4.2 后端逻辑(scripts.py)](#4.2 后端逻辑 scriptspy)
- [4.3 前端逻辑(app.py)](#4.3 前端逻辑 apppy)
- [4.4 运行应用](#4.4 运行应用)
- [五、学习总结 & 避坑指南](#五、学习总结 避坑指南)
- [5.1 核心知识点总结](#5.1 核心知识点总结)
- [5.2 避坑指南](#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=[{: , : }]
)
(, completion1.choices[].message.content)
completion2 = client.chat.completions.create(
model=,
messages=[{: , : }]
)
(, completion2.choices[].message.content)

