记忆系统---支持多轮对话
- [一、先搞懂:短期记忆 vs 长期记忆](#一、先搞懂:短期记忆 vs 长期记忆)
-
- [1. 短期记忆(Short-Term Memory)](#1. 短期记忆(Short-Term Memory))
- [2. 长期记忆(Long-Term Memory)](#2. 长期记忆(Long-Term Memory))
- [二、LangChain 最常用 3 种记忆](#二、LangChain 最常用 3 种记忆)
-
- [1. ConversationBufferMemory(最简单记忆)](#1. ConversationBufferMemory(最简单记忆))
- [2. ConversationSummaryMemory(总结记忆)](#2. ConversationSummaryMemory(总结记忆))
- [3. ConversationBufferWindowMemory(窗口记忆)](#3. ConversationBufferWindowMemory(窗口记忆))
- [三、核心:Agent + 记忆 = 真正多轮对话](#三、核心:Agent + 记忆 = 真正多轮对话)
- [四、带记忆的对话 Agent](#四、带记忆的对话 Agent)
- 五、运行效果
- [六、3 个记忆组件对比](#六、3 个记忆组件对比)
- 七、总结
介绍:
- 短期记忆 vs 长期记忆
- LangChain 核心记忆组件
- 给 Agent 加上记忆,实现真正多轮对话
一、先搞懂:短期记忆 vs 长期记忆
1. 短期记忆(Short-Term Memory)
- 保存当前对话上下文
- 关掉程序就消失
- 作用:让 AI 知道刚才聊了什么
- 例子:你刚才问了什么,AI 要记得
2. 长期记忆(Long-Term Memory)
- 永久保存
- 存在文件/数据库/向量库
- 作用:记住用户习惯、历史对话、知识库
- 例子:你喜欢什么风格、你之前的论文题目
二、LangChain 最常用 3 种记忆
1. ConversationBufferMemory(最简单记忆)
- 把所有对话原文全部存起来
- 优点:最简单
- 缺点:对话越长越占token
2. ConversationSummaryMemory(总结记忆)
- 不存原文,存对话总结
- 优点:省token、适合长对话
3. ConversationBufferWindowMemory(窗口记忆)
- 只保留最近 N 轮对话
- 优点:轻量、稳定、最常用
三、核心:Agent + 记忆 = 真正多轮对话
没有记忆 → 问完就忘
有记忆 → 能连贯聊天、记住上下文
四、带记忆的对话 Agent
功能
- 带短期记忆
- 多轮对话不丢失上下文
- 可连续提问
- 基于你之前学的 ReAct Agent
python
# 安装依赖
# pip install langchain langchain-openai
python
# ==========================
# 1. 导入模块
# ==========================
from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory # 记忆核心
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import Tool
from langchain import hub
# ==========================
# 2. 初始化LLM
# ==========================
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.3,
api_key="你的API_KEY",
base_url="https://api.chatanywhere.tech/v1"
)
# ==========================
# 3. 【核心】添加记忆!
# 记忆会自动保存对话历史
# ==========================
memory = ConversationBufferMemory(
memory_key="chat_history", # 记忆键(固定)
return_messages=True # 返回消息格式
)
# ==========================
# 4. 定义工具
# ==========================
def simple_calculate(expression):
return str(eval(expression))
tools = [
Tool(
name="Calculator",
func=simple_calculate,
description="用于计算数学表达式"
)
]
# ==========================
# 5. 创建带记忆的 Agent
# ==========================
prompt = hub.pull("hwchase17/react-chat") # 支持记忆的提示词
agent = create_react_agent(llm, tools, prompt)
# 执行器 + 记忆
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
memory=memory, # 把记忆加进来
verbose=True,
max_iterations=3
)
# ==========================
# 6. 多轮对话测试
# ==========================
print("=== 带记忆的AI助手(输入exit退出)===")
while True:
user_input = input("你:")
if user_input.lower() == "exit":
print("对话结束")
break
# 运行Agent(记忆自动保存)
response = agent_executor.invoke({"input": user_input})
print("AI:", response["output"])
五、运行效果
你:我叫小明
AI:好的,我记住你叫小明啦!
你:我是谁?
AI:你是小明!
你:10+20等于多少?
AI:等于30。
你:刚才算的结果是多少?
AI:刚才算的是 10+20=30。
这就是记忆的作用!
没有记忆,AI 根本不知道"刚才算的是什么"。
六、3 个记忆组件对比
| 组件 | 特点 | 适合场景 |
|---|---|---|
| ConversationBufferMemory | 存全部原文,最简单 | 短对话 |
| ConversationBufferWindowMemory | 只存最近几轮 | 长对话 |
| ConversationSummaryMemory | 存总结,省token | 超长篇对话 |
七、总结
- 记忆 = 保存对话历史
- Agent 每次提问都会带上历史
- 所以能理解上下文、实现多轮对话