【LangChain V1.0学习】第二课:批处理与持久化对话(通过完成情感机器人多轮对话进行学习)

我们在上一节课学习了LangChain V1.0的模型调用与基础对话,今天这节课我们来学习大模型的批处理对话,我们通过制作简单的带有简易记忆机制的对话机器人,来学习并熟练掌握该用法。

一、前期准备

1、方法介绍

今天我们要用到的是langchain_core.messages模块,它是LangChain V1.0处理对话消息(chat messages) 的核心组件。定义了标准化的消息类型,用于在聊天模型(如 ChatOpenAI、ChatTongyi、ChatOllama 等)之间传递结构化对话历史,主要作用如下:

标准化消息格式:统一表示用户输入、模型响应、工具调用等。
支持复杂交互:工具调用、多轮对话、多角色。
无缝集成 LCEL:作为 Runnable 链的标准数据单元。
兼容外部系统:可与 OpenAI 格式、Gradio、FastAPI 等互转。

我们主要使用以下几种message类别,由于我们还没学习工具调用,本节课主要围绕前三个类别进行讲解。

类型用途字段
HumanMessage用户输入content: str | List[Union[str, dict]],name: Optional[str]
AIMessageAI 助手回复content: str,tool_calls: List[dict],name: Optional[str]
SystemMessage系统指令(角色设定)content: str
ToolMessage工具调用返回结果content: str,tool_call_id: str

2. 消息的创建方式

方式一:直接实例化
fromlangchain_core.messagesimportHumanMessage,AIMessage,SystemMessage messages=[SystemMessage(content="你是一个专业中医顾问。"),HumanMessage(content="我最近失眠多梦,怎么办?"),AIMessage(content="建议您调理心脾,可考虑归脾汤加减...")]
方式二:从字典转换(常用于 API 输入)
fromlangchain_core.messagesimportmessages_from_dict message_dicts=[{"role":"system","content":"你是一个助手"},{"role":"user","content":"你好"},{"role":"assistant","content":"你好!"}]
方式三:使用 convert_to_messages(兼容多种格式,后续在切换模型对话时需要)
fromlangchain_core.messagesimportconvert_to_messages# 支持字符串(自动转 HumanMessage)、字典列表、消息对象等input_data=["我最近心情不太好"]messages=convert_to_messages(input_data)# → [HumanMessage(content="我最近心情不太好")]

二、案例实操(多轮对话情感机器人)

需要导入的包

fromlangchain_ollamaimportChatOllamafromlangchain_core.messagesimportAIMessage,HumanMessage,SystemMessage

设置预设词

systemmsg=SystemMessage("你叫小美,是一个30岁的知性温柔细腻,温文尔雅,气质高文雅的大姐姐,是一个情感大师和心理学硕士毕业生,善于倾听用户的烦心事,给予用户安慰和意见,帮助用户解决问题。注意在与用户交流时要像一个正常朋友间的交流,不要加入过多复杂的多余的语句")

用户界面输入,转换为HumanMessage,输入quit退出聊天

humanmsg=input()ifhumanmsg=="quit":breakmessages.append(HumanMessage(humanmsg))

使用流式输出,并将输出存入AIMessage

full_reply=""forchunkinmodel.stream(messages):ifchunk.content:print(chunk.content,end="",flush=True)full_reply+=chunk.content aimsg=full_reply messages.append(AIMessage(aimsg))

历史对话压缩,如果对话记录超过10条,交给大模型进行总结,作为新的SystemMessage 系统预设词

iflen(messages)>10:messages_tump=messages[:7]messages_tump.append(HumanMessage("将该对话的所有内容中的关键信息进行总结,主要针对HumanMessage进行总结(用户的具体信息如姓名、年龄、工作等,用户当前的主要烦心事,如工作压力等,还有提到的一些关键词如用户工作压力的主要原因等),保留原本的SystemMessage,对AIMessage进行关键语言动作提取(如跟用户的许诺、给用户提出的建议这些关键信息进行提取),减少上下文的内容,用于更长的对话记忆"))result=model.invoke(messages_tump)print(f"##############################总结内容:{result.content}")messages=messages[-5:]messages.append(systemmsg)messages.append(SystemMessage(result.content))

完整代码如下

