news 2026/4/18 14:40:36

【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/4/18 1:49:24

基于SpringBoot的COS展售票系统源码设计与文档

前言基于 SpringBoot 的 COS 展售票系统,聚焦漫展 / COS 展运营 “票务规范化、售票高效化、数据可视化” 的核心需求,针对传统 COS 展售票 “线下登记繁琐、票种管控难、客流数据不透明” 的痛点,构建覆盖购票用户、展会主办方、平台管理员的…

作者头像 李华
网站建设 2026/4/18 1:46:49

Jenkins分布式构建配置

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

作者头像 李华
网站建设 2026/4/18 1:46:07

把智能体当“新员工“带:一文搞懂大模型智能体运作流程

文章通过将智能体比作新员工的形象比喻,揭示了智能体的运作流程:首先通过系统提示词设定角色和基本信息,然后配置工具让智能体使用。智能体会尝试解决问题,但结果可能不完善,需要根据反馈优化。ReAct Agent模型通过规划…

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

大数据领域日志数据的存储优化与性能调优

大数据领域日志数据的存储优化与性能调优关键词:大数据、日志数据、存储优化、性能调优、数据处理摘要:本文围绕大数据领域中日志数据的存储优化与性能调优展开。首先介绍了相关背景知识,包括目的、预期读者等。接着详细解释了日志数据存储和…

作者头像 李华
网站建设 2026/4/18 3:31:26

【毕业设计】机器学习基于cnn卷积网络识别树叶是否存在病变

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

作者头像 李华
网站建设 2026/4/18 3:37:30

交互式世界建模新方案!腾讯混元发布世界模型WorldPlay,兼顾实时生成与长期几何一致性;5万条样本!Med-Banana-50K支持增删病灶双向编辑

世界模型正驱动计算智能领域的重心逐渐从语言任务拓展至视觉与空间推理,通过构建动态三维环境的模拟能力,这些模型使智能体得以感知并与复杂场景交互,从而为具身智能、游戏开发等领域开启了新的研究与应用前景。世界模型的前沿正聚焦于实时交…

作者头像 李华