Lagent & AgentLego 智能体应用搭建——笔记

详细视频:Lagent & AgentLego 智能体应用搭建

一、智能体简介

1.1、为什么要有智能体

主要因为随着大语言模型的快速发展,即使如 GPT-4 这样的大模型,在某些场景下也会出现不能满足实际需求的情况,有诸多的局限性。

1.1.1、幻觉问题

如果大模型对于提问的问题所设计的知识不清楚,模型可能会生成虚假信息,与现实严重不符或脱节。

在这里插入图片描述

1.1.2、时效性

因为大模型的训练数据往往都是截止在某一个时间点,并不能随着时间流逝而同步更新,如果没有类似于 RAG 这种技术,那么模型训就无法反映最新趋势和信息。

在这里插入图片描述

1.1.3、可靠性

当面对较为复杂的任务时,大模型可能频发错误输出现象,影响信任度。

在这里插入图片描述

1.2、智能体的含义

根据 Barbara Hayes-RothAn architecture for adaptive intelligent systems 论文中所说,一个智能体应当满足以下三个条件:

  • 可以感知环境中的动态条件
    (perception of dynamic conditions in the environment)
  • 能采取动作影响环境
    (action to affect conditions in the environment)
  • 能运用推理能力理解信息、解决问题、产生推断、决定动作
    (reasoning to interpret perceptions, solve problems, draw inferences, and determine actions)

1.3、智能体的组成

1.3.1、大脑

作为控制器,承担记忆、思考和决策任务。接受来自感知模块的信息,并采取相应动作。

1.3.2、感知

对外部环境的多模态信息进行感知和处理。包括但不限于图像、音频、视频、传感器等。

1.3.3、动作

利用并执行工具以影响环境。工具可能包括文本的检索、调用相关 API、操控机械臂等。

1.4、智能体范式

1.4.1、AutoGPT

AutoGPT 是一种自动化文本生成模型 ,它是基于 GPT 的改进版,通过自动搜索算法来优化 GPT 的超参数,从而提高其在各种任务上的表现。

AutoGPT 通过 Zero-shot learning 理解人类给它设定的角色和目标,再通过 多任务学习 ( Multi-task Learning, MTL ) 将人类设定的目标进行任务拆解成各个子任务,期间以 Few-shot learning 的方式生成提示,最后利用 Meta-learning 评估任务是否达标。

在这里插入图片描述

1.4.2、Rewoo

可以阅读原论文 ReWOO: Decoupling Reasoning from Observations for Efficient Augmented Language Models

以往大模型调用外部工具的流程是:获取响应,根据响应进行下一步操作。虽然简单易行,但通常会导致巨大的计算量,因为假如一个问题没法一次性解决,最后模型的输入就是随着询问次数增加而倍增的。

在本文中作者提出了将这些步骤都独立开来,也就是假设一个问题没法一次性解决,需要调用 k 次外部工具时,首先利用一个 planner 安排好 k 次独立的询问,利用 worker 对着 k 次询问分别进行查询,最后将 planner 设计好的独立询问、从worker得到的对于每一个询问的查询结果以及一些 prompt 信息输入给 solver,由 solver 给出最终的结果。

感觉可以理解为一个空间换空间的思路,就是通过增加模型参数,换取更多的外部信息辅助LM进行回复
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/02504b6184a643448777a2021d12718

1.4.3、ReAct

原论文为 ReAct: Synergizing Reasoning and Acting in Language Models

想快速了解含义的,可以参考这篇文章 ReAct论文解读:LLM ReAct范式,在大语言模型中结合推理和动作

我们知道在大语言模型(LLM),通过思维链(chain-of-thought)机制进行适当的提示后,这些 LLM 展示了出色的能力。它们能执行各种任务,如算术计算、常识推理和符号问题解决。然而,这种思维链受限于模型内部表示的依赖,更严重的后果是限制了其基于现实世界数据主动探索、推理或更新知识的能力。

相反地,一些最新的研究在交互式场景中应用了预训练的语言模型的推理与行动能力,例如基于文本的游戏、网页导航和机器人技术。这些研究主要专注于通过语言模型的内部知识将文本上下文转化为可行动的步骤。然而,这些方法缺乏对高层次目标的抽象思考能力,或维护用于长期任务的工作记忆。

ReACT,即 Reason + Action 的新范式融合了推理和行动的优点,能够让语言模型以交错方式生成语言推理轨迹和文本行动。动作会影响外部环境,从而返回观察反馈。与此不同,推理轨迹不会影响外部环境。相反,它们会通过在上下文中进行推理并用有用的信息更新它,从而影响模型的内部状态。这些内部状态被用来更新模型的预测算法,以支持未来的推理和行动。

