大家好,我是锋哥。最近连载更新《基于LangChain的RAG与Agent智能体》技术专题。
本课程主要介绍和讲解RAG,LangChain简介,接入通义千万大模型,Ollama简介以及安装和使用,OpenAI库介绍和使用,以及最重要的基于LangChain实现RAG与Agent智能体开发技术。同时也配套视频教程 《2027版 基于LangChain的RAG与Agent智能体开发视频教程》
前面我们实现的示例会话历史记录存在内存里的,当程序关闭就没有了。我们实际企业级项目需要持久化会话历史记录,比如存redis,postgres等。
我们用RedisChatMessageHistory来实现下持久化会话记忆功能。
首先我们电脑上要安装redis server端。
直接双击安装即可,都默认配置。
接着我们项目里要安装redis客户端库。
pip install redis -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
我们来实现下代码,基于上一讲的示例:
import redis
from langchain_community.chat_message_histories import RedisChatMessageHistory
from langchain_community.llms.tongyi import Tongyi
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnableWithMessageHistory
# 1. 定义聊天提示模板(和图片结构一致)
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个友好的AI助手,会结合对话历史回答用户问题。"), # 系统消息:设定AI基础角色
MessagesPlaceholder("history"), # 对话历史占位符:后续会被真实历史数据替换
("human", "请回答如下问题:{question}") # 当前用户的提问(带变量占位)
])
model = Tongyi(model="qwen-plus") # 创建模型
chain = prompt | model
# 实现根据session_id获取RedisChatMessageHistory类对象
def get_session_history(session_id):
return RedisChatMessageHistory(
url="redis://localhost:6379/0",
session_id=session_id,
key_prefix="chat_history:" # Redis key 前缀
)
# 创建带有会话历史数据的链
message_history_chain = RunnableWithMessageHistory(
chain, # 被增强的原有链
get_session_history, # 根据会话id获取InMemoryChatMessageHistory类对象
input_messages_key="question", # 输入消息的键名
history_messages_key="history" # 历史消息的键名
)
if __name__ == '__main__':
session_config = {
"configurable": {
"session_id": "user01"
}
}
result = message_history_chain.invoke({"question": "IT行业里哪个细分领域职位最有前途,直接告诉我职位名称即可"},
session_config)
print("第一次AI大模型回答:", result)
result = message_history_chain.invoke({"question": "这个职位需要多少技术积累?简单回答即可"}, session_config)
print("第二次AI大模型回答:", result)
result = message_history_chain.invoke({"question": "这个职位在北京5年经验年薪平均多少万?简单回答即可"},
session_config)
print("第三次AI大模型回答:", result)
运行下:效果一样。
我们用redis desktop Manager打开,可以看到redis里存了会话历史记录了。