fromlangchain_ollamaimportChatOllamafromlangchain_core.messagesimportAIMessage,HumanMessage,SystemMessage model=ChatOllama(model="qwen3:latest")quit=Truemessages=[]systemmsg=SystemMessage("你叫小美,是一个30岁的知性温柔细腻,温文尔雅,气质高文雅的大姐姐,是一个情感大师和心理学硕士毕业生,善于倾听用户的烦心事,给予用户安慰和意见,帮助用户解决问题。注意在与用户交流时要像一个正常朋友间的交流,不要加入过多复杂的多余的语句")messages.append(systemmsg)print("你好,我是小美,如果有什么情感问题都可以向我倾诉,我会一直陪在你的身边,输入quit即可结束对话")whilequit:humanmsg=input()ifhumanmsg=="quit":breakmessages.append(HumanMessage(humanmsg))full_reply=""forchunkinmodel.stream(messages):ifchunk.content:print(chunk.content,end="",flush=True)full_reply+=chunk.content aimsg=full_reply messages.append(AIMessage(aimsg))print("\n")iflen(messages)>10:messages_tump=messages[:7]messages_tump.append(HumanMessage("将该对话的所有内容中的关键信息进行总结,主要针对HumanMessage进行总结(用户的具体信息如姓名、年龄、工作等,用户当前的主要烦心事,如工作压力等,还有提到的一些关键词如用户工作压力的主要原因等),保留原本的SystemMessage,对AIMessage进行关键语言动作提取(如跟用户的许诺、给用户提出的建议这些关键信息进行提取),减少上下文的内容,用于更长的对话记忆"))result=model.invoke(messages_tump)print(f"##############################总结内容:{result.content}")messages=messages[-5:]messages.append(systemmsg)messages.append(SystemMessage(result.content))print("再见")

流程图

结语

本节课使用了简单的例子:多轮对话情感机器人,将消息批处理、流式对话、上下文窗口限制和长期记忆维持这三个挑战,通过一个“对话-总结-重置”的循环机制结合了起来,在实例操作中学习,通过这个例子我们可以更好的学习,我们可以更好的了解langchain_core.messages方法、流式输出等,经过这次简单的例子我们也可以了解到基础的大模型记忆存储机制。如果大家对本节课内容有疑问欢迎大家在评论区提问,我们下节课再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1169571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【真香警告】掌握这3层Agent架构,让AI帮你写代码而不是抢饭碗!

前期导览: 大家好,本期我们继续研究Open Deep Research这个项目的源代码。上一期我们学习了动态模型配置的实现,本期我们将重点关注多Agent架构的设计与实现。 在多Agent系统中,如何设计Agent之间的协作机制、如何实现任务的分解…

电脑屏幕显示不全最左边看不到关机键

电脑屏幕显示不全最左边看不到关机键Posted on 2026-01-16 19:07 董锡振 阅读(0) 评论(0) 收藏 举报 换一个频次就好了 本文来自博客园,作者:董锡振,转载请注明原文链接:https://www.cnblogs.com/dongxizhen/…

RAG评估保姆级教程:从“感觉良好“到“数据说话“,小白程序员也能秒懂的RAG评估避坑指南!

大家好,我是AI学习的杨同学。我们是不是都踩过同一个坑:花数周搭建的RAG系统,上线后用户反馈“答非所问”“信息造假”;调整了chunk大小、换了向量模型,却说不清效果提升了多少;生产环境幻觉率忽高忽低&…

实用指南:Java-187 Guava Cache 并发参数与 refreshAfterWrite 实战:LoadingCache 动态加载与自定义 LRU 全解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:5G工业路由器的深层架构:从射频热管理到链路状态机

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

程序员必看!LLM读不懂工业标准?试试这个Ontology-aware KG-RAG框架,表格任务直接起飞!

一、LLM 单啃工业标准会“消化不良”? 船舶、海工、能源等行业的工业标准(ASTM、API、ISO 等)往往长这样: 一份文档 60 页,层层嵌套“1-1.1-1.1.1-Table 3-Note b”;一段句子包含条件-例外-数值-单位四连…

淋雨试验箱优质供应商排行榜:帮你避开选购陷阱,找到真正靠谱的厂家 - 品牌推荐大师1

在“中国制造2025”战略和产业升级的双重推动下,中国环境试验设备行业迎来了黄金发展期。淋雨试验箱作为评估产品外壳防水性能的关键设备,其市场需求随着新能源汽车、5G通信、消费电子等行业的蓬勃发展而持续增长。 …

救命!我的AI只会说“好的“!揭秘大模型“规划模式“,让AI自己干活才是真AI!

让智能体“组织一次10人的团队团建”,它直接回复“好的”,却迟迟不给出具体方案;让它“处理新员工入职流程”,它只想到了创建账号,却遗漏了培训分配、部门对接等关键步骤;让它“生成一份季度业务分析报告”…

