基于开源模型搭建Agent系统教程

一篇非常基础非常基础的Agent博客

大型语言模型(LLMs)经过causal language modeling训练后,可以处理各种任务,但它们通常在逻辑、计算和搜索等基本任务上表现不佳。最糟糕的情况是,它们在某个领域(如数学)表现不佳,但仍然试图自行处理所有计算。

为了克服这一弱点,除了其他方法,可以将LLM集成到一个系统中,使其能够调用工具:这样的系统称为LLM Agent。

在本文中,我们将解释ReAct代理的内部工作原理,然后展示如何使用最近集成到LangChain中的ChatHuggingFace类来构建它们。最后,我们将对比几个开源LLM与GPT-3.5和GPT-4。

LLM Agent的定义非常广泛:LLM Agent是所有利用LLM作为引擎并可以根据环境产生的observation产生action的系统。它们可以使用感知⇒反思⇒行动循环的多个迭代来完成任务,并经常通过规划或知识管理系统进行增强以提高性能。

在这里,我们将重点放在ReAct代理上。ReAct是一种构建代理的方法,基于“reasoning”和“acting”这两个词的连接。在提示词中,会包含模型可以使用哪些工具,并要求它“一步一步”地思考(也称为思维链行为),以规划和执行下一个行动以达到最终答案。

图片

图片

上面的图看起来非常高级,但背后的原理其实非常简单。

在下面这个colab notebook中:使用 Transformers 库实现了一个简单的工具代理。

LLM 在循环中被调用,其中包含一个基本的提示词。

然后可以解析LLM的输出:

如果它包含字符串‘Final Answer:’,循环结束并打印答案,

否则,LLM应该输出一个工具调用:你可以解析这个输出以获取工具名称和参数,然后使用这些参数调用该工具。然后将此工具调用的输出附加到提示中,并使用这些扩展信息再次调用LLM,直到它有足够的信息最终提供问题的最终答案。

例如,当回答问题:1:23:45 有多少秒时,LLM 的输出可能是这样的。

由于此输出不包含字符串'Final Answer:',它在调用一个工具:因此我们解析此输出并获取工具调用参数:使用参数{"time": "1:23:45"} 调用工具convert_time。运行此工具调用返回{'seconds': '5025'}。因此我们将整个这段文字追加到提示词中。

现在的新提示词是(一个略微更详细的版本):

我们再次调用LLM,使用这个新提示词。鉴于它可以访问观察中调用结果的工具,LLM现在很可能会输出:

任务已完成!

一般来说,运行LLM引擎的代理系统中困难的部分包括:

从提供的工具中选择一个能够帮助实现预期目标的工具:例如,当被问到“大于30,000的最小质数是多少?”时,代理可以使用搜索工具进行调用,但这并不会有所帮助。

以严谨的参数格式调用工具:例如,当尝试计算一辆汽车在10分钟内行驶3公里的速度时,必须调用计算器工具来将距离除以时间:即使你的计算器工具接受JSON格式的调用:{”tool”: “Calculator”, “args”: “3km/10min”},也存在许多陷阱,例如:

拼写错误工具名称:“calculator”或“Compute”都跟工具名对不上

给出参数的名称而不是它们的值:“args”: “distance/time”

非标准化的格式:“args”: "3km in 10minutes”

高效地提取和利用前面观察到的信息,无论是初始背景还是使用工具后返回的观察结果。

说白了,一种就是模型能吐出来一个action,action_input,可能会出现模型吐出来的工具名可能跟实际的工具名对不上,或者参数名不对,或者参数值不标准。另外一种就是模型可能吐不出有效的action,对结果帮助不大

那么,一个完整的代理系统设置会是什么样子呢?

创建ChatModel并为其提供工具的代码非常简单,您可以在Langchain文档中查看所有类说明

你可以通过给 chat_model 提供 ReAct 风格的提示和工具来将其转化为一个代理。

并且代理将处理输入:

我们希望衡量开源LLM作为通用推理代理的表现。因此,我们选择需要使用逻辑和基本工具(计算器和互联网搜索)的问题。最终数据集是从其他3个数据集中抽取的样本的组合:

用于测试互联网搜索能力:我们从HotpotQA中选择了一些问题:这原本是一个检索数据集,但可以用于一般性问题回答,可以访问互联网。一些问题最初需要结合来自各种来源的信息:在我们的设置中,这意味着执行几个步骤的互联网搜索来结合结果。

