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

【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.jsqmd.com/news/206663/

相关文章:

  • 【毕业设计】机器学习基于深度学习算法训练数字识别
  • 【路径规划】智能仓库AGV路径规划研究与仿真【含Matlab源码 14861期】
  • 【毕业设计】python基于pytorch训练蔬菜识别基于人工智能训练蔬菜识别
  • 【三维路径规划】多种算法多无人机三维路径规划【含Matlab源码 14863期】
  • 【课程设计/毕业设计】基于人工智能训练蔬菜识别基于pytorch训练蔬菜识别
  • 基于springboot德育家校共建平台系统源码设计与文档
  • vscode报错:Unable to initialize Git; AggregateError(2) Error: Unable to find git Error
  • 当AI客服开始“察言观色”:以云蝠智能为例,大模型如何定义呼叫
  • 大数据OLAP vs OLTP:核心区别与选型指南
  • 阿里巴巴推出Ovis-Image:7B参数就能完美渲染文字的图像生成模型
  • DeepReinforce突破:AI生成超越英伟达官方性能的CUDA核心代码
  • 【心电信号ECG】基于深度学习方法心电图信号检测和分类人类情绪附Matlab代码和报告
  • 基于SpringBoot的农产品溯源系统(毕业设计项目源码+文档)
  • 【路径规划】基于改进的蚁群算法无人机栅格地图最短路径规划附Matlab代码
  • 深度学习毕设项目推荐-基于python深度学习算法训练数字识别
  • Jenkins分布式构建配置
  • 声明式pipline流水线
  • 基于SpringBoot的美食推荐系统(毕业设计项目源码+文档)
  • 混沌之舞:双摆系统仿真与AI交互式应用开发全解
  • 基于SpringBoot的美食信息推荐网站系统(毕业设计项目源码+文档)
  • 页缓存技术(PageCache/sendfile/mmap)
  • 浙江大学团队全球首创AI创新能力测试:让机器人也能当“发明家“
  • 基于SpringBoot的面试刷题平台系统的设计与实现(毕业设计项目源码+文档)
  • 字节跳动团队揭示如何让万能AI变得更高效
  • 密歇根大学让AI视觉推理更靠谱:从“瞎猜“到“真看懂“的技术革命
  • 南洋理工大学团队重新定义AI看世界:让机器像人类一样观察和思考
  • 韩国大学团队揭秘:ChatGPT等AI模型是如何“类比思考“的?
  • 工程项目管理工作台怎么搭建?掌握这四点就够了
  • 内部收益率IRR是什么?3分钟掌握
  • 大语言模型在金融市场异常检测中的推理应用