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

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()
http://www.jsqmd.com/news/244227/

相关文章:

  • langchain 创建智能体,并使用saver保存会话消息
  • python基于vue的江西特色乡村综合风貌展示平台django flask pycharm
  • langchian 使用外部MCP工具创建自己的MCP服务
  • 【开题答辩全过程】以 基于Java的大学生兼职信息系统的设计与实现为例,包含答辩的问题和答案
  • 2026年强推新兴GEO服务商-微盟星启:抢占AI搜索心智打造品牌增长
  • Spring 中 Servlet 容器和 Python FastAPI 对比
  • 虎贲等考 AI:重构学术创作新范式,一站式智能论文写作解决方案
  • 揭秘Emmi AI每月人均千欧的远程团队协作模式
  • 拒稿率暴跌 90%!虎贲等考 AI 期刊论文功能:从初稿到录用的 “学术加速器”
  • langchain 常见提示词模板使用案例
  • 告别熬夜做 PPT!虎贲等考 AI PPT:学术汇报的 “一键焕新” 神器
  • langchain的工具调用
  • 销售要少夸赞自己实力强,多问问客户害怕什么
  • GetX 从 0 开始:理解 Flutter 的“对象级响应式系统”
  • 极致感知与定位:基于电鱼智能 RK3588 的 AMR 机器人高精度 vSLAM 导航方案
  • Java酒店管理系统(简易版)_java简易酒店管理系统
  • 电鱼智能 RK3576 实现商用清洁机器人的视觉避障与路径规划
  • 揭秘!这位吴忠羽球教练凭什么带出锦标赛亚军?答案藏在3大教学绝招里
  • 基于DCT变换图像去噪算法的终极优化(1920*1080灰度图单核约22ms)
  • 韩宁波的羽球哲学:用竞技场的热血浇灌,让每个学员都成为自己的冠军
  • 2026 毕业季硬核攻略:8 款 AI 毕业论文工具实测,paperzz 领衔解锁学术创作新姿势
  • python基于vue的流浪动物救助志愿者管理系统django flask pycharm
  • 基于 电鱼智能 RK3568 打造工业协作机械臂的一体化关节控制器
  • 吴忠羽球新势力!国家二级运动员韩宁波:用竞技基因解码进阶训练密码
  • python基于vue的咖啡点单程序设计django flask pycharm
  • 全网最全9个AI论文软件,专科生搞定毕业论文必备!
  • 电鱼智能 RK3399 赋能配送机器人的多屏交互与人脸识别支付
  • 冠军教练的「双面人生」:韩宁波以赛场荣誉为基石,筑就吴忠羽毛球学习新范式
  • [特殊字符]收藏!留学生大模型薪资曝光:55k起、140w总包,2026归国潮AI岗位全攻略
  • 宁夏羽球教育新标杆:韩宁波的「三维教学法」如何让学员技术体能双飞跃