news 2026/4/8 22:51:44

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/3/25 13:23:53

基于 电鱼智能 RK3568 打造工业协作机械臂的一体化关节控制器

什么是 电鱼智能 RK3568?电鱼智能 RK3568 是一款高性能、低功耗的国产化工业核心平台。它搭载四核 64 位 Cortex-A55 处理器,主频 2.0GHz,内置 1TOPS NPU。对于机器人应用,其杀手锏在于支持 ECC 内存(数据安全&#xf…

作者头像 李华
网站建设 2026/3/23 18:11:52

从青训到成人班:韩宁波的12年羽球人生,如何让吴忠爱上「空中芭蕾」

韩宁波通过科技赋能训练体系、跨界融合教学创新、构建全民赛事生态三大核心策略,让吴忠市从羽毛球荒漠蜕变为“空中芭蕾”之城,其12年实践实现了竞技突破与城市文化塑造的双重价值。以下为具体分析:一、科技赋能:从经验主义到数据…

作者头像 李华
网站建设 2026/4/7 10:36:43

mac系统 npm 报错 Cannot find module @rollup/rollup-darwin-x64 的解决方法

mac系统 npm 报错 Cannot find module @rollup/rollup-darwin-x64 的解决方法 关键词:npm 报错、Rollup 报错、@rollup/rollup-darwin-x64、Vite 启动失败、optionalDependencies 一、问题背景(我是在什么时候遇到的) 最近在本地启动一个 Vite + Vue 项目,执行命令: np…

作者头像 李华
网站建设 2026/3/26 7:04:11

python基于vue的教务选课考试成绩系统的设计与实现django flask pycharm

目录基于Vue与Python的教务选课系统设计与实现技术架构与功能模块系统优化与扩展性应用价值开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于Vue与Python的教务选课系统设计与实现 该系统…

作者头像 李华
网站建设 2026/4/7 12:04:25

基于Python实现的校园二手交易网站购物商城设计与实现

《[含文档PPT源码等]基于Python实现的校园二手交易网站商城设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!软件开发环境及开发工具:开…

作者头像 李华
网站建设 2026/4/2 5:42:12

基于Python的在线任务兼职管理系统的设计与实现

《[含文档PPT源码等]基于Python的在线任务兼职管理系统的设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利! 软件开发环境及开发工具: …

作者头像 李华