结合我之前的文章,关于调用memory的部分改成如下所示(老版本也可用,只不过不适配新版本的Langchain)
langchain版本均采用最新版本,同时,Python版本要在3.10以上,详情可参考Langchain官方文档
from langchain_classic.memory import ConversationBufferMemory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI
from langchain_core._api.deprecation import LangChainDeprecationWarning
import os
import dotenv
import warnings# from langgraph.checkpoint.memory import InMemorySaver #新版本的Memory的使用方法def My_Memory(msg:str)->str:warnings.filterwarnings('ignore', category=LangChainDeprecationWarning)dotenv.load_dotenv() # 加载api密钥api_key = os.environ.get('DEEPSEEK_API_KEY')my_model = ChatOpenAI(model='deepseek-chat',base_url='https://api.deepseek.com/',openai_api_key=api_key)warnings.filterwarnings('ignore', category=LangChainDeprecationWarning)# 防止旧版本不支持导致的警告memory = ConversationBufferMemory(memory_key='My_History', return_messages=True) #这里的My_History是我自己定义的ai记忆的名字prompts = ChatPromptTemplate.from_messages([# 注意这里的格式('角色', '提示词)('system','你现在是一个ai旅伴,你的名字叫Btta,现在你只需要回答用户的问题,不要说多余的话,不要说任何无关的内容'),MessagesPlaceholder(variable_name='My_History'),('human','{text}')])# 加载历史对话load_memory = RunnablePassthrough.assign(My_History = lambda x : memory.load_memory_variables({})['My_History'])# 构造链chain = load_memory | prompts | my_model | StrOutputParser()res = chain.invoke({'text':msg})#invoke({'text':msg})return res