langchain入门学习笔记——聊天机器人构建之redis保存历史聊天信息
langchain学习值保存历史聊天记录,实现记忆
前言
前言:本篇笔记主要内容来自小破站楼兰老师的教学视频,再加上自己的一些理解,看一遍相当于看了一遍视频教程,可以节省很多时间,属于入门教程,此外基础的环境搭建,大模型对接,相关基础概念,交互方式等内容可以看我的上上一篇笔记。
tips:有些我觉得值得记下来的内容我懒得打字,太消耗时间,就直接截图了,希望不要介意~
小目标:
链式表达式部分在我的上一篇笔记中
本章节希望去实现记忆:
历史聊天记录的实现方式
内存实现
langchain有一个组件可以帮我们把历史聊天记录保存下来
langchain_core.chat_history
这个组件中提供了很多的实现
例如:InMemoryChatMessageHistory
顾名思义,也就是在内存中保留历史记录
我们可以在组件中添加一些历史的信息:包括我们发给用户的信息(usermessage或humanmessage)、大模型返回给我们的信息(aimessage)
代码也比较简单,见名知意:
import os
from langchain_core.chat_history import InMemoryChatMessageHistory
from config.load_key import load_key
if not os.environ.get("DEEPSEEK_API_KEY"):
os.environ["DEEPSEEK_API_KEY"]=load_key("DEEPSEEK_API_KEY")
from langchain_deepseek import ChatDeepSeek
llm = ChatDeepSeek(model="deepseek-chat", )
#这是BaseChatMessageHistory的子类
history = InMemoryChatMessageHistory()
#第一轮聊天
history.add_user_message("你是谁?用20字概括自己")
aimessage = llm.invoke(history.messages)
print(aimessage.content)
history.add_ai_message(aimessage)
#第二轮聊天
history.add_user_message("请重复一遍")
aimessage2=llm.invoke(history.messages)
print(aimessage2.content)
history.add_ai_message(aimessage2)
#打印历史聊天记录
print("Chat history:")
for message in history.messages:
print(f"{type(message).__name__}:{message.content}")
结果:
缺点:
redis实现
相关文档:history文档
这里需要有一个redis客户端,不做重点介绍,网上教程也很多
依赖下载:
pip install langchain-redis
pip install redis
此外这里要用到一些redis的扩展,可以选择装一个redis stack
通过docker容器来搭建
教程:redisstack搭建
由于我的虚拟机上本来就就有redis了,占用了默认的6379 端口,所以这里端口用的6380
代码:这里我的redis stack没有配密码所以注释掉了
import os
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_redis import RedisChatMessageHistory
from config.load_key import load_key
if not os.environ.get("DEEPSEEK_API_KEY"):
os.environ["DEEPSEEK_API_KEY"]=load_key("DEEPSEEK_API_KEY")
if not os.environ.get("REDIS_PASSWORD"):
os.environ["REDIS_PASSWORD"]=load_key("REDIS_PASSWORD")
from langchain_deepseek import ChatDeepSeek
llm = ChatDeepSeek(model="deepseek-chat", )
#这是BaseChatMessageHistory的子类
history = RedisChatMessageHistory(
session_id="session_1",
redis_url="redis://192.168.51.130:6380/0",#0指的是哪个数据库(0~15)
# password=os.environ["REDIS_PASSWORD"]
)
#第一轮聊天
history.add_user_message("你是谁?用20字概括自己")
aimessage = llm.invoke(history.messages)
print(aimessage.content)
history.add_message(aimessage)
#第二轮聊天
history.add_user_message("请重复一遍")
aimessage2=llm.invoke(history.messages)
print(aimessage2.content)
history.add_message(aimessage2)
#打印历史聊天记录
print("Chat history:")
for message in history.messages:
print(f"{type(message).__name__}:{message.content}")
一些可可选参数:
运行结果:
用rdm看一下redis里面的内容:
下次启动的时候就可以直接加载里面的内容了:
把第一轮聊天的代码注释掉,看看结果:
redis中:
其他实现
这些都是BaseChatMessageHistory的实现,其他的还有kafka、neo4j、sql、mongodb等
总结
本章节我们主要学习了如何基于内存、redis等实现方式来保存历史聊天信息,下一章节我们介绍如何把历史聊天信息整合到LCEL中。
更多推荐
所有评论(0)