关于Langchain更新解决Memory的引用

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

posted @ 2025-11-13 22:57  AttaSayyid  阅读(66)  评论(0)    收藏  举报