在这里插入图片描述

二、Lagent 和 AgentLego

2.1、Lagent 简介

Lagent 是一个轻量级开源智能体框架,旨在让用户可以高效地构建基于大语言模型的智能体。它支持多种智能体范式,如 AutoGPT、ReWoo、ReAct。同时,它也支持多种工具 ,如谷歌搜索、Python解释器等。

下图为 Lagent 的基本流程。

在这里插入图片描述

2.2、AgentLego 简介

AgentLego 是一个提供了多种开源工具 API 的多模态工具包,旨在像是乐高积木一样,让用户可以快速简便地拓展自定义工具,从而组装出自己的智能体。通过 AgentLego 算法库,不仅可以直接使用多种工具,也可以利用这些工具,在相关智能体框架(如 Lagent,Transformers Agent 等)的帮助下,快速构建可以增强大语言模型能力的智能体。

AgentLego 的宣传图如下。
在这里插入图片描述

2.3、两者的关系

在这里插入图片描述

  • 30
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
组件是 Vue.js 中最重要的概念之一。组件可以让我们将 UI 拆分为独立、可复用的部件,使得代码更加清晰、易于维护。在 Vue.js 中,组件可以分为全局组件和局部组件,其中全局组件可在任何地方使用,而局部组件只能在其父组件中使用。 定义组件时,需要使用 Vue.component() 方法,该方法需要传入两个参数:组件名称和组件配置对象。组件名称应该采用 kebab-case(短横线分隔命名)格式,以便在 HTML 中使用。 示例代码如下: ```javascript // 定义一个名为 button-counter 的新组件 Vue.component('button-counter', { data: function () { return { count: 0 } }, template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>' }) ``` 在上述代码中,我们定义了一个名为 button-counter 的组件,该组件包含一个计数器,每次点击按钮计数器加一。 在 HTML 中使用组件时,需要使用组件名称作为自定义标签来调用组件。示例代码如下: ```html <div id="app"> <button-counter></button-counter> </div> ``` 在上述代码中,我们调用了 button-counter 组件,并将其渲染到了 id 为 app 的 div 元素中。 除了组件的 data 和 template 属性外,还可以使用 props 属性来传递组件之间的数据。使用 props 时,需要在组件的配置对象中定义 props 属性,并在 HTML 中使用 v-bind 指令来传递数据。 示例代码如下: ```javascript // 定义一个名为 todo-item 的新组件 Vue.component('todo-item', { props: ['todo'], template: '<li>{{ todo.text }}</li>' }) // 创建一个 Vue 实例 var app = new Vue({ el: '#app', data: { groceryList: [ { id: 0, text: '蔬菜' }, { id: 1, text: '水果' }, { id: 2, text: '奶酪' } ] } }) ``` 在上述代码中,我们定义了一个名为 todo-item 的组件,并使用 props 属性定义了一个名为 todo 的 prop。在 HTML 中,我们使用 v-bind 指令将 groceryList 数组中的每个对象传递给了 todo-item 组件。示例代码如下: ```html <div id="app"> <ul> <todo-item v-for="item in groceryList" v-bind:todo="item" v-bind:key="item.id"></todo-item> </ul> </div> ``` 在上述代码中,我们使用 v-for 指令遍历 groceryList 数组,并使用 v-bind 指令将数组中的每个对象传递给了 todo-item 组件。注意,我们还需要使用 v-bind:key 指令来为每个列表项指定一个唯一的 key 值。 插槽是 Vue.js 中另一个重要的概念。插槽可以让父组件在子组件中插入任意的 HTML 内容,使得组件更加灵活、可复用。 在子组件中,使用 <slot> 标签来定义插槽。在父组件中,使用子组件的自定义标签来调用组件,并在标签内部插入 HTML 内容。示例代码如下: ```javascript // 定义一个名为 alert-box 的新组件 Vue.component('alert-box', { template: ` <div class="alert-box"> <strong>Error!</strong> <slot></slot> </div> ` }) // 创建一个 Vue 实例 var app = new Vue({ el: '#app' }) ``` 在上述代码中,我们定义了一个名为 alert-box 的组件,并在组件中定义了一个插槽。在 HTML 中,我们调用了 alert-box 组件,并在标签内部插入了一些 HTML 内容。示例代码如下: ```html <div id="app"> <alert-box> <p>Something bad happened.</p> </alert-box> </div> ``` 在上述代码中,我们调用了 alert-box 组件,并在标签内部插入了一些 HTML 内容。该 HTML 内容会被插入到 alert-box 组件的插槽中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值