news 2026/6/10 18:35:35

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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)

结果展示

第一次推荐的三种米”换一批“以后推荐另外三种大米
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:59:25

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

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

作者头像 李华
网站建设 2026/6/9 17:17:49

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

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

作者头像 李华
网站建设 2026/6/10 14:00:50

基于SpringBoot的美食信息推荐网站系统(毕业设计项目源码+文档)

课题摘要基于 SpringBoot 的美食信息推荐网站,聚焦美食消费 “个性化推荐、信息精准触达、场景化选品” 的核心需求,针对传统美食网站 “内容同质化、口味匹配度低、场景适配性差” 的痛点,构建覆盖消费者、餐饮商家、平台运营者的全流程智能…

作者头像 李华
网站建设 2026/6/10 13:56:39

南洋理工大学团队重新定义AI看世界:让机器像人类一样观察和思考

这项由南洋理工大学、南京理工大学、阿德莱德大学、百度、CSIRO以及商汤科技等多家知名机构合作的研究发表于2024年12月,研究团队包括唐伟、孙彦鹏、张珊、李晓凡等众多学者。有兴趣深入了解的读者可以通过论文编号arXiv:2512.01988v1查询完整论文。这项名为"A…

作者头像 李华
网站建设 2026/6/10 14:01:53

自考必看!8个高效降AIGC工具推荐

自考必看!8个高效降AIGC工具推荐 AI降重工具:自考论文的“隐形护盾” 在自考论文写作过程中,越来越多的学生开始关注“AIGC率”和“查重率”的问题。随着人工智能技术的广泛应用,许多学生在使用AI生成内容时,发现论文中…

作者头像 李华
网站建设 2026/6/10 14:01:52

力扣数据库——员工奖金

员工奖金https://leetcode.cn/problems/employee-bonus/ 一 题目 表:Employee Column NameTypeempIdintnamevarcharsupervisorintsalaryint empId 是该表中具有唯一值的列。该表的每一行都表示员工的 id 和姓名,以及他们经理的 id 和他们的工资。表…

作者头像 李华