Langchain的Agents介绍

news2024/11/14 4:00:57

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

博主原文链接:https://www.yourmetaverse.cn/nlp/514/

请添加图片描述

(封面图由文心一格生成)

Langchain的Agents介绍

一、核心概念:
Langchain的Agents核心理念是使用语言模型来选择一系列的动作。与硬编码的动作链不同,Agents利用语言模型作为推理引擎,确定采取哪些动作以及顺序。

二、主要组成部分:

  1. Agent: 负责决定下一步采取的动作,由语言模型和提示驱动。输入包括:可用工具的描述、用户高层目标和为达到用户目标而执行的任何动作和工具输出对。
  2. Tools: Agents可以调用的函数。关键在于提供适当的工具并以对Agent有帮助的方式描述这些工具。LangChain提供了一系列内置工具,并简化了自定义工具的定义。
  3. Toolkits: 针对常见任务,Agent可能需要一组相关工具。LangChain提供了诸如GitHub toolkit之类的工具集,以实现特定目标。
  4. AgentExecutor: Agent的运行时,负责调用Agent,执行它选择的动作,并将动作输出反馈给Agent。此过程涵盖处理Agent选择不存在的工具、工具错误以及无法解析为工具调用的输出等复杂情况。

三、构建Agent:

  1. 使用LangChain表达式语言(LCEL)从头开始构建Agent,定义自定义工具,并在自定义循环中运行Agent和工具。
  2. 设置LangSmith,以便在构建时自动跟踪内置或自定义Agent的所有步骤和工具输入输出。
  3. 定义Agent:例如,使用OpenAI Function Calling创建能够计算单词长度的自定义工具。这是创建Agent的可靠方式。
  4. 使用Agent:通过传递简单的问题和空白的中间步骤,来测试Agent的反应。
  5. 使用AgentExecutor类简化过程,它整合了错误处理、提前停止、跟踪等质量提升措施。
  6. 添加记忆:为了使Agent能够记住之前的交互并轻松处理后续问题,需要向Agent中添加记忆功能。

以上是Langchain的Agents模块的概览,涵盖了其核心概念、组成部分、以及如何构建和使用Agent。这些功能为开发者提供了强大且灵活的工具,以实现更复杂的自动化任务和流程。

四、Agent类型介绍:
Langchain提供多种类型的Agents,每种都有其独特的应用和特点:

  1. Zero-shot ReAct: 使用ReAct框架根据工具的描述来决定使用哪个工具。需要为每个工具提供描述。这是最通用的动作代理。

  2. Structured input ReAct: 能够使用多输入工具的代理。与旧代理不同,它可以使用工具的参数模式创建结构化的动作输入。这对于复杂工具的使用(如精确导航浏览器)非常有用。

  3. OpenAI Functions: 专为与特定OpenAI模型(如gpt-3.5-turbo-0613和gpt-4-0613)协作而设计。这些模型已被明确地微调,以便在需要调用函数时检测并响应应传递给函数的输入。

  4. Conversational: 用于对话设置的代理。其提示旨在使代理有助于对话。它使用ReAct框架来决定使用哪个工具,并使用记忆功能来记住之前的对话互动。

  5. Self-ask with search: 使用名为Intermediate Answer的单一工具来查找问题的事实答案。这种代理类似于原始的自问自答搜索论文,其中提供了Google搜索API作为工具。

  6. ReAct document store: 使用ReAct框架与文档存储进行互动。必须提供两种工具:SearchLookupSearch工具用于搜索文档,而Lookup工具用于在最近找到的文档中查找术语。此代理与原始ReAct论文中的Wikipedia示例相当。

这些Agents类型展示了Langchain在实现复杂自动化任务和流程方面的灵活性和强大功能。


❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1248704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ardupilot开源飞控之VTOL之旅:开箱

Ardupilot开源飞控之VTOL之旅:开箱 1. 源由2. 收货2.1 外包装2.2 内包装2.3 部件2.3 概貌 3. 探索3.1 飞控VTOL3.2 远程控制3.3 自动导航3.4 部件清单 4. 计划 1. 源由 心系已久的HEE WING T1 Ranger VTOL终于来了,因此开启了VTOL之旅。 当然Ardupilot…

jenkins + gitlab 自动部署(webhook)

Jenkins是一个流行的开源CI/CD工具,可以与Git等版本控制系统集成,实现自动构建、测试和部署。Webhook是一种机制,可以在Git仓库中设置,在代码提交或合并请求时触发Jenkins构建任务,以完成自动化部署。 实操 设备信息 …

计算机中mfc140u.dll丢失的修复方法,3个完美解决的方法分享

在使用电脑的过程中,我们经常会遇到一些错误提示,其中之一就是“mfc140u.dll丢失”。这个错误提示通常出现在运行某些程序时,它会导致程序无法正常运行。那么,究竟是什么原因导致了mfc140u.dll文件的丢失呢?本文将详细…

语雀服务器P0事故的一些启发

文章目录 背景错误显示故障原因及处理过程改进措施补偿启发监控和告警容灾备份自动化部署和回滚灰度发布定期演练和测试日志和审计容错性弹性扩展性能优化安全性持续改进稳定业务不动多方验证不要抱着侥幸心理白名单内测留后手总结 写在最后 背景 语雀是蚂蚁金服旗下的一款在线…

C++算法 —— 贪心(4)

