news 2026/8/31 8:41:14

langchain 使用 MessagesPlaceholder 实现会话上下文

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
langchain 使用 MessagesPlaceholder 实现会话上下文

第一步:创建带历史消息占位符的提示词模板

fromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholder prompt=ChatPromptTemplate.from_messages([SystemMessage(content="你是3DM的一个技术专家,擅长解决各种Web开发中的技术问题"),MessagesPlaceholder(variable_name="chat_history"),("human","{input}"),# 使用元组格式,这是更简洁的方式])

第二步:创建大模型实例

fromlangchain_openaiimportChatOpenAI llm_qianwen_max=ChatOpenAI(model="qwen-max-latest",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",api_key=os.getenv("DASHSCOPE_API_KEY"),streaming=True,)

第三步:创建消息存储对象,使用dict结构,保存sessionId:ChatMessageHistory

fromlangchain_community.chat_message_historiesimportChatMessageHistory store={}defget_session_history(session_id:str)->ChatMessageHistory:ifsession_idnotinstore:store[session_id]=ChatMessageHistory()print(store)returnstore[session_id]

完整代码

""" 使用MessagesPlaceholder让大模型可以收到历史消息 """importosimportuuidfromdotenvimportload_dotenvfromlangchain_core.messagesimportHumanMessage,SystemMessagefromlangchain_core.output_parsersimportStrOutputParser load_dotenv()""" 第一步:创建带历史消息占位符的提示词模板 """fromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholder prompt=ChatPromptTemplate.from_messages([SystemMessage(content="你是3DM的一个技术专家,擅长解决各种Web开发中的技术问题"),MessagesPlaceholder(variable_name="chat_history"),("human","{input}"),# 使用元组格式,这是更简洁的方式])""" 第二步:创建大模型实例 """fromlangchain_openaiimportChatOpenAI llm_qianwen_max=ChatOpenAI(model="qwen-max-latest",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",api_key=os.getenv("DASHSCOPE_API_KEY"),streaming=True,)""" 第三步:创建消息存储对象,使用dict结构,保存sessionId:ChatMessageHistory """fromlangchain_community.chat_message_historiesimportChatMessageHistory store={}defget_session_history(session_id:str)->ChatMessageHistory:ifsession_idnotinstore:store[session_id]=ChatMessageHistory()print(store)returnstore[session_id]""" 第四步:通过RunnableWithMessageHistory来运行大模型 第四步的写法是为了创建一个带记忆功能的AI助手,通过封装复杂的会话管理逻辑,让你只需关注核心的业务逻辑。这种设计模式在构建对话系统时非常常见和实用。 """fromlangchain_core.runnablesimportRunnableWithMessageHistory chain=prompt|llm_qianwen_max|StrOutputParser()chain_with_history=RunnableWithMessageHistory(runnable=chain,get_session_history=get_session_history,input_messages_key="input",history_messages_key="chat_history",)""" 第五步:构建连续对话 """defrun_conversation():session_id=uuid.uuid4()print(f"当前会话id{session_id}")whileTrue:user_input=input("用户:")ifuser_input.lower()=="exit":breakresponse=chain_with_history.invoke({"input":user_input},config={"configurable":{"session_id":session_id}},)print("助手:")forchunkinresponse:print(chunk,end="")print("\n")if__name__=='__main__':run_conversation()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/13 7:22:49

电鱼智能 RK3576 实现商用清洁机器人的视觉避障与路径规划

什么是 电鱼智能 RK3576?电鱼智能 RK3576 是一款专为 AIoT 场景设计的中高端 SoC。它搭载 4 核 Cortex-A72 4 核 Cortex-A53 处理器,最大的亮点在于集成了 6TOPS 的独立 NPU(算力甚至接近旗舰级 RK3588 的单核 NPU 性能)。配合支…

作者头像 李华
网站建设 2026/8/25 13:38:06

销售要少夸赞自己实力强,多问问客户害怕什么

制造业的销售常常会犯一个致命的错误:一和客户见面就急着向对方证明“我们技术领先同行”“设备精度非常高”“服务响应速度快”……但客户内心里想的却是:“你说得再好,万一出现问题,这个责任还是得我来承担,”在责任…

作者头像 李华
网站建设 2026/8/29 2:34:47

2026必备!专科生毕业论文必备!TOP9 AI论文写作软件深度测评

2026必备!专科生毕业论文必备!TOP9 AI论文写作软件深度测评 2026年专科生论文写作工具测评:为何需要这份榜单? 随着人工智能技术的不断进步,AI论文写作工具已经成为许多专科生完成毕业论文的重要辅助工具。然而&#x…

作者头像 李华
网站建设 2026/8/29 2:35:24

Burp Suite超详细安装保姆级教程,以及基本介绍和使用!

一、简介 Burpsuite 是用于攻击 web 应用程序的集成平台。它包含了许多 Burp 工具,这些不同的 Burp 工具通过协同工作,有效的分享信息,支持以某种工具中的信息为基础供另一种工具使用的方式发起攻击。这些工具设计了许多接口,以促…

作者头像 李华
网站建设 2026/8/29 2:34:47

零基础想转行做数据安全工程师,需要掌握的哪些核心技术?

转行做数据安全工程师:需要掌握的核心技术 一、引言 数据安全是网络安全领域的 “刚需赛道”—— 随着《数据安全法》《个人信息保护法》的强制实施,企业对 “数据安全工程师” 的需求年均增长 30%,薪资比普通安全岗位高 20%-35%&#xff08…

作者头像 李华