从 AIGC 检测逻辑看论文降重工具的实际差异 - 品牌观察员小捷

起因:为什么“降重完成”≠“审核安全” 在最近一年的论文修改实践中,越来越多用户发现:论文重复率已合格 但 AIGC 检测仍提示高风险 这并非偶然,而是因为 AIGC 检测关注的不是“抄没抄”,而是“像不像人写的”。…

【硬核推荐】Lemon AI Agent:不会编程也能开发神器?从需求到交付全自动搞定,小白秒变大神!

Lemon 是一款开源的General AI Agent通用智能体,能够从需求计划到成果交付全流程自动化,它通过独立思考和系统规划,在虚拟环境中灵活调用各类工具,如编写并执行代码、智能浏览网页、操作网页应用、命令执行等。Lemon 擅长将复杂任…

深度测评:主管护师内科护理学考试看什么书能实现事半功倍 - 医考机构品牌测评专家

深度测评:主管护师内科护理学考试看什么书能实现事半功倍随着医疗行业对护理专业要求的持续提升,主管护师内科护理学考试作为护理职称晋升体系中的重要组成部分。内科护理学涵盖呼吸、循环、消化、泌尿、内分泌等多个…

深度测评:主管护师内科护理学考试看什么书能实现事半功倍 - 医考机构品牌测评专家

深度测评:主管护师内科护理学考试看什么书能实现事半功倍随着医疗行业对护理专业要求的持续提升,主管护师内科护理学考试作为护理职称晋升体系中的重要组成部分。内科护理学涵盖呼吸、循环、消化、泌尿、内分泌等多个…

亲测好用!8款AI论文平台测评:本科生毕业论文全攻略

亲测好用!8款AI论文平台测评:本科生毕业论文全攻略 2026年AI论文平台测评:为何值得一看 随着人工智能技术的不断进步,AI论文平台逐渐成为本科生撰写毕业论文的重要辅助工具。然而,面对市场上琳琅满目的选择&#xff0c…

外科护理(370)主管护师备考听什么课?精选课程全测评 - 医考机构品牌测评专家

外科护理(370)主管护师备考听什么课?精选课程全测评随着医疗行业对护理专业化要求的不断提升,外科护理主管护师作为外科护理领域的核心骨干,其职称认证的重要性日益凸显。近年来,外科护理主管护师考试呈现出新的…

探索三菱PLC方案之FX2N源码V9.x高性能版

三菱 plc方案源码STM32工控板fx2n源码 FX2N源码V9.x完善高性能版,程序架构清晰,注释详细,支持大部分指令,当前最新功能如下: 13、FX2N源码持续升级中。 。 。 亲们,敬请关注! 12、新增3条指令&a…

外科护理(370)主管护师备考听什么课?筑基提能的科学进阶指南 - 医考机构品牌测评专家

外科护理(370)主管护师备考听什么课?筑基提能的科学进阶指南在医疗资源持续紧张、医务工作者任务繁重的当下,我国医疗人才队伍建设正面临前所未有的挑战。随着健康中国战略的深入推进,对高素质护理人才的需求日益…

外科护理(370)主管护师备考听什么课?筑基提能的科学进阶指南 - 医考机构品牌测评专家

外科护理(370)主管护师备考听什么课?筑基提能的科学进阶指南在医疗资源持续紧张、医务工作者任务繁重的当下,我国医疗人才队伍建设正面临前所未有的挑战。随着健康中国战略的深入推进,对高素质护理人才的需求日益…

主管护师内科护理学考试看什么书?精华资料分享 - 医考机构品牌测评专家

主管护师内科护理学考试看什么书?精华资料分享各位护理同仁,大家好!我是一名在医院内科工作多年的护师,去年刚刚通过了内科护理学考试。回想起备考的那段日子,最让我头疼的不是知识本身,而是面对市面上琳琅满目的…

主管护师内科护理学考试看什么书?精华资料分享 - 医考机构品牌测评专家

主管护师内科护理学考试看什么书?精华资料分享各位护理同仁,大家好!我是一名在医院内科工作多年的护师,去年刚刚通过了内科护理学考试。回想起备考的那段日子,最让我头疼的不是知识本身,而是面对市面上琳琅满目的…

【AI干货】多路由器+LLM重排序!RAG冠军方案开源,大模型开发者必学技术栈

公司年报智能问答比赛任务简介 比赛的任务是基于公司年度报告构建一个问答系统。简单来说,比赛当天的流程如下: 我们会收到来自随机挑选公司的 100 份年度报告,并需要在 2.5 小时内解析这些报告并构建一个数据库。这些报告是 PDF 格式&…