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

【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.jsqmd.com/news/254280/

相关文章:

  • RAG评估保姆级教程:从“感觉良好“到“数据说话“,小白程序员也能秒懂的RAG评估避坑指南!
  • 实用指南:Java-187 Guava Cache 并发参数与 refreshAfterWrite 实战:LoadingCache 动态加载与自定义 LRU 全解析
  • 程序员必看!LLM读不懂工业标准?试试这个Ontology-aware KG-RAG框架,表格任务直接起飞!
  • 深入解析:5G工业路由器的深层架构:从射频热管理到链路状态机
  • 救命!我的AI只会说“好的“!揭秘大模型“规划模式“,让AI自己干活才是真AI!
  • 淋雨试验箱优质供应商排行榜:帮你避开选购陷阱,找到真正靠谱的厂家 - 品牌推荐大师1
  • 从 AIGC 检测逻辑看论文降重工具的实际差异 - 品牌观察员小捷
  • 【硬核推荐】Lemon AI Agent:不会编程也能开发神器?从需求到交付全自动搞定,小白秒变大神!
  • 深度测评:主管护师内科护理学考试看什么书能实现事半功倍 - 医考机构品牌测评专家
  • 深度测评:主管护师内科护理学考试看什么书能实现事半功倍 - 医考机构品牌测评专家
  • 亲测好用!8款AI论文平台测评:本科生毕业论文全攻略
  • 外科护理(370)主管护师备考听什么课?精选课程全测评 - 医考机构品牌测评专家
  • 探索三菱PLC方案之FX2N源码V9.x高性能版
  • 外科护理(370)主管护师备考听什么课?筑基提能的科学进阶指南 - 医考机构品牌测评专家
  • 外科护理(370)主管护师备考听什么课?筑基提能的科学进阶指南 - 医考机构品牌测评专家
  • 主管护师内科护理学考试看什么书?精华资料分享 - 医考机构品牌测评专家
  • 【AI干货】多路由器+LLM重排序!RAG冠军方案开源,大模型开发者必学技术栈
  • 【AI编程新风口】保姆级LangGraph教程:19期精华总结,小白也能手搓AI Agent,告别被替代焦虑!
  • 2026年GEO项目源码哪家靠谱?源头作者/厂商汇总 - 源码云科技
  • 2026年GEO工具源码源头推荐,高效实用款盘点 - 源码云科技
  • 安势信息受邀参加COSCon‘25 第十届中国开源年会|「4D开源组件评估模型+清源SCA」,精准锁定权威组件,守护软件供应链! - 实践
  • AIGC 论文检测与降重:不同工具在真实场景下的差异 - 品牌观察员小捷
  • 2026PPTC优质厂家推荐榜 聚焦技术实力 - 资讯焦点
  • WSL正常访问Github配置
  • next-forge搜索引擎:Elasticsearch实现 - 实践
  • 热销榜单:2026年度钥匙扣、冰箱贴与金属徽章推荐,揭晓高品质供货商选择 - 睿易优选
  • 2026年工业内窥镜厂家推荐排行榜:管道/井下/旋转/高清/测量/数字内窥镜,专业品牌深度解析与选购指南 - 品牌企业推荐师(官方)
  • HarmonyOS 6 到底比 Android 16 强在哪?真相扎心了
  • AI学习 - 诊断结论信息抽取 - LabelStudio 标注
  • 2026年 工业摄像头厂家推荐排行榜:高清/防爆/井下/旋转/检测等专业摄像头品牌深度解析与选购指南 - 品牌企业推荐师(官方)