如何为Langchain Agent添加记忆功能?

【2024最全最细LangChain教程-12】Agent智能体(一) 有很多教程把Agent称为“代理”,我觉得这个翻译太没意思了,一来和Proxy很容易混淆,二来一点都不酷。之所以把Agent翻译成智能体,是因为Agent可以(在LLM推理分析的帮助下)可以自己识别、选择和使用工具,这个就是智能体的表现。人之所以能走上进化的道路,一来是发明了语言,二来是学会了使用工具。就这两点来看,把目前的Agent称为智能体一点也不为过。 阅读详情

0 前言

在开发复杂的AI应用时,赋予Agent记忆能力是一个关键步骤。这不仅能提高Agent的性能,还能使其在多轮对话中保持上下文连贯性。本文将详细介绍如何在Langchain框架中为Agent添加记忆功能,并深入解析每个步骤的原理和最佳实践。

Agent记忆功能的核心组件

在Langchain中,构建具有记忆功能的Agent主要涉及三个核心组件:

  1. 工具(Tools): Agent用来执行特定任务的功能模块。
  2. 记忆(Memory): 存储和检索对话历史的组件。
  3. 大语言模型(LLM): 负责理解输入、决策和生成响应的核心智能体。

这三个组件的协同工作使Agent能够在多轮对话中保持连贯性并做出明智的决策。

1 构建Agent可用工具

首先,我们需要定义Agent可以使用的工具。

# 构建一个搜索工具,Langchain提供的一个封装,用于进行网络搜索。
search = SerpAPIWrapper()
# 创建一个数学计算工具,特殊的链,它使用LLM来解析和解决数学问题。
llm_math_chain = LLMMathChain(
    llm=llm,    
    verbose=True
)
tools = [
    Tool(    
        name = "Search",        
        func=search.run,        
        description="useful for when you need to answer questions about current events or the current state of the world"    
    ),    
    Tool(        
        name="Calculator",        
        func=llm_math_chain.run,        
        description="useful for when you need to answer questions about math"    
    ),
]
print(tools)

在这里插入图片描述

2 增加memory组件

接下来,我们需要为Agent添加记忆功能。Langchain提供了多种记忆组件,这里我们使用ConversationBufferMemory:

在这里插入图片描述

3 定义agent

现在我们有了工具和记忆组件,可以初始化我们的Agent了:

在这里插入图片描述

这里的关键点是:

  • AgentType.OPENAI_FUNCTIONS: 这种Agent类型特别适合使用OpenAI的function calling特性。
  • verbose=True: 启用详细输出,有助于调试。
  • handle_parsing_errors=True: 自动处理解析错误,提高Agent的稳定性。
  • memory=memory: 将我们之前定义的记忆组件传递给Agent。

4 查看默认的agents prompt啥样

了解Agent使用的默认提示词模板非常重要,这有助于我们理解Agent的行为并进行必要的调整:
在这里插入图片描述

这将输出Agent使用的默认提示词模板。通常包括系统消息、人类消息提示词模板和AI消息模板。

在这里插入图片描述

5 优化Agent配置

为了更好地利用记忆功能,我们需要修改Agent的配置,确保它在每次交互中都能访问对话历史。

需要使用agent_kwargs传递参数,将chat_history传入

agent_chain = initialize_agent(
    tools,     
    llm,     
    agent=AgentType.OPENAI_FUNCTIONS,     
    verbose=True,     
    handle_parsing_errors=True,#处理解析错误    
    agent_kwargs={     
        "extra_prompt_messages":[MessagesPlaceholder(variable_name="chat_history"),MessagesPlaceholder(variable_name="agent_scratchpad")],    
    },    
    memory=memory #记忆组件    
    )

这里的关键改变是:

  • agent_kwargs: 通过这个参数,我们可以自定义Agent的行为

  • extra_prompt_messages:我们添加了两个MessagesPlaceholder:

    • chat_history: 用于插入对话历史。
    • agent_scratchpad: 用于Agent的中间思考过程。

这样配置确保了Agent在每次决策时都能考虑到之前的对话内容。

6 验证优化后的提示词模板

最后,让我们检查一下优化后的提示词模板:

在这里插入图片描述

在这里插入图片描述

