【AI Agent】Agent的原理介绍与应用发展思考

news2024/11/26 21:51:46

文章目录

    • Agent是什么?
      • 最直观的公式
      • Agent决策流程
    • Agent 大爆发
    • 人是如何做事的?
    • 如何让LLM替代人去做事?
    • 来自斯坦福的虚拟小镇
      • 架构
      • 记忆(Memory)
      • 反思(Reflection)
      • 计划(Plan)
    • 类 LangChain 中的各种概念
    • Agent落地的瓶颈
    • Agent从专用到通用的实现路径
    • 多模态在Agent的发展
    • Agent新的共识正在逐渐形成
    • 出门问问:希望做通用的Agent
    • HF:Transformers Agents 发布
    • 参考引用

Agent是什么?

Agent一词起源于拉丁语中的Agere,意思是“to do”。在LLM语境下,Agent可以理解为在某种能自主理解、规划决策、执行复杂任务的智能体

Agent并非ChatGPT升级版,它不仅告诉你“如何做”,更会帮你去做。如果Copilot是副驾驶,那么Agent就是主驾驶。

自主Agent是由人工智能驱动的程序,当给定目标时,它们能够自己创建任务、完成任务、创建新任务、重新确定任务列表的优先级、完成新的顶级任务,并循环直到达到目标。

最直观的公式

Agent = LLM+Planning+Feedback+Tool use

Agent决策流程

感知(Perception)→ 规划(Planning)→ 行动(Action)

  • 感知(Perception)是指Agent从环境中收集信息并从中提取相关知识的能力。
  • 规划(Planning)是指Agent为了某一目标而作出的决策过程。
  • 行动(Action)是指基于环境和规划做出的动作。
    Agent通过感知从环境中收集信息并提取相关知识。然后通过规划为了达到某个目标做出决策。最后,通过行动基于环境和规划做出具体的动作。Policy是Agent做出行动的核心决策,而行动又为进一步感知提供了观察的前提和基础,形成了一个自主的闭环学习过程。

Agent 大爆发

  • 3月21日,Camel发布。
  • 3月30日,AutoGPT发布。
  • 4月3日,BabyAGI发布。
  • 4月7日,西部世界小镇发布。
  • 5月27日,英伟达AI智能体Voyager接入GPT-4后,直接完胜了AutoGPT。通过自主写代码,它完全独霸了《我的世界》,可以在游戏中进行全场景的终身学习,根本无需人类插手。
  • 就在同一时间,商汤、清华等共同提出了通才AI智能体 Ghost in the Minecraft (GITM),它同样能够通过自主学习解决任务,表现优异。这些表现优异的AI智能体,简直让人看到了AGI+智能体的雏形。

Agent 是让 LLM 具备目标实现的能力,并通过自我激励循环来实现这个目标。
它可以是并行的(同时使用多个提示,试图解决同一个目标)和单向的(无需人类参与对话)。

为Agent创建一个目标或主任务后,主要分为以下三个步骤:

  1. 获取第一个未完成的任务
  2. 收集中间结果并储存到向量数据库中
  3. 创建新的任务,并重新设置任务列表的优先级

让我们一起来看一个具体的例子。我们可以从一个任务开始,例如"编写一篇关于ChatGPT以及它能做什么的1500字博客"。
模型接收这个要求,并按照以下步骤执行操作:

sub_tasks = openai.ChatCompletion.create(
  model="gpt-4",
  messages=[
    {"role": "system", "content": "You are an world class assistant designed to help people accomplish tasks"},
    {"role": "user", "content": "Create a 1500 word blog post on ChatGPT and what it can do"},
    {"role": "user", "content": "Take the users request above and break it down into simple sub-tasks which can be easily done."}
  ]
)

在这个例子中,我们使用OpenAI API来驱动 Agent。通过 system 字段,你可以在一定程度上定义你的Agent。然后,我们添加 user content Create a 1500 word blog post on ChatGPT and what it can do,以及下一步骤 Take the users request above and break it down into simple sub-tasks which can be easily done.,也就是在此基础上添加任务,将查询分解成子任务。
然后,你可以获取子任务,并在循环中向模型发送更多的调用,执行所有这些子任务,每个子任务都有不同的系统消息(想象成不同的Agent,可能是一个擅长写作的Agent,一个擅长学术研究的Agent等)。
接下来,你可以向模型循环发送更多的调用,执行每个子任务。每个子任务都可以有不同的系统消息,你可以想象这些系统消息代表了不同领域的专家,例如一个擅长写作的专家、一个擅长学术研究的专家等等。这样,你可以让模型在不同的角色下进行思考和响应,从而更好地满足用户的需求。

人是如何做事的?

