news 2026/3/28 0:27:06

【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/3/27 20:28:31

基于SpringBoot的爱心捐助平台系统源码设计与文档

前言基于 SpringBoot 的爱心捐助平台系统,聚焦公益捐助 “流程透明化、捐赠可追溯、需求精准匹配” 的核心需求,针对传统爱心捐助 “信息不对称、资金去向不明、捐助效果难量化” 的痛点,构建覆盖捐赠人、受助方(个人 / 公益组织&…

作者头像 李华
网站建设 2026/3/20 14:29:56

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

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

作者头像 李华
网站建设 2026/3/27 6:26:37

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

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

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

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

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

作者头像 李华
网站建设 2026/3/27 16:23:01

页缓存技术(PageCache/sendfile/mmap)

核心概念解析 1. PageCache(页缓存) 是什么? Linux 内核将磁盘文件数据缓存在物理内存中的一块区域,称为 PageCache。作用: 读操作:若数据在 PageCache 中,直接返回,避免磁盘 I/O&am…

作者头像 李华
网站建设 2026/3/27 16:58:52

Azure Dataverse 权限设计学习

1. 创建表 https://make.powerapps.com/ 2. 管理员配置权限端 https://admin.powerplatform.microsoft.com/ 3 Dataverse 权限设计 业务部门 -> 相当于组织架构 团队 -> 组织架构的分组权限,可以把业务部门下的人员放在多个团队 用户 -> 职员 角色 -…

作者头像 李华