当前位置: 首页 > news >正文

LangChain入门(五)AI记住聊天历史

之前的案例都是一次性的会话,我们有时候需要进行连续沟通,就需要LLM记住之前的聊天内容。

Chat_History 组件提供能力,允许机器人“记住”过去的互动,并在回应后续问题时考虑它们。

需要安装组件

pip install langchain_community

保留聊天记录

#保存聊天的历史记录
store = {}  # key 为sessionId,保存所有用户的了解记录# 根据session_id 获取消息历史记录对象def get_session_history(session_id: str):if session_id not in store:store[session_id] = ChatMessageHistory()return store[session_id]do_message = RunnableWithMessageHistory(chain,get_session_history,input_messages_key='my_msg'  #每次聊天时候发送msg的key
)config ={'configurable':{'session_id':'l1211'}}  #给当前会话定义一个sessionid# 第一轮
resp1 = do_message.invoke({'my_msg':[HumanMessage(content='您好啊!我是悠然')],'language':'中文'},config=config
)print(resp1.content)

提示词模板修改,在提示词模板中添加聊天历史记录

chat_prompt = ChatPromptTemplate.from_messages([("system", "你是一个乐于助人的助手,用{language}尽你所有回答所有问题"),MessagesPlaceholder(variable_name='my_msg')]
)

流式输出,输出是一个token一个token输出的

for resp in do_message.stream({'my_msg':[HumanMessage(content='请给我讲一个笑话')],'language':'English'},config=config2
):print(resp.content,end="-")  #一次响应是一个token

完整代码如下:

from langchain.chat_models import init_chat_model
from langchain_core.output_parsers import StrOutputParser
from langchain.prompts.chat import ChatPromptTemplate,MessagesPlaceholder
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
import os# 这里只是示意,工程中建议使用getpass.getpass()来获取API密钥
api_key = os.environ.get("DEEPSEEK_API_KEY");
api_base = "https://api.deepseek.com/"
#聊天机器人案例
#1.定义模型
model = init_chat_model(model="deepseek-chat",api_key=api_key,api_base=api_base,temperature=0.8,max_tokens=1024,model_provider="deepseek",)
#2.定义提示词模板  
chat_prompt = ChatPromptTemplate.from_messages([("system", "你是一个乐于助人的助手,用{language}尽你所有回答所有问题"),MessagesPlaceholder(variable_name='my_msg')]
)
# 3. 定义解析器
parser =StrOutputParser()
# 4. 定义chain
chain = chat_prompt | model #保存聊天的历史记录
store = {}  # key 为sessionId,保存所有用户的了解记录# 根据session_id 并返回一个消息历史记录对象def get_session_history(session_id: str):if session_id not in store:store[session_id] = ChatMessageHistory()return store[session_id]do_message = RunnableWithMessageHistory(chain,get_session_history,input_messages_key='my_msg'  #每次聊天时候发送msg的key
)config ={'configurable':{'session_id':'l1211'}}  #给当前会话定义一个sessionid# 第一轮
resp1 = do_message.invoke({'my_msg':[HumanMessage(content='您好啊!我是悠然')],'language':'中文'},config=config
)print(resp1.content)#第二轮
resp2 = do_message.invoke({'my_msg':[HumanMessage(content='请问我的名字是什么?')],'language':'中文'},config=config
)
print(resp2.content)config2 ={'configurable':{'session_id':'1213131'}}  #给当前会话定义一个sessionid#第三轮 返回的数据是流式的
for resp in do_message.stream({'my_msg':[HumanMessage(content='请给我讲一个笑话')],'language':'English'},config=config2
):print(resp.content,end="-")  #一次响应是一个token

http://www.xdnf.cn/news/253027.html

相关文章:

  • Android基础控件用法介绍
  • 报文三次握手对么٩(๑^o^๑)۶
  • 开源ERP系统对比:Dolibarr、ERPNext与Odoo
  • 【每日八股】复习 Redis Day5:集群(上)
  • 云原生后端:构建高效、可扩展的现代后端架构
  • HBM的哪些事
  • 【凑修电脑的小记录】vscode打不开
  • React useCallback函数
  • 从爬虫到网络---<基石3> gfw防火墙是怎么保护我们的?
  • Linux系统:进程程序替换以及相关exec接口
  • CMake separate_arguments用法详解
  • Trae 安装第三方插件支持本地部署的大语言模型
  • Matlab自学笔记
  • 姜老师MBTI人格分析课程2:ENFP
  • 标准解读:《制造业质量管理数字化实施指南(试行)》【附全文阅读】
  • 个人健康中枢的多元化AI软件革新与精准健康路径探析
  • #以梦为楫,共航中医传承新程
  • CPU:AMD的线程撕裂者(Threadripper)和霄龙(EPYC)的区别
  • C++八股--three day --设计模式之单例和工厂
  • UE运行游戏时自动播放关卡序列
  • 深度学习笔记40_中文文本分类-Pytorch实现
  • 大数据面试问答-数据湖
  • 阿里云服务器 篇五(加更):短链服务网站:添加反垃圾邮件功能
  • 多模态大语言模型arxiv论文略读(五十五)
  • Python爬虫实战:获取好大夫在线各专业全国医院排行榜数据并分析,为患者就医做参考
  • sys目录介绍
  • C++11新特性_标准库_正则表达式库
  • 数据分析_问题/优化
  • Mysql数据库之基础管理
  • 基于SpringBoot的药房药品销售管理系统