能看到新添加的chat_history和agent_scratchpad占位符。

在这里插入图片描述

在这里插入图片描述

7 总结

通过以上步骤,我们成功地为Langchain Agent添加了记忆功能。这使得Agent能够在多轮对话中保持上下文连贯性,大大提高了其在复杂任务中的表现。

添加记忆功能只是构建高效Agent的第一步。在实际应用中,你可能需要根据具体需求调整记忆组件的类型和参数,或者实现更复杂的记忆管理策略。

始终要注意平衡记忆的深度和Agent的响应速度。过多的历史信息可能会导致决策缓慢或偏离主题。因此,在生产环境中,你可能需要实现某种形式的记忆修剪或总结机制。

完整专栏内容,尽在编程严选网免费阅读学习:

在这里插入图片描述

​

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

工具包组件和内置Agent组件 这个设计问题的角度主要是从记忆能力和对话能力出发,通过设计这样的对话流程,可以测试大语言模型在一次会话中是否能记住之前的信息,并在后续的对话中正确使用这些信息。这在实标应用中极为重要,比如在聊天机器人的场景中,希望机器人能记住用户的名字和之前的对话内容,以便在后续的对话中为用户提供更个性化的服务。在LangChain的Agent框架中,记忆是由ConversationBufferMemory对象管理的,根据实际的业务需求,你可以使用其他类型的记忆组件。这是一个简单的问候,类似于人类的对话开场白。 阅读详情

相关推荐

如何使用LangChain构建一个Agent并集成多个工具:从入门到高级应用的完整指南

LangChain是一款专门为构建智能代理、链式调用和多模态任务处理而设计的开发工具。它允许开发者轻松创建复杂的交互式应用,并支持多种工具的集成。是LangChain中的一个核心组件,用于将语言模型与各种工具结合,形成一个可调用的执行系统。它允许开发者构建一个具有实际操作能力的代理,这个代理可以根据用户输入自动判断并执行适当的工具调用。将多个工具整合进系统让语言模型通过推理能力自动选择工具并进行调用支持持续对话,能够记住用户的历史输入并根据上下文回答问题。

m0_57781768的博客 499

langchain中实现多Agent的利器-基于图论的️ LangGraph

LangChain中的智能体从数据结构的角度来讲等同于一个有向无环图,也就是说,chain在推理过程中无法被循环调用.而尽管AgentExecutor(代理执行器)支持'循环'.但是缺乏精确控制能力,时常发生失控陷入死循环的情况.

瓦罗兰特顶级C位的博客 1716

嵌入式存储进阶:除了KV存储,EasyFlash的IAP和LOG功能怎么玩?

本文深入探讨了嵌入式存储方案EasyFlash的高级功能,包括在线固件升级(IAP)和闪存日志存储(LOG)。通过详细解析IAP的双区备份设计和LOG的环形缓冲区架构,提供硬件适配、安全升级流程和日志管理技巧等实战指南,帮助开发者在物联网设备中实现可靠的数据存储和固件更新。

weixin_29280219的博客 414

【Langchain多Agent实践】一个有推销功能的旅游聊天机器人

体验地址:之前,我们介绍如何打算一款简单的旅游聊天机器人,而且之前我们介绍了SalesGPT,我们看能不能把这两个东西结合起来,让我们的旅游聊天机器人具有推销产品的功能。我们先来看看效果:首先,你可以和机器人闲聊关于旅游的事儿(如果你问的问题和旅游无关的话,会提示你只回答旅游问题);其次,当你连续询问有关同一个地点时(比如北京),机器人会检查自己的本地知识库,看看产品库里有没有相关的旅游产品,如果有的话就推荐给客户,如果没有就输出一个空的字符串,用户是没有感知的,我们来看一下是如何实现的。

u013607702的博客 3810

基于carsim与Simulink联合仿真的车辆换道轨迹规划与轨迹跟踪模型

PID_反步控制_滑膜控制三种四旋翼无人机轨迹跟踪控制算法仿真 附带对应的说明文档,提供建模过程与仿真结果文献(英文)➕PPT 描述:采用的同一种参考轨迹,都是三维仿真 三种控制方法: [1]PID控制、[2]反步控制、[3]滑膜控制(三个仿真模型) 每个仿真均应用了同一种轨迹路径,直接运行即可出三维图,可以实现四旋翼无人机轨迹的跟踪