对于计算器的使用,我们添加了来自GSM8K的问题:这个数据集测试小学数学能力,完全可以通过正确利用4种运算符(加、减、乘、除)来解决。

我们还从GAIA中挑选了一些问题,这是一个对通用人工智能助理来说非常困难的基准测试。原始数据集中的问题可能需要许多其他不同的工具,比如代码解释器或pdf阅读器:我们精选了不需要其他工具而只需搜索和计算器的问题。

评估是使用基于Prometheus提示格式的GPT-4作为打分模型。代码使用以下仓库

评测的几个英文模型,具体的就不贴了,结果如下:

图片

图片

简单结果看就是llama2-70b比较菜,在agent场景,mixtral 7b*8略优于gpt3.5

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MT2093 活动安排

贪心策略&#xff1a; 每次选择结束时间最早的活动 代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5e5 10; int n; struct pp {int a, b; } p[N]; bool cmp(pp x, pp y) {return x.b < y.b; } int ans 0;int main() {cin >>…

KafkaQ - 好用的 Kafka Linux 命令行可视化工具

鉴于并没有在网上找到比较好的linux平台的kafka可视化工具&#xff0c;今天为大家介绍一下自己开发的在 Linux 平台上使用的可视化工具KafkaQ 虽然简陋&#xff0c;主要可以实现下面的这些功能&#xff1a; 1&#xff09;查看当前topic的分片数量和副本数量 2&#xff09;查…

实战计算机网络02——物理层

实战计算机网络02——物理层 1、物理层实现的功能2、数据与信号2.1 数据通信模型2.2 通信领域常用术语2.3 模拟信号和数字信号 3、信道和调制3.1 信道3.2 单工通信、半双工通信、全双工通信3.3 调制3.4 奈式准则3.5 香农定律 4、传输媒体4.1 导向传输媒体4.2 非导向传输媒体 5、…

JEPaaS 低代码平台 j_spring_security_check SQL注入漏洞复现

0x01 产品简介 JEPaaS是一款优秀的软件平台产品,可视化开发环境,低代码拖拽式配置开发,操作极其简单,可以帮助解决Java项目80%的重复工作,让开发更多关注业务逻辑,大大提高开发效率,能帮助公司大幅节省人力成本和时间成本,同时又不失灵活性。适用于搭建 OA、ERP、CRM、…

ONNX2NCNN工具

最近部署很多onnx转ncnn的操作&#xff0c;发现还是需要有页面操作会比较好&#xff0c;而且需要查询onnx的图&#xff0c;所以写了一个工具来搭配使用 建议搭配Netron 来使用 打开模型 选择打开-》选择onnx模型 显示基础信息 查询onnx模型图 展示信息 点击“展示信息”&…

喜讯!云起无垠入选《2024中国AI大模型产业图谱1.0版》

近日&#xff0c;数据猿与上海大数据联盟联合策划并启动了“2024全年度三大策划活动”&#xff0c;经过数月的精心筹备和严格筛选&#xff0c;通过直接申报交流、深入访谈调研、外部咨询评价以及匿名访谈等多维度交叉验证的方式&#xff0c;最终完成了《2024中国AI大模型产业图…

不同进制数之间的相互转换(全面解析版)

目录 前言 1.不同进制的表示方法 2.不同进制之间的对照 3.二进制数转换为其他进制数 3.1二进制数转换为八进制数 3.2任意进制数转换为十进制数 3.3二进制数转换为十六进制数 4.其他进制数转换为二进制数 4.1八进制数转换为二进制数 4.2十进制数转换为任意进制数 4.3十…

ESP-IDF OTA升级过程中遇到的“esp_transport_read returned:-1 and errno:128”问题(1)

