【langchain——对话链+记忆模块】通过代码构造可多轮会话,自动调整记忆长度的基于知识库检索的购物推荐智能体搭建

1、前言

  • 解决langchain搭建的智能体多轮会话中的记忆连接不连贯的问题

2、记忆模块的种类(常见3种)

调用的包名:from langchain_classic.memory import xxx

名称优缺点使用函数
ConversationBufferMemory保留完整的对话上下文,实现简单适合短对话,随着对话增长会占用大量tokenConversationBufferMemory()
ConversationBufferWindowMemory只保留最近K次的会话,控制内存使用,会丢失早期的对话历史ConversationBufferWindowMemory(k=2)
ConversationSummaryBufferMemory保留最近详细对话+早期摘要,实现相对复杂ConversationSummaryBufferMemory(llm=llm,max_token_limit=1000)

3、对话链的两种包

from langchain_classic.chains.conversation.baseimportxxx
名称优缺点调用方法
ConversationChain适用于通用对话场景ConversationChain(llm=llm, prompt=PromptTemplate.from_template(“xxxx”),verbose=True, memory=window_memory)
RetrievalQAWithSourcesChain适用于基于知识库问答,调包:from langchain_classic.chains import RetrievalQAWithSourcesChainRetrievalQAWithSourcesChain.from_chain_type(llm=llm,chain_type=“stuff”, retriever=retriever,memory=memory, return_source_documents=True)
补充:

RetrievalQAWithSourcesChain下的chain_type有四种类型,如下表格:

chain_type类型具体作用
stuff将所有文档内容放入上下文
map_reduce先单独处理每个文档,再汇总
refine迭代式优化答案
map_rerank对每个文档打分再选择

为上一节的电商推荐模块转变为对话链的方式

fromlangchain_classic.chainsimportLLMChainfromlangchain_classic.chains.conversation.baseimportConversationChain window_memory=ConversationBufferWindowMemory(k=5)extract_product_name=ConversationChain(llm=llm,prompt=PromptTemplate.from_template("你是一个专业提取用户需求的助手,能够提取用户input中的最新需求并结合历史聊天记录chat_history里面想要的商品名称。例如:我想买花露水 -> 花露水,如果用户指定品牌或者价格,请注明品牌名称(老白健康也是牌子)。例如:(历史说想买牛奶)我想买蒙牛的。-> 牛奶(蒙牛)。直接输出最终商品名称即可,严禁多于废话。input为{input}, 历史为{history}"),verbose=True,memory=window_memory)introduct_products=ConversationChain(llm=llm,prompt=PromptTemplate.from_template("请结合用户需求,和在知识库中检索出来的商品列表,挑选最符合的商品推荐给用户,输出格式为:"\"为您推荐xx个商品,第一款为xxx,该商品xxxx,第二款为xxx,该商品xxxx。卖点根据商品名称自己联网进行补充推荐给用户。注意:当用户说换一批需要避开历史中推荐过的商品,需要推荐满足历史中用户想买的商品且不同品牌的进行推荐,例如:历史用户说牛奶,那必须现在推荐牛奶相关的商品。商品列表为{input}, 历史:{history}"),verbose=True,memory=window_memory)whileTrue:user_input=input("\n💬 请输入你的需求:").strip()print("***********************************************************")print("memory:",window_memory)print("***********************************************************")ifuser_input.lower()in["退出","exit","quit","q","退下吧"]:print("👋 再见!")breakextract_result=extract_product_name.predict(input=user_input)print("extract_result:",extract_result)products_list=Weight_hunhe_search(extract_result,vector_weight=0.7,bm25_weight=0.3,k=10)answer=introduct_products.predict(input=f'{products_list}')#.invoke({"input":f'{user_input}',"product_list":f'{products_list}', "history":f"{window_memory}"})['text']print("answer:",answer)

结果展示

第一次推荐的三种米”换一批“以后推荐另外三种大米

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

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

相关文章

【路径规划】基于matlab智能仓库AGV路径规划研究与仿真【含Matlab源码 14861期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

【毕业设计】机器学习基于深度学习算法训练数字识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【路径规划】智能仓库AGV路径规划研究与仿真【含Matlab源码 14861期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

【毕业设计】python基于pytorch训练蔬菜识别基于人工智能训练蔬菜识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【三维路径规划】多种算法多无人机三维路径规划【含Matlab源码 14863期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

