结合我之前的文章,关于调用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