文章目录 1、分发饼干2、最优除法3、跳跃游戏Ⅱ4、跳跃游戏Ⅰ5、加油站6、单调递增的数字7、坏了的计算器 1、分发饼干 455. 分发饼干 其实看完这个题会发现,如果给定的两个数组不排序的话会非常难受,所以无论怎样,先排序。接下来需要比较两…

蓝桥杯每日一题2023.11.24

题目描述 #include <stdio.h> #define N 100int connected(int* m, int p, int q) {return m[p]m[q]? 1 : 0; }void link(int* m, int p, int q) {int i;if(connected(m,p,q)) return;int pID m[p];int qID m[q];for(i0; i<N; i) ________________________________…

软文写作如何布局?媒介盒子分享三大类型

好的软文需要有清晰的结构和流畅的语言&#xff0c;让读者能够很快理解和接受文案的内容&#xff0c;因此在写文案之前&#xff0c;需要先列出思路和框架&#xff0c;明确文案的主题和重点&#xff0c;选择合适的语言和表达方式。让文案更加生动易懂&#xff0c;下面就让媒介盒…

yo!这里是c++11重点新增特性介绍

目录 前言 列表初始化 { }初始化 initializer_list类 类型推导 auto decltype 范围for 右值引用与移动语义 左值引用和右值引用 移动语义 1.移动构造 2.移动赋值 3.stl容器相关更新 右值引用和万能引用 完美转发 关键字 default delete final和override …

数组基础知识

数组基础&#xff08;不定时更新&#xff09; 数组基础 数组基础 &#xff08;1&#xff09;数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标下对应的数据。数组下标都是从0开始的。数组内存空间的地址是连续的。 &#xff08;…

python-选择排序

选择排序是一种简单直观的排序算法&#xff0c;它的基本思想是每一轮选择未排序部分的最小元素&#xff0c;然后将其放到已排序部分的末尾。这个过程持续进行&#xff0c;直到整个数组排序完成。(重点&#xff1a;通过位置找元素) 以下是选择排序的详细步骤和 Python 实现&…

element ui 上传组件实现手动上传

首先需要给上传组件增加http-request属性&#xff0c;这个方法中可以获取到文件&#xff0c;并按照自己的方式进行上传。 <el-uploadreffileUploadaction#:http-requesthttpRequest:on-preview"handlePreview":on-remove"handleRemove":limit"1&q…

SpringBoot3核心原理

SpringBoot3核心原理 事件和监听器 生命周期监听 场景&#xff1a;监听应用的生命周期 可以通过下面步骤自定义SpringApplicationRunListener来监听事件。 ①、编写SpringApplicationRunListener实现类 ②、在META-INF/spring.factories中配置org.springframework.boot.Sprin…

接口测试:轻松掌握基础知识,快速提升测试技能!

1.client端和server端 开始接口测试之前&#xff0c;首先搞清楚client端与server端是什么&#xff0c;区别。 web前端&#xff0c;顾名思义&#xff0c;指用户可以直观操作和看到的界面&#xff0c;包括web页面的结构&#xff0c;web的外观视觉表现及web层面的交互实现。 web后…

Python---函数的参数类型

位置参数 理论上&#xff0c;在函数定义时&#xff0c;我们可以为其定义多个参数。但是在函数调用时&#xff0c;我们也应该传递多个参数&#xff0c;正常情况&#xff0c;其要一一对应。 相关链接&#xff1a;Python---函数的作用&#xff0c;定义&#xff0c;使用步骤&…

jQuery 第十一章(表单验证插件推荐)

文章目录 前言jValidateZebra FormjQuery.validValValidityValidForm BuilderForm ValidatorProgressionformvalidationjQuery Validation PluginjQuery Validation EnginejQuery ValidateValidarium后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&…

单链表的反转?太细了哥们!细到离谱!

单链表的反转&#xff08;面试常出&#xff09;&#xff1a; ​ 单链表的反转&#xff0c;可以通过很多种方法实现。包括迭代法&#xff0c;递归法&#xff0c; 迭代法&#xff1a; 定义三个指针&#xff1a;prev、current和next&#xff0c;它们分别表示前一个节点、当前节点…

Excel动态选择某一行/列的最后一个数据

选择列的最后一个数据&#xff1a; 以A列为例&#xff0c;使用&#xff1a; LOOKUP(1,0/(A:A<>""),A:A)选择行的最后一个数据&#xff1a; 以第3行为例&#xff0c;使用&#xff1a; LOOKUP(1,0/(3:3<>""),3:3)示例程序 列最后一个数据&a…

IO口速度影响了什么?

我们在初学单片机的时候都知道单片机GPIO的作用是巨大的&#xff0c;在配置GPIO的时候&#xff0c;结构体初始化里有一个选项是配置输入输出速度的&#xff0c;对于这个速度输出是必须要配置的&#xff0c;输入没有明令说明需不需要配置。 这个速度对于学习过32单片机的都应该知…

python——第十三天

uuid 是通用唯一识别码&#xff08;Universally Unique identifier&#xff09;的缩写 UUID是一个128比特的数值 uuid模块&#xff1a; 获取一个128位&#xff08;比特&#xff09;的永不重复的数字&#xff0c;当然我们使用的时候会转换为32个的字符串 impor uuud uui…

js粒子效果(二)

效果: 代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Particle Animation</title><…