在工作中,我们通常会用到PDCA思维模型。基于PDCA模型,我们可以将完成一项任务进行拆解,按照作出计划、计划实施、检查实施效果,然后将成功的纳入标准,不成功的留待下一循环去解决。目前,这是人们高效完成一项任务非常成功的经验总结。
在这里插入图片描述

如何让LLM替代人去做事?

要让LLM替代人去做事,我们可以基于PDCA模型进行 规划、执行、评估和反思

  • 规划能力(Plan)-> 分解任务:Agent大脑把大的任务拆解为更小的,可管理的子任务,这对有效的、可控的处理好大的复杂的任务效果很好。
  • 执行能力(Done)-> 使用工具:Agent能学习到在模型内部知识不够时(比如:在pre-train时不存在,且之后没法改变的模型weights)去调用外部API,比如:获取实时的信息、执行代码的能力、访问专有的信息知识库等等。这是一个典型的平台+工具的场景,我们要有生态意识,即我们构建平台以及一些必要的工具,然后大力吸引其他厂商提供更多的组件工具,形成生态。
  • 评估能力(Check)-> 确认执行结果:Agent要能在任务正常执行后判断产出物是否符合目标,在发生异常时要能对异常进行分类(危害等级),对异常进行定位(哪个子任务产生的错误),对异常进行原因分析(什么导致的异常)。这个能力是通用大模型不具备的,需要针对不同场景训练独有的小模型。
  • 反思能力(Action)-> 基于评估结果重新规划:Agent要能在产出物符合目标时及时结束任务,是整个流程最核心的部分;同时,进行归因分析总结导致成果的主要因素,另外,Agent要能在发生异常或产出物不符合目标时给出应对措施,并重新进行规划开启再循环过程。

LLM作为一种智能代理,引发了人们对人工智能与人类工作的关系和未来发展的思考。它让我们思考人类如何与智能代理合作,从而实现更高效的工作方式。而这种合作方式也让我们反思人类自身的价值和特长所在。

在这里插入图片描述

来自斯坦福的虚拟小镇

  • Generative Agents: Interactive Simulacra of Human Behavior, 2023.04, Stanford
  • 代码已开源:https://github.com/joonspk-research/generative_agents
    虚拟小镇,一个agent就是一个虚拟人物,25个agents之间的故事。

架构

在这里插入图片描述

记忆(Memory)

  • 短期记忆:在上下文中(prompt)学习。它是短暂且有限的,因为它受到Transformer的上下文窗口长度的限制。
  • 长期记忆:代理在查询时可以注意到的外部向量存储,可以通过快速检索访问。

反思(Reflection)

反思是由代理生成的更高级别、更抽象的思考。因为反思也是一种记忆,所以在检索时,它们会与其他观察结果一起被包含在内。反思是周期性生成的;当代理感知到的最新事件的重要性评分之和超过一定阈值时,就会生成反思。

  • 让代理确定要反思什么
  • 生成的问题作为检索的查询

计划(Plan)

计划是为了做更长时间的规划。像反思一样,计划也被储存在记忆流中(第三种记忆),并被包含在检索过程中。这使得代理能够在决定如何行动时,同时考虑观察、反思和计划。如果需要,代理可能在中途改变他们的计划(即响应,reacting)。

类 LangChain 中的各种概念

  • Models:也就是我们熟悉的调用大模型API。
  • Prompt Templates:在提示词中引入变量以适应用户输入的提示模版。
  • Chains:对模型的链式调用,以上一个输出为下一个输入的一部分。
  • Agent:能自主执行链式调用,以及访问外部工具。
  • Multi-Agent:多个Agent共享一部分记忆,自主分工相互协作。
    在这里插入图片描述

Agent落地的瓶颈

Agent本身用到两部分能力,一部分是由LLM作为其“智商”或“大脑”的部分,另一部分是基于LLM,其外部需要有一个控制器,由它去完成各种Prompt,如通过检索增强Memory,从环境获得Feedback,怎样做Reflection等。

Agent既需要大脑,也要外部支撑。

  • LLM本身的问题:自身的“智商”不够,可进行LLM升级为GPT-5;Prompt的方式不对,问题要无歧义。
  • 外部工具:系统化程度不够,需要调用外部的工具系统,这是一个长期待解决的问题。

现阶段Agent的落地,除了LLM本身足够通用之外,也需要实现一个通用的外部逻辑框架。不只是“智商”问题,还需要如何借助外部工具,从专用抵达通用——而这是更重要的问题。

解决特定场景的特定问题——将LLM作为一个通用大脑,通过Prompt设计为不同的角色,以完成专用的任务,而非普适性的应用。关键问题,即Feedback将成为Agent落地实现的一大制约因素,对于复杂的Tools应用,成功概率会很低。

