为了让大模型能够记忆历史消息,让其在回答每一个问题时不至于都开启一次新的会话,langchain中内置了会话记忆的功能,接下来,我将举例介绍:
当我们有多个用户在对话时,为了方便对会话内容进行标记,我们为他们的对话进行一个标记,这里我们命名为:
session_id,并用store={}进行统一管理。获取对应会话历史消息内容:
store={} # 获取会话历史 def get_session_history(session_id:str)->BaseChatMessageHistory: if session_id not in store: store[session_id] = InMemoryChatMessageHistory() return store[session_id]其中:
InMemoryChatMessageHistory()
就是一个内存中的聊天历史容器,我们将聊天历史存入其对应的store[session_id]中进行保存。
创建一个可运行的模型,带会话历史:
# 创建一个可运行的模型,带会话历史 with_history_message_model = RunnableWithMessageHistory(model,get_session_history) config={"configurable":{"session_id":"1"}}RunnableWithMessageHistory(model,get_session_history)
= 给一个普通 Runnable 加上“自动管理聊天历史”的能力,把 model 包装起来,让它能够根据 session_id 自动读取和保存历史消息。