2501_90804007的博客 1084

基于51单片机的多功能智能路灯控制系统(仿真+代码+原理图)

智能路灯控制系统主要由51单片机最小系统+1602显示模块+DS1302时钟模块+光强检测模块+按键输入模块+声光报警模块+LED照明模块+状态检测电路+人体车辆红外检测模块组成。能实现以下功能: 1.能够按键设定系统时间、工作时间、光照阈值 2.工作时间内路灯点亮,凌晨12点后路灯关闭,有人或车通过是,路灯点亮10s 3.非工作时间光照强度低于阈值,路灯点亮 4.能够检测系统工作状态,路灯应亮未亮,声光报警 5.具备手动控制,能够切换自动/手动控制功能

u012759563的博客 8178

langchain-Agent代理详解

Langchain Agent详解

weixin_45626120的博客 1万+

光伏5G多合一融合终端|光伏多合一融合终端|光伏多合一群调群控网关|分布式光伏群控群调|光伏AGC/AVC系统这几者之间什么技术关系,多少钱一套预算?

RCL-0923光伏电站电压\功率自动控制装置(光伏AVC/AGC),能够接收调度DMS下发的调节目标(电压或无功),按既定策略的调节目标计算光伏电站无功功率出力需求,支持总有、无功,最大可调范围、逆变器个数等数据的上送,通过选择控制设备并进行无功功率出力分配,并将最终控制指令自动下达给被控制设备,最终实现光伏电站无功功率控制,实现无功功率、并网点电压的监测和控制,跟踪调度中心下发的电压或无功调节目标值,实现分布式电源的可观可测,可调可控。光伏5G多合一融合终端的功能:群调群控/AGC/AVC功能。

分布式DTU物联网DTU 2607

大模型从入门到应用——LangChain:快速入门-[链(Chains)、代理(Agent:)和记忆(Memory)]

在本系列文章中我们会用最简练的语言与范例带领大家快速调试并上手LangChain,读者读完本系列的文章后,就会对LangChain有一个大致的了解并可以将LangChain运用到自己开发的程序中。但如果读者想对LangChain的各个模块进行更深入的了解,可以继续学习《》系列文章。本文主要是阐述了LangChain的。

冯·诺依曼 1万+

利用kettle进行数据库数据比对

Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取高效稳定。本人用的版本是6.1。 之前用kettle这个开源的ETL工具是用来做数据抽取的,这次测试有个需求,是做数据库数据的比对。验证源表到目标表的逻辑正确,从而利用源表自己写SQL逻辑,生成的结果和目标表去比对。这次想到了利用kettle的数据比较功能,来做这些数据校验。 ...

多米诺DU的专栏 1万+

深入浅出DNS系列(一)- DNS杂谈

黄丝玛:班达山,你好,我记性不好,你告诉我搜狐、新浪的网站IP地址好吗? 班达山:你问问DNS先生吧,他专门干这买卖的

jiangsd198的博客 4129

LangChain教程(五):Agent代理执行器核心机制+核心机制agent_scratchpad 的作用(一图看懂)

本文揭示了Agent代理执行器的核心工作机制。代理系统通过四个关键步骤实现工具调用:1)工具注册时建立名称与函数的映射;2)将工具描述注入模型提示;3)模型分析需求并生成工具调用指令;4)执行器根据指令路由到具体工具。核心机制在于agent_scratchpad的作用,它作为对话历史记录工具调用状态,包含工具执行结果,使模型能基于已有操作继续处理而避免循环调用。这种设计通过维护工具调用上下文,实现了从决策到执行再到结果反馈的完整闭环。

新人制作,若有问题,请私聊我,或评论区 1498

ESP32-C3模组上跑通HTTPS分次传输文件(1)

ESP32-C3模组上跑通HTTPS分次传输文件(1)

phmatthaus的专栏 760

LLM大模型企业应用实战-----为Langchain Agent添加记忆功能

本文将详细介绍如何在Langchain框架中为Agent添加记忆功能,并深入解析每个步骤的原理和最佳实践。

2301_81888214的博客 1190

Chamfer Loss