Agent从专用到通用的实现路径

假设Agent最终将落地于100种不同的环境,在目前连最简单的外部应用都难以实现的前提下,最终能否抽象出一个框架模型来解决所有外部通用性问题?

先将某一场景下的Agent做到极致——足够稳定且鲁棒,再逐步将它变成通用框架,也许这是实现通用Agent的路径之一。

多模态在Agent的发展

  • 多模态只能解决Agent感知上的问题,而无法解决认知的问题。
  • 多模态是必然趋势,未来的大模型必然是多模态的大模型,未来的Agent也一定是多模态世界中的Agent。

Agent新的共识正在逐渐形成

  • Agent需要调用外部工具
  • 调用工具的方式就是输出代码

由LLM大脑输出一种可执行的代码,像是一个语义分析器,由它理解每句话的含义,然后将其转换成一种机器指令,再去调用外部的工具来执行或生成答案。尽管现在的 Function Call 形式还有待改进,但是这种调用工具的方式是非常必要的,是解决幻觉问题的最彻底的手段。

出门问问:希望做通用的Agent

在中国的市场环境下,如果做一个与企业深度结合的Agent,最终将成为“外包”,因为它需要私有化部署,集成到企业工作流里。很多公司都会去争抢保险公司、银行、汽车领域的大客户。这将与上一代AI公司的结局非常相似,边际成本很难降低,且没有通用性。出门问问目前的魔音工坊、奇妙文等AIGC产品都属于面向内容创作者的、介于深度和浅度之间的应用,既不完全属于consumer,也不完全属于enterprise,同时还有面向企业用户的CoPilot,其定位也是在企业里找到具体的「场景」,做相对通用的场景应用。
在这里插入图片描述

HF:Transformers Agents 发布

通过自然语言控制超过十多万个 HF 模型!
在这里插入图片描述

Transformers Agents,并加入到了 Transformers 4.29 之后的版本中。它在 Transformers 的基础上提供了一个自然语言 API,来 “让 Transformers 可以做任何事情”。

这其中有两个概念:一个是 Agent (代理),另一个是 Tools (工具),我们定义了一系列默认的工具,让代理去理解自然语言并使用这些工具。

  • 代理:这里指的是大语言模型 (LLM),你可以选择使用 OpenAI 的模型 (需要提供密钥),或者开源的 StarCoder 和 OpenAssistant 的模型,我们会提示让代理去访问一组特定的工具。
  • 工具:指的是一个个单一的功能,我们定义了一系列工具,然后使用这些工具的描述来提示代理,并展示它将如何利用工具来执行查询中请求的内容。
    在这里插入图片描述

我们在 transformers 中集成的工具 包括:文档问答、文本问答、图片配文、图片问答、图像分割、语音转文本、文本转语音、零样本文本分类、文本摘要、翻译等。不过你也可以扩展这些一些与 transformers 无关的工具,比如从网络读取文本等,查看如何开发自定义工具

未来是Agent的世界,在今天的Agent进程下,依然重复昨天AI的故事,私有化部署将面临挑战。

参考引用

  • 大模型下半场,关于Agent的几个疑问
  • babyagi
  • Agent:OpenAI的下一步,亚马逊云科技站在第5层

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

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

相关文章

pycharm创建py文件时自动添加基础信息--模板

在图片中加入下面基本信息,这些基本信息可以自己定义: #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : ${DATE} ${TIME} # Author : supermps # File : ${NAME}.py # Software : ${PRODUCT_NAME} import logging import math import w…

【群智能算法改进】一种改进的鹈鹕优化算法 IPOA算法[1]【Matlab代码#57】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始POA算法2. 改进后的IPOA算法2.1 Sine映射种群初始化2.2 融合改进的正余弦策略2.3 Levy飞行策略 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 原始POA算法 此…

MySQL中分区与分表的区别

MySQL中分区与分表的区别 一、分区与分表的区别 分区和分表是在处理大规模数据时的两种技术手段,尽管它们的目标都是提升系统的性能和数据管理的效率,但它们的实现方式和应用场景略有不同。 1. 分区 分区是将一个大表分割为多个更小的子表&#xff0c…

3D点云处理:点云投影为2D图像 调平点云(附源码)

文章目录 0. 测试效果1. 基本内容1.1 计算点云位姿1.2 调平点云1.3 点云投影2. 代码实现文章目录:3D视觉个人学习目录微信:dhlddxB站: Non-Stop_0. 测试效果

uniapp对接支付宝出现的问题

支付逻辑没问题却出现商家订单参数异常,请重新发起付款 检查发现后端传回来根本没什么问题,检查很久发现需要下载证书放在服务器上 小程序文档 - 支付宝文档中心

