记忆模块Memory
在最开始我们就通过实验知道LLM 本身是没有记忆的,每一次LLM的API调用都是一个全新的会话。但在某些应用程序中,如:聊天机器人,让LLM记住以前的历史交互是非常重要,无论是在短期的还是长期的。langchain中的“Memory”即对话历史(message history)就是为了实现这一点。
#用于创建对话链
from langchain.chains import ConversationChain
#用于存储对话历史,以便在后续对话中参考
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI
import warnings
warnings.filterwarnings("ignore")
# 初始化大模型(需配置OPENAI_API_KEY)
API_KEY = "xxxxxxxxx"
llm = ChatOpenAI(model="deepseek-chat",
openai_api_key=API_KEY,
openai_api_base="https://api.deepseek.com")
#实例化一个对话缓冲区,用于存储对话历史
memory = ConversationBufferMemory()
#创建一个对话链,将大语言模型和对话缓冲区关联起来。
conversation = ConversationChain(
llm=llm,
memory=memory,
)
conversation.invoke("今天早上猪八戒吃了2个人参果。")
print("记忆1: ", conversation.memory.buffer)
print()
conversation.invoke("下午猪八戒吃了1个人参果。")
print("记忆2: ", conversation.memory.buffer)
print()
conversation.invoke("晚上猪八戒吃了3个人参果。")
print("记忆3: ", conversation.memory.buffer)
print()
conversation.invoke("猪八戒今天一共吃了几个人参果?")
print("记忆4: ", conversation.memory.buffer)
1. 导入必要的模块
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI
import warnings
warnings.filterwarnings("ignore")
2. 初始化大模型
API_KEY = "xxxxxxxxx"
llm = ChatOpenAI(model="deepseek-chat",
openai_api_key=API_KEY,
openai_api_base="https://api.deepseek.com")
3. 创建对话缓冲区
memory = ConversationBufferMemory()
4. 创建对话链
conversation = ConversationChain(
llm=llm,
memory=memory,
)
5. 进行多轮对话
conversation.invoke("今天早上猪八戒吃了2个人参果。")
print("记忆1: ", conversation.memory.buffer)
print()
conversation.invoke("下午猪八戒吃了1个人参果。")
print("记忆2: ", conversation.memory.buffer)
print()
conversation.invoke("晚上猪八戒吃了3个人参果。")
print("记忆3: ", conversation.memory.buffer)
print()
conversation.invoke("猪八戒今天一共吃了几个人参果?")
print("记忆4: ", conversation.memory.buffer)
预期输出
记忆1: 人类: 今天早上猪八戒吃了2个人参果。
AI: 好的,我知道了猪八戒今天早上吃了2个人参果。
记忆2: 人类: 今天早上猪八戒吃了2个人参果。
AI: 好的,我知道了猪八戒今天早上吃了2个人参果。
人类: 下午猪八戒吃了1个人参果。
AI: 了解,猪八戒下午又吃了1个人参果。
记忆3: 人类: 今天早上猪八戒吃了2个人参果。
AI: 好的,我知道了猪八戒今天早上吃了2个人参果。
人类: 下午猪八戒吃了1个人参果。
AI: 了解,猪八戒下午又吃了1个人参果。
人类: 晚上猪八戒吃了3个人参果。
AI: 明白了,猪八戒晚上还吃了3个人参果。
记忆4: 人类: 今天早上猪八戒吃了2个人参果。
AI: 好的,我知道了猪八戒今天早上吃了2个人参果。
人类: 下午猪八戒吃了1个人参果。
AI: 了解,猪八戒下午又吃了1个人参果。
人类: 晚上猪八戒吃了3个人参果。
AI: 明白了,猪八戒晚上还吃了3个人参果。
人类: 猪八戒今天一共吃了几个人参果?
AI: 猪八戒今天一共吃了6个人参果(早上2个 + 下午1个 + 晚上3个)。
关键功能说明
功能设计:多轮对话
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI
import warnings
warnings.filterwarnings("ignore")
# 实例化一个对话缓冲区,用于存储对话历史
memory = ConversationBufferMemory()
# 创建一个对话链,将大语言模型和对话缓冲区关联起来。
conversation = ConversationChain(
llm=llm,
memory=memory,
)
print("欢迎使用对话系统!输入 '退出' 结束对话。")
while True:
user_input = input("你: ")
if user_input.lower() in ['退出', 'exit', 'quit']:
print("再见!")
break
response = conversation.predict(input=user_input)
print(f"AI: {response}")
# 打印出对话历史,即 memory.buffer 的内容
print("对话历史:", memory.buffer)

浙公网安备 33010602011771号