在笔者“ESP32-C3模组上跑通OTA升级”系列文章中,经过了一番“踩坑填坑”的过程,最终实现了OTA升级功能。每次升级都能够成功,比较稳定。 但是,当笔者添加大量业务代码(如使能蓝牙配置),使得固件的大小由之前的200~300K字节变为1.5~1.6M字节后,再次执行升级时(同样的…

x64-linux下在vscode使用vcpkg

1.使用vscode远程连接上对应的linux &#xff0c;或者直接在图形化界面上使用。 2.安装vcpkg 插件&#xff0c;然后打开插件设置。 注意&#xff1a;defalut和host的主机一定和你自己的主机一致&#xff0c;且必须符合vcpkg三元组格式&#xff0c;其中你可以选择工作台的设置&a…

编写函数isprime(int a),用来判断自变量a是否为素数,若是素数,函数返回整数1,否则返回0

int main() {int isprime(int x);int x;printf("请输入一个数\n");scanf("%d", &x);if (isprime(x)){printf("%d是素数\n",x);}else{printf("%d不是素数\n",x);} } int isprime(int a) {int i;for (i 2; i < a / 2; i){if (a%…

法考报名必看,99%高过审率证件照片电子版制作技巧

在2024年&#xff0c;法考备战已经如火如荼进行中&#xff0c;作为进入法律行业的第一步&#xff0c;参加法考的重要性不言而喻。而作为报名过程中必不可少的一环&#xff0c;报名照片要求以及证件照制作技巧更是需要我们特别重视的部分。想要在这个过程中顺利通过审核&#xf…

vue3中用setup写的数据,不能动态渲染(非响应式)解决办法

相比于2.0&#xff0c;vue3.0在新增了一个setup函数&#xff0c;我们在setup中可以写数据也可以写方法&#xff0c;就像我们以前最开始学习js一样&#xff0c;在js文件中写代码。 For instance <template><div class"person"><h2>姓名&#xff1…

必刷!!软考【系统分析师】100道高频考题(含知识点解析),轻松45+

2024上软考已经圆满结束&#xff0c;距离下半年的考试也只剩下半年不到的时间。需要备考下半年软考系分的小伙伴们可以抓紧开始准备了&#xff0c;毕竟高级科目的难度可是不低的。 今天给大家整理了——系统分析师100道高频考题 &#xff0c;都是核心重点&#xff0c;有PDF&…

音频处理1_基本概念

AI变声和音乐创作的基础 声音本质上是人类可察觉范围内的气压周期性波动, 即声波 声波是一种连续信号&#xff0c;在任意时间内的声音信号有无数个取值。对于只能读取有限长数组计算机来说&#xff0c;我们需要将连续的声音信号转换为一个离散的序列&#xff0c;即数字化表示。…

ssm情侣购物系统-计算机毕业设计源码02387

目 录 摘要 1 绪论 1.1 开发背景与意义 1.2开发意义 1.3Vue.js 主要功能 1.3论文结构与章节安排 2 情侣购物系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分…

电脑蓝屏怎么办?7个方法为你解决问题!

“我今天开电脑时&#xff0c;不知道为什么电脑突然就蓝屏了。大家有什么方法可以解决电脑蓝屏问题吗&#xff1f;” 在现代社会的快节奏中&#xff0c;电脑已经成为了我们工作和生活的重要伙伴。然而&#xff0c;当这个“伙伴”突然展现出它的“任性”一面——蓝屏时&#xff…

idea插件开发之通过纯编码方式开发页面(不使用form ui)

写在前面 本文看线如何通过纯编码方式来定义页面。 1&#xff1a;正戏 我们首先来定义一个面板&#xff0c;需要继承抽象类&#xff1a;com.intellij.openapi.ui.SimpleToolWindowPanel&#xff0c;如下&#xff1a; public class MySelfDefinePanel extends SimpleToolWin…

【Python整蛊小代码】以及打包成.exe格式过程【踩坑,避坑】

一、项目介绍 该项目为一个Python写成的整蛊小代码&#xff0c;效果是不断弹出窗口&#xff0c;并显示图片和文字。并使用 项目大致效果&#xff1a; &#xff08;图片过于搞笑&#xff0c;不宜展示&#xff09; &#xff08;无侵犯肖像权&#xff0c;禁止商用&#xff09; …

优迅医学近10亿对赌协议今年到期,前五大客户收入波动剧烈

《港湾商业观察》廖紫雯 日前&#xff0c;优迅医学生物科技&#xff08;以下简称&#xff1a;优迅医学&#xff09;递表港交所&#xff0c;保荐机构为中金公司&#xff0c;优迅医学国内运营主体为北京优迅医学检验实验室有限公司。 作为一家以平台为基础的基因科技公司&#…

常见报错及程序框架图

程序框架图 程序流程图又称程序框图&#xff0c;是用统一规定的标准符号描述程序运行具体步骤的图形表示。程序框图的设计是在处理流程图的基础上&#xff0c;通过对输入输出数据和处理过程的详细分析&#xff0c;将计算机的主要运行步骤和内容标识出来。程序框图是进行程序设…