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

ChatMessageHistory组件

BaseChatMessageHistory

把记忆功能集成到LLM应用中,会设计到两个核心问题:存储的历史信息是什么?如何检索与处理历史信息?
在Langchain中,一个记忆类是由历史消息的存储与记忆的处理逻辑两个部分组成。

LangChain封装了一个管理历史信息的基类—BaseChatMessageHistory,这是一个抽象类。用于管理历史消息,涵盖了对消息的多种管理:添加消息、消息历史信息、查看历史消息列表、查看历史消息文本等。

并且所有扩展的消息历史组件均继承BaseChatMessageHistory(包括自定义消息历史组件)。

BaseChatMessageHistory及子类如下,其中InMemoryChatMessageHistory是langchain_core包中内置对话消息历史类,可以将对话消息存储到临时内存中,而其他第三方集成的聊天消息历史组件均通过langchain_community包进行导入。


第三方 ChatMessageHistory 组件集成: https://python.langchain.com/v0.2/docs/integrations/memory/

聊天消息历史组件实现记忆功能

FileChatMessageHistory会将对话历史存储到本地的文件中,可以使用这个记忆组件结合源生的OpenAi SDK来实现命令行界面实现带有记忆功能的对话功能,并且关闭某次对话,下次运行代码,读取到对应的文件时,仍然可以记忆之前的对话的内容

实现代码:

importdotenvfromopenaiimportOpenAIfromlangchain_community.chat_message_historiesimportFileChatMessageHistoryfromlangchain_core.messagesimportHumanMessage,AIMessage HUMAN_MESSAGE=HumanMessage dotenv.load_dotenv()# 1. 创建客户端&记忆client=OpenAI(base_url='https://api.xty.app/v1')chat_history=FileChatMessageHistory('./memory.txt')# 转换历史消息格式defconvert_history():openai_messages=[]formsginchat_history.messages:ifisinstance(msg,HUMAN_MESSAGE):openai_messages.append({"role":"user","content":msg.content})elifisinstance(msg,AIMessage):openai_messages.append({"role":"assistant","content":msg.content})returnopenai_messages# 2. 循环对话whileTrue:# 3.获取用户输入query=input('Human:')# 4.检测用户是否退出对话ifquery=='q':exit(0)# 5.发起聊天对话print("AI:",flush=True,end="")history_messages=convert_history()messages=[{"role":"system","content":"你是OpenAI开发的ChatGPT聊天机器人,可以根据上下文回复用户信息。"},*history_messages,# 展开历史对话{"role":"user","content":query}]response=client.chat.completions.create(model='gpt-3.5-turbo-16k',messages=messages,stream=True,)ai_content=""forchunkinresponse:content=chunk.choices[0].delta.contentifcontentisNone:breakai_content+=contentprint(content,flush=True,end="")chat_history.add_user_message(query)chat_history.add_ai_message(ai_content)print("")
http://www.jsqmd.com/news/827939/

相关文章:

  • 在ARM架构Windows上,用Hyper-V快速部署Ubuntu Server 22.04 LTS
  • 公众号图片排版全攻略:5种花式排列技巧与3款高效编辑器推荐 - 鹅鹅鹅ee
  • 香坊万物物联:正品低价 + 维修售后,哈尔滨对讲机一站式服务商 - 黑龙江单工科技
  • 2026年618终极省钱攻略:几号买最便宜?附红包口令+满减规则+国补领取全指南 - 资讯速览
  • msvcrtd.dll缺失修复指南:从诊断到部署的完整流程
  • 无锡宝珀腕表动力储存为何越来越短?长动力腕表走时骤减?官方全国直营门店拆解病因与专业修复全流程 - 亨得利官方维修中心
  • 缓蚀阻垢剂常见问题解答(2026最新专家版) - 资讯速览
  • 别再自己写数码管驱动了!用CH455G芯片+I2C,5分钟搞定STM32显示模块
  • Chat-Easy框架:统一接口简化大模型集成,提升AI应用开发效率
  • Laravel集成DeepSeek AI:官方SDK配置与实战指南
  • 2026年深圳防水补漏公司权威排行榜:透明化、专业化、长效化升级领衔 - 资讯速览
  • 兼具出色性能与成本优势!松下品牌GM0运动控制器全新上市
  • UltimateStack:彻底解决Minecraft物品堆叠限制的终极指南
  • Cursor Free VIP技术深度解析:机器标识重置与API限制绕过实现原理
  • 微信立减金回收必读:状态、来源、操作一次讲透! - 可可收
  • 2026缓蚀阻垢剂:解读行业三大核心趋势 - 资讯速览
  • 基于容器化与微服务架构的无限路由器:云原生网络控制平台实践
  • 立体主义Prompt工程白皮书:3类经典流派(分析立体/综合立体/俄耳甫斯主义)在Midjourney中的映射公式与11个权威参考图谱
  • KNN算法调参实战:如何为你的数据选择合适的距离度量(从闵可夫斯基距离说起)
  • 2026精工字品类科普:材质工艺、场景适配与源头工厂甄别 - 资讯速览
  • 5步完整方案:Cursor Pro永久免费使用终极指南,轻松破解试用限制
  • CentOS7 环境下 OpenSSH 10.0 RPM 定制与安全升级实战
  • 2026国内主流旋扣鞋带品牌排行:从性能到服务全维度对比 - 资讯速览
  • 从‘能用’到‘优雅’:用接口和抽象类重构你的Unity C#脚本,告别面条代码
  • 北京亨得利官方腕表养护流程深度测评:华贸中心写字楼2座408店亲历,八步成环、透明可查,2026年5月最新版 - 亨得利腕表维修中心
  • AI编码工作流:工程化实践框架与团队效能提升
  • 如何永久免费使用Cursor Pro:完整破解指南与工具详解
  • 洛谷 P3292 [SCOI2016] 幸运数字 题解 - L
  • Snap.Hutao胡桃工具箱:免费开源的原神桌面助手完全指南
  • 心智网络与图神经网络:从Awesome清单到脑科学AI实战