ChamferLoss是一种常用于3D点云(pointcloud)处理的损失函数,特别是在点云生成和对齐任务中。它的目的是度量两个点集之间的相似度,特别是在点云重建、配准或生成等任务中,常用于优化模型使得生成的点云更接近真实的点云。

夜空中明亮的星的专栏 455

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LangChain 如何为 Agent 添加记忆

LangChain 如何为 Agent 添加记忆

engchina的专栏 2391

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LangChain进阶:RAG Agent记忆功能实现与优化!

本文介绍了如何为LangChain的RAG Agent添加记忆功能,实现短期记忆以记住用户交互历史。文章详细讲解了通过消息列表实现记忆的方法,并针对对话历史过长导致上下文窗口限制的问题,提出了三种解决方案:Trim Messages、Delete messages和Summarize messages。此外,还介绍了如何自定义AgentState来扩展记忆功能。教程提供了完整的源码,适合希望提升RAG Agent交互能力的开发者学习。

2401_85375151的博客 1092

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LangChain之Agent代理

首先需要创建想要使用的工具。Tavily (用于在线搜索)创建的本地索引的检索器。

2401_85378759的博客 1179

LangChain之Agent代理(上)

在LangChain中,Agent代理就是使用语言模型作为推理引擎,让模型自主判断、调用工具和决定下一步行动。

积跬步,至千里。 2218

langchain 添加memory构建聊天机器人

LangChain 聊天机器人构建 SOP:附带memory、agent。

qq_44742936的博客 1857

使用 LangChain 构建具有搜索和记忆功能的智能对话助手

本文介绍了如何为LangChain Agent构建和整合外部工具集,主要包括: 定义Tavily搜索工具,实现实时网络搜索功能 构建本地知识检索器,通过五个步骤: 加载维基百科数据 分割文档 创建词向量 构建FAISS向量数据库 创建检索器对象 将工具整合到Agent中: 包装检索器为标准工具 构建工具列表 创建Agent执行器: 绑定工具与语言模型 使用预置提示模板 构建可执行的Agent环境 这些步骤扩展了Agent的能力,使其能够同时访问网络实时信息和本地知识库。

一无所知的世界,走下去才有惊喜。让我们永远相信美好的事情即将发生,成为比昨天更优秀的自己。 1046

LangChain简明教程(5)

AgentExecutor 处理各种复杂性,例如:当 agent 选择了一个不存在的工具时,AgentExecutor 负责处理此时出现的情况,另外还处理工具错误、管理 agent 生成的输出,以及在所有级别提供日志记录和可观测性内容等。虽然已经创建了 agent,但现在要为它编写一个运行机制(runtime,也常称为“运行时”),最简单就是不断地调用 agent,执行操作,并重复此过程直到 agent 完成任务。到目前为止,我们创建的 agent 是无状态的,这意味着它不会记住之前的交互。

计算机科学、人工智能、数据分析和大数据方向的研发和教学。 1377

创建代理(agent)

True [{‘url’: ‘http://m2.weather.com.cn/mweather1d/101010100.shtml’, ‘content’: ‘北京天气预报,…,及时发布北京气象预警信号、各类气象资讯。’}, {‘url’: ‘https://m.weather.com.cn/mweather/101010100.shtml’, ‘content’: ‘北京天气预报,及时准确发布中央气象台天气信息,…、各类气象资讯。’}] AIMessage(content=‘你好👋!有什么可以帮助你

weixin_52002907的博客 1047

AI开发-python-langchain框架(3-17-ReactAngent的增加会话记忆)

为ReAct Agent添加会话记录功能,是提升智能体交互体验的关键一步,其核心逻辑就是“预留占位符-记录历史-传递上下文”,全程基于LangChain原生组件即可轻量实现,无需复杂代码。对于开发者而言,这种实现方式不仅简单易上手,还能灵活扩展,后续可以根据实际需求,增加会话记录的持久化、清理、总结等功能,让智能体的“记忆”更高效、更实用。代码实现:12345678910111213141516171819202122232425262728。

AKbljxCR8的博客 174
上一篇: LLMs的基本组成:向量、Tokens和嵌入
下一篇: 5分钟打造基于 LangChain+Gradio 的个人知识助理
爱喝白开水a
博客等级 码龄3年 6793粉丝 763原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值