【课程设计/毕业设计】基于人工智能训练蔬菜识别基于pytorch训练蔬菜识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

基于springboot德育家校共建平台系统源码设计与文档

前言基于 SpringBoot 的德育家校共建平台系统,聚焦校园德育 “家校协同、过程可溯、评价量化” 的核心需求,针对传统德育工作 “家校沟通少、评价主观化、育人闭环缺失” 的痛点,构建覆盖学生、家长、班主任、德育处管理员的全流程德育管理生…

深度学习毕设选题推荐:基于深度学习训练蔬菜识别基于pytorch训练蔬菜识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

vscode报错:Unable to initialize Git; AggregateError(2) Error: Unable to find git Error

这是git的路径定义问题,直接查看这篇文章即可。 VSCode配置Git,查看代码提交历史_unable to initialize git; aggregateerror(2) error:-CSDN博客 下载git的步骤:(ai生成) 步骤 1:运行安装程序 双击下载…

当AI客服开始“察言观色”:以云蝠智能为例,大模型如何定义呼叫

当客服机器人开始“察言观色”,一通外呼电话能感知用户情绪并提供安慰,AI正在重塑企业与客户的每一次连接。“我是刚刚给您打过电话的XXX。”——这不是人类客服的标准话术,而是AI机器人在模拟真人沟通时,为避免用户反感而设计的过…

阿里巴巴推出Ovis-Image:7B参数就能完美渲染文字的图像生成模型

在人工智能图像生成的战场上,一个令人头疼的问题始终困扰着研究者们:如何让计算机在生成的图片中写出清晰、准确的文字?就像一个刚学会画画的孩子,AI模型虽然能画出美丽的风景和栩栩如生的人物,但一旦需要在图片中加入…

DeepReinforce突破:AI生成超越英伟达官方性能的CUDA核心代码

这项由DeepReinforce团队完成的突破性研究发表于2025年12月,研究编号为arXiv:2512.02551v1。论文的主要作者包括苏松桥、孙晓飞、李小雅、王阿尔伯特、李机伟和沈克里斯等研究人员。这项研究首次证明了人工智能可以在矩阵计算这一GPU最核心的操作上超越英伟达官方优…

【心电信号ECG】基于深度学习方法心电图信号检测和分类人类情绪附Matlab代码和报告

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &#x1…

基于SpringBoot的农产品溯源系统(毕业设计项目源码+文档)

课题摘要基于 SpringBoot 的农产品溯源系统,聚焦农产品流通 “全程可溯、品质可控、信任可建” 的核心需求,针对传统农产品溯源 “信息不透明、数据难核验、消费者信任度低” 的痛点,构建覆盖农户 / 合作社、加工企业、经销商、消费者、监管部…

深度学习毕设项目推荐-基于python深度学习算法训练数字识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【路径规划】基于改进的蚁群算法无人机栅格地图最短路径规划附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &#x1…

Jenkins分布式构建配置

master/agent架构,一主多从,master节点负责webUI和用户定义流水线任务然后把任务分发给agent节点,agent节点进行负责执行构建任务的,可以通过节点标签来指定将哪些构建任务在指定的标签agent节点进行构建Master和Agent连接方式有两…

声明式pipline流水线

Jekins1.x版本仅支持UI界面手动配置流水线(Freestyle job),而2.x版本则实现了流水线即代码的机制,支持通过代码来描述部署整条流水线,在2.x版本中用于保存pipline代码并可以被Jenkins加载的文件称为JenkinsfileJenkins支持两种pipline语法&am…

大数据OLAP vs OLTP:核心区别与选型指南

大数据OLAP vs OLTP:核心区别与选型指南 关键词:大数据、OLAP、OLTP、数据分析、事务处理、选型指南 摘要:本文深入探讨大数据环境下联机分析处理(OLAP)与联机事务处理(OLTP)的核心区别&#xf…

混沌之舞:双摆系统仿真与AI交互式应用开发全解

一个小小初始角度差异,如何引发完全无法预测的运动轨迹?MATLAB与AI结合,让混沌之美触手可及。 当您第一次看到双摆运动时,可能会被它那优雅而不可预测的“舞蹈”所吸引。这个看似简单的机械系统,却展示了自然界最迷人的现象之一——混沌。 今天,我们将一同探索如何用MAT…