支付宝pc支付(springboot版),简单配置即可实现支付

概述 支付宝pc支付,只需要修改配置就可以实现支付,0基础小白都可以用。使用springboot编写,简单易用。 详细 DEMO简介 springboot整合支付宝pc支付,仅仅需要少量的配置,就可以实现pc支付。 项目截图 支付流程 用户…

DiffBIR: Towards Blind Image Restoration with Generative Diffusion Prior

DiffBIR: 基于生成扩散先验的盲图像恢复 论文链接:https://arxiv.org/abs/2308.15070 项目链接:https://github.com/XPixelGroup/DiffBIR Abstract 我们提出了DiffBIR,它利用预训练的文本到图像扩散模型来解决盲图像恢复问题。我们的框架采…

vue2踩坑之项目:生成二维码使用vue-print-nb打印二维码

1. vue2安装 npm install vue-print-nb --save vue3安装 npm install vue3-print-nb --save 2. //vue2 引入方式 全局 main.js import Print from vue-print-nb Vue.use(Print) ------------------------------------------------------------------------------------ //vue2 …

2023年09月编程语言流行度排名

点击查看最新编程语言流行度排名(每月更新) 2023年09月编程语言流行度排名 编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的 一门语言教程被搜索的次数越多,大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自…

Spring MVC入门必读:注解、参数传递、返回值和页面跳转

一、常用注解 1.1.RequestMapping 作用:用于映射请求路径与处理请求的方法之间的关系,可以用在类或方法上 。 标注在方法上 用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法 Controller public class HelloContro…

pytorch-神经网络-手写数字分类任务

Mnist分类任务: 网络基本构建与训练方法,常用函数解析 torch.nn.functional模块 nn.Module模块 读取Mnist数据集 会自动进行下载 %matplotlib inlinefrom pathlib import Path import requestsDATA_PATH Path("data") PATH DATA_PATH / &…

RESTful风格介绍

😜作 者:是江迪呀✒️本文关键词:HTTP、RESTFul、请求☀️每日 一言:我已经习惯这样的失望了——《英雄联盟》奥恩 一、前言 为了更好地设计和构建分布式系统和网络应用,诞生了RESTful 风格,它…

后端SpringBoot+前端Vue前后端分离的项目(二)

前言:完成一个列表,实现表头的切换,字段的筛选,排序,分页功能。 目录 一、数据库表的设计 ​编辑二、后端实现 环境配置 model层 mapper层 service层 service层单元测试 controller层 三、前端实现 interface接…

Acwing算法心得——现代艺术(统计遍历)

大家好,我是晴天学长,先用两个一维数组维护数据,再统计遍历二维数组,需要的小伙伴请自取哦!💪💪💪 1 )现代艺术 2) .算法思路 现代艺术 1.两个数组维护行和列 2.遍历数组…

命名空间的详讲

本篇文章旨在讲解C中命名空间的概念以及其相关注意事项! C的介绍 C作为C语言的衍生,其对C语言中的一些缺陷进行了一些的补充和优化。但是C也对C语言具有兼容性! 本文旨在讲解C对C语言中当声明的变量与库函数的一些标识符,关键字…

2023年MySQL实战核心技术第二篇

目录 五 . 日志系统:一条SQL更新语句是如何执行的? 5.1 解释 5.2 重要的日志模块:redo log 5.2.1 解释 5.2.2 WAL(Write-Ahead Logging) 5.2.3 crash-safe。 5.3 重要的日志模块:binlog 5.3 .1 为什么会有…

【FPGA】通俗理解从VGA显示到HDMI显示

注:大部分参考内容来自“征途Pro《FPGA Verilog开发实战指南——基于Altera EP4CE10》2021.7.10(上)” 贴个下载地址: 野火FPGA-Altera-EP4CE10征途开发板_核心板 — 野火产品资料下载中心 文档 hdmi显示器驱动设计与验证 — …

10.1 直流电源的组成及各部分的作用

在电子电路及设备中,一般都需要稳定的直流电源供电。本章所介绍的直流电源为单相小功率电源,它将频率为 50 Hz 50\,\textrm {Hz} 50Hz、有效值为 220 V 220\,\textrm V 220V 的单相交流电压转换为幅值稳定、输出电流为几十安以下的直流电压。 单相交流…

机器学习训练,没有机器怎么办

google的cobal,免费提供15G显存。 https://colab.research.google.com/drive/

十五、MySQL(DCL)如何实现用户权限控制?

1、为什么要实现用户权限控制? 在日常工作中,会存在多个用户,为了避免某些用户对重要数据库进行“误操作”,从而导致严重后果,所以对用户进行权限控制是必须的。 2、常见的权限类型: ALL,ALL PRIVILEGES …