聊聊我对AI Agents技术的一些看法
小伙伴们!我来兑现承诺啦~
ps:接下来期待什么内容,欢迎在评论区留言!
今天,我们就来聊聊大模型 Agent。
最近这几个月,Agent 这一概念可谓火出天际,从 AutoGPT 一周 6 万 star 刷新 Github 涨星速度记录开始,AI Agent 项目如雨后春笋开始在各大技术平台涌现。
▲AutoGPT Github Star 数
AI Agent 不断被冠以“大模型下半场”,“软件 2.0( Software 2.0)”等等称号,连 OpenAI 的创始成员 Andrej Karpathy 也在十月份的黑客马拉松演讲中也表示:
相比模型训练方法,OpenAI 内部目前更关注 Agent 领域的变化,每当有新的 AI Agents 论文出来的时候,内部都会很兴奋并且认真地讨论。
那么,所谓 AI Agent 到底是什么?它的源其何处?魔力又是什么呢?
AI Agent 源自何处
首先,Agent,Agent,这个在英文中过于常用的概念出现在 AI Agent 的语境里,到底代表着什么概念?让我们先来对 “Agent” 这个词做一个词源追溯。
Agent 的词根 ag- 来自于拉丁语动词 agere 意指做和行动,与词根 act- 一脉同源,加之形容词后缀 -ent 表示“正在做事的人”,其直译应为“做事者”,换言之,Agent 的本意代指“做事的主体”,“可以做事之物”,强调“做”这一动作。
相较于具有“主体性”的人,Agent 更多具有一种“拟主体性”,即带有模仿人类主观能动性的去主动的有目的地进行“计划”,“组织”,“实施”,“学习”等直至完成一项工作或一件事情。 回到 AI 研究的语境之中,相反于传统机械或软件被动的“给予输入——>做出输出”的模式,Agent 由于更加强调自主的发现问题、确定目标、构想方案、选择方案、执行方案、检查更新的特性,因此可以被认为是一类拥有“自主智能的实体”,而被广泛称之为智能体。
在早期人工智能的研究中,对人工的智能进行抽象形成的概念大致上是一类“利用传感器对周围环境做出感知,依据感知到的信息做出决策,并利用行动装置做出行动”的人工实体,因此也被称为 AI Agent,AI Agent 拥有众多不同的类型,包含反射型、模型式,目标型等等,其中最出名也是最火出圈的可能就是强化学习的范式,依据 reward 指导,根据状态价值函数或动作价值函数的更新而构建的学习型智能体。
▲强化学习范式
区别于更加擅长于做“感知”的传统深度学习的方法,Agent 的重心其实更加落子于“行动”也就是“决策”之上,尽管强化学习领域以 PPO 为代表的策略梯度方法在游戏的许多领域取得了亮眼的成绩,但是基于各种特定神经网络架构的策略网络没有足够的“泛化”能力,无法实现通用的智能决策,同时,强化学习范式似乎有时候也要求着太多对“智能体”而言完全不合理的“试错”,Agent 本身似乎完全是一张白纸而没有任何“先天知识”。
▲乔姆斯基的转换生成语法说强调具有先天的普通语法
GPT-4为AI Agent带来转机
“通用性”与“先天知识”的结合似乎在今年 3 月 OpenAI 发布 GPT-4 后迎来转机,大规模语言模型(LLMs)的强大能力使得其可以轻松处理多个来自完全截然不同的领域的任务,同时其前身“预训练”的范式又似乎带有一定的“先天知识”而不必后天盲目的试错。
因此使用 LLMs 作为 AI Agent 中的 Agent 成为一条极其有希望成功实现“自主智能体”的技术路径,从而延申出这半年来形形色色的基于 LLMs 的 AI Agent。
▲大模型智能体飞速发展
事实上,当大家开始思考“大模型除了 Chat 以外还有什么应用”时,便已经有了基于大模型的 Agent 的想法。四月份我们报道过 CMU 发布的一篇使用大模型作为“自主科研智能体”的论文《又一恐怖技能!卡耐基梅隆大学发布超强智能体,炸翻科研圈》,在其中大模型充当一个“核心协调器”的作用,向上对接人类的以 Prompt 为形式的输入,向下则以网络搜索,Python 脚本等为媒介沟通互联网或自动化实验仪器等工具,从而可以自主完成从实验设计、实验规划到执行复杂的科学实验等的一整套流程。
▲基于大模型的科研智能体架构
基于类似这样自主科研智能体的形形色色的大模型垂直领域的 AI Agent 论文或工作,也是在四月份,清华大学瞄准“大模型使用工具”,发布了一篇“工具学习综述”:《清华发布工具学习框架,让ChatGPT操控地图、股票查询,贾维斯已来?》,在这篇综述中,清华大学提出了一个叫“Tool Learning”的概念,将之前的各种垂直领域的智能体放置于一个统一的框架之下,其中大模型仍然作为“控制器”,用于完成针对人类的“意图识别”,针对可选工具的“组织规划”,并且引入了“感知器”向大模型报告“执行结果”,当出现错误时指导大模型完成“自主纠错”。
▲工具学习框架
而如果把眼界再打开,不局限于“工具使用”,而是将 AI Agent 建模为一个人脑智能与人工智能协同的过程,面对一个“任务”,由人类站在高点描述一个“任务目标”,并将完成这一任务的工作交予 Agent,而 AI 接受目标并自主的进行“感知环境”,“形成记忆”,“完成规划”,“决策行动”,“观察纠错”等一系列以任务目标为导向的行动,那么就形成了诸如 “AutoGPT”,“BabyGPT” 等基于 LLMs 的 AI Agent 模式。
▲基于 LLMs 的自主 AI Agent 模式
与其说基于大模型的 AI Agent 是一种“新技术”,不如说基于大模型的 AI Agent 是一套面向 LLMs 的“新的管理方法”,类似“思维链”等技术,大模型 Agent 通过一整套流程化,机制化的方式促使大模型模拟人类智能的决策过程,以代替人类完成一些具体的任务。
▲AutoGPT 核心代码
以 BabyAGI 的流程图为例,如下图所示,作为 User 的人类首先向 Agent 以“自然语言”的形式提供任务与目标的描述,放置于任务队列之中(1.),任务优先级 Agent 用于对任务队列任务列表、执行顺序等进行管理(5.)(6.),执行 Agent 不断从任务队列在提取任务(2.),向上联系具体的任务目标,向下联系具体可操作的如“实验设备”,“功能API”,“常用工具”等工具库,用于完成对任务的操作。
在执行过程中,执行 Agent 维护一个记忆库 Memory,储存当下此轮的任务信息,查询历史完成的任务信息。在操作完成后,执行 Agent 向任务创建 Agent 发送任务完成结果(3.),根据任务完成结果,任务创建 Agent 向任务队列增添为完成前项任务所必须先完成的“前置任务”,直到此项任务结束。
▲BabyAGI 流程图
如果对上述框架做一个抽象与总结,参考人大发布的 AI Agent 综述,一个 AI Agent 可以被认为由以下四部分组成:
-
Profile:表示 Agent 属性
-
Memory:存储历史信息
-
Planning:生成计划决策
-
Action:执行计划决策
各种不同的 AI Agent 的差异与区别也几乎都从上述四部分展开,譬如在 Profiling 模块,不同的 AI Agent 可以选择不同的角色定义方式,如手动定义“假设你是一个学生”,或者采用大模型对 Agent 角色进行生成。在 Memory 模块,是否区分长期记忆与短期记忆,记忆存储方式(自然语言?数据库?嵌入?)等也构成了不同的 AI Agent 的特征。在 Planning 模块,有无反馈?采用思维链 CoT?思维树 ToT?思维图 GoT?在 Action 模块,单轮互动还是多轮互动,如何定义 Agent 的动作空间,是否使用外部工具,如果定义外部工具集等等也都是 AI Agent 前沿的研究方向。
▲大模型 Agent 框架
基于 Prompt 的与大模型互动的方式更像是静态的“输入-输出”,而 AI Agent 为大模型提供了一个进行“动态决策”的框架,使得大模型开始有能力处理任务更加复杂化,情境更加多样化的决策,为大模型从“语言”迈向“真实世界”提供了一个坚实的基础。
▲LangChain 组件
相应的,类似 LangChain 的大模型开发框架应运而生随之爆火,LangChain 作为一个面向大模型的“管理框架”,连接了大模型、Prompt 模板、链等多种组件,基于 LangChain,香港大学余涛组发布了开源的自主智能体 XLANG Agent(香港大学余涛组推出开源XLANG Agent!支持三种Agent模式),在介绍的博客里,余老师如是描述大模型 Agent:
想象一下这个过程,将以日常语言为载体的人类的指示或问题转化为机器可以理解的动作和代码,随后机器在特定的环境中执行这些动作,从而改变该环境的状态。这些变化被观察、分析,并进而启动与人类下一步交互的循环
▲XLANG Agent 进行多轮互动
在 XLANG Agent 的基础上,余涛老师组进一步优化非专家用户的使用体验和应用设计,并将 Agent 平台化,便形成了十月份我们报道的 OpenAgents 《开源智能体来啦!港大团队发布OpenAgents,可以搞数据分析、聊天、支持200+插件》,OpenAgents 的出现也开始让 Agent 的发展朝向全面、透明与可部署化。
▲OpenAgents 平台图
类似的,清华与面壁智能发布的 XAgent,通过强化“子问题分解”与“人机协作”,在 AutoGPT 的基础上向着真实应用前进了一大步,并在众多实际任务测试中全面超越 AutoGPT,拓展了 Agent 能力的边界。
▲XAgent 超越 AutoGPT
事实上,如果类比于传统软件工程管理与面向 AI 的软件工程管理(MLops),Agent 的出现进一步模糊了软件作为一个输入输出系统“软件内”与“软件外”的边界。由于 Agent 可以不断与与外部环境发生互动,不断的学习修正自己的任务规划,因此当 AI Agent 出现以后,尽管牺牲了一些可靠性,但是这类应用的“灵活性”又迈上了一个新的台阶。
▲智能水平与管理层级
这种跃升将直接导致管理层级(自上而下决策层——>控制层——>执行层——>操作层)中越来越多的任务可以被 AI “自动化”了,如果说传统的自动化机械停留在让决策者在基层操作层执行时“自动化”,而以深度学习为代表的人工智能方法则可以再上一层完成任务执行方案生成时的方案选择“自动化”,那么以大模型 Agent 为代表的新一代人工智能方法则真正实现了控制层一整套决策流程的“自动化”。而这种层面的“自动化”恰恰带来了 Software 2.0 的曙光,软件开发将变成完全的“自动化工厂”,软件层面的“大规模定制”有可能到来。
▲AI 应用的五层基石
Seednapse AI 的创始人曾给了 AI 应用的五层基石,如果说之前的类似 AutoGPT 的智能体属于自主智能体(Autonomous Agent),其核心思想是“像人类智能一样去解决问题”,那么以斯坦福小镇为代表的生成智能体(Generative Agent)可能带来 Multi-Agent 的曙光,区别于“像人类智能一样去解决问题”,生成智能体的核心在于“像社会智能一样去解决问题”。在斯坦福 25 人小镇的论文中构建了生成智能体的架构如下图所示:
▲生成智能体架构
通过使用一种“记忆—计划—反思”驱动的智能体形态,以“社会事件”为动力源使得 Agent 间相互互动,直至模拟整个社会的分工体系。在这种生成智能体的思想下,一群导演与计算机工程师踏出了生成智能体应用的第一步《AI自导自演的电视剧,每个角色都是一个大模型,斯坦福25人小镇精神续作》,尝试制作了一部完全由大模型自导自演、定制化的电视剧集 Westland Chronicles
▲Westland Chronicles 剧照
而从实验性质的模拟向下,类似 MetaGPT 等的多智能体 AI 框架逐渐诞生,通过模拟不同角色之间的“合作”,最终实现“生成一个包含分析和设计的示例大约需要0.2美元(GPT-4 API的费用),而一个完整的项目大约需要2.0美元。”
▲MetaGPT 框架
回到最开始,AI Agent 作为 “OpenAI 发力的下一个方向”,背后蕴含了一个天文数字量级的市场。前两天爆出 OpenAI 已经在进行灰度测试,未来很快将放出一个可以使用所有工具的 GPT-4(All Tools)版本,真正成为一个“理解一切,处理一切,生成一切”的超级统一智能体(重磅!GPT-4又进化了!画图、插件、代码等能力被整合,超级智能体来了)
▲OpenAI 更新预告
当这样一种 AI Agent 出现,它对生活的改变很有可能不止于 ChatGPT 简单的 Chat,而是渗透入各行各业,在只要能用到大模型的地方就可以建立起相应的 Agent,各种科幻电影中的人机协作有可能真的会走进现实。
▲钢铁侠与贾维斯
当然,目前这样一种 AI Agent 的技术落地尚处于“婴儿时期”,如同 BabyGPT 的名字那样,目前的 AI Agent 的技术还远远无法匹配我们宏大的想象。试错与学习能力不足、复杂推理能力不强、精确决策能力不够、响应时间过长、计算资源要求过高等等由限制着大模型 AI Agent 成为真正的“贾维斯”,但是,未来已来,引用迪迦奥特曼的主题曲《奇迹再现》的歌词:“新的风暴已经出现,怎么能够停滞不前……”
ps:别忘了,想看什么原创内容,欢迎在评论区留言哦!等小瑶翻牌子~
相关文章:

聊聊我对AI Agents技术的一些看法
小伙伴们!我来兑现承诺啦~ ps:接下来期待什么内容,欢迎在评论区留言! 今天,我们就来聊聊大模型 Agent。 最近这几个月,Agent 这一概念可谓火出天际,从 AutoGPT 一周 6 万 star 刷新…...

32 mysql in 的实现
前言 这里我们主要是来探讨一下 mysql 中 in 的使用, find_in_set 的使用 这两者 在我们实际应用中应该也是 非常常用的了 测试数据表如下 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(16) DEFAULT NULL,field2 varchar(16) DEFAU…...

Qt QtCreator添加自定义注释
在写代码的时候我们为了规范化,一般会加文件注释、类注释和函数注释;用注释来说明我们的代码,也方便模块化开发,那么我们在写注释的时候经常会写一些重复的内容,我们会复制粘贴。这样一来二去,就显得很繁琐…...
docker 各种命令
-v 或 --volume 由三个由冒号(:)分隔的字段组成,[HOST-DIR:]CONTAINER-DIR[:OPTIONS]。 HOST-DIR 代表主机上的目录或数据卷的名字。省略该部分时,会自动创建一个匿名卷。如果是指定主机上的目录,需要使用绝对路径。 C…...

【优选算法系列】【专题五位运算】第一节.常见的位运算(面试题 01.01. 判定字符是否唯一和268. 丢失的数字)
文章目录 前言常见的位运算一、判定字符是否唯一 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写二、丢失的数字 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写总结 前言 常见的…...

学习笔记二十八:K8S控制器Daemonset入门到企业实战应用
DaemonSet控制器:概念、原理解读 DaemonSet概述DaemonSet工作原理:如何管理PodDaemonset典型的应用场景DaemonSet 与 Deployment 的区别DaemonSet资源清单文件编写技巧 DaemonSet使用案例:部署日志收集组件fluentdDaemonset管理pod࿱…...

您对互联网有多“上瘾”?
萨里大学的科学家决定检查现代用户的网络成瘾程度。他们的一篇文章最近发表在 《旅行与旅游营销杂志》上 ,其中包含对受此问题困扰的年轻人(而不仅仅是年轻人)的研究和分类结果。 796名不同年龄段的人参加了实验。科学家们仔细监测了他们的行…...

数据挖掘题目:设ε= 2倍的格网间距,MinPts = 6, 采用基于1-范数距离的DBSCAN算法对下图中的实心格网点进行聚类,并给出聚类结果(代码解答)
问题 代码 import matplotlib.pyplot as plt import numpy as np from sklearn.cluster import DBSCAN #pip install matplotlib #pip install numpy #pip install scikit-learn # 实心格网点的坐标 solid_points np.array([[1, 1], [2, 1],[3, 1], [1, 2], [2, 2], [3, 2],[…...

STM32HAL-完全解耦面向对象思维的架构-时间轮片法使用(timeslice)
目录 概述 一、开发环境 二、STM32CubeMx配置 三、编码 四、运行结果 五、代码解释 六、总结 概述 timeslice是一个时间片轮询框架,完全解耦的时间片轮询框架,非常适合裸机单片机引用。接下来将该框架移植到stm32单片机运行,单片机…...

C++ 程序员入门需要多久,怎样才能学好?
我们都知道,C是所有语言的基础 !记得在大学毕业之后,做了C的后端开发当然还有一些嵌入式的相关的工作,到现在换工作,工作机会依然那么多,到了一定的阶段,我想你不是在找工作,而是工作…...
SpringBoot项目打war包部署到tomcat访问路径去掉项目名
方法一:手动修改包名 1.先将Tomcat webapp目录下文件全部删除 2.将war包文件放在webapps文件夹下 2.运行tomcat,war文件自动解压成文件夹 3.关闭tomcat,,将步骤2解压的文件夹直接改名为ROOT 4.重新运行tomcat,即可。 5…...
58同城面试
一、Java八股 1、ThreadLocal的底层原理是什么? ThreadLocal 在Java中用于提供线程局部变量,这些变量在每个线程中都有独立的副本,互不干扰。其底层原理可以简要描述如下: 数据存储: 每个线程中都有一个 ThreadLocalMap 的实例&…...

【数据结构】归并排序 的递归实现与非递归实现
归并排序 前言一、归并排序递归实现(1)归并排序的核心思路(2)归并排序实现的核心步骤(3)归并排序码源详解(4)归并排序效率分析1)时间复杂度 O(N*logN…...

Go的命令行工具开发:使用Cobra库
今天我们将深入探讨如何使用Go语言和Cobra库来开发命令行工具。 命令行工具在软件开发中有着广泛的应用,它们快速、高效,且易于自动化。 Go语言因其简洁、高效而被广泛用于命令行工具的开发。Cobra库则是Go中用于构建命令行工具的重要库之一。 为什么选…...

坚持#第420天~阿里云轻量服务器内存受AliYunDunMonito影响占用解决方法
阿里云轻量服务器内存受AliYunDunMonito影响占用解决方法,亲测有效: Mobax好卡啊,那就直接在阿里云后台操作即可,阿里云后台也可以上传文件。 Navicat mysql好卡啊,那就直接在阿里云后台最上面帮助的右边有个数据库&…...

时间序列聚类的直观方法
一、介绍 我们将使用轮廓分数和一些距离度量来执行时间序列聚类实验,同时利用直观的可视化,让我们看看下面的时间序列: 这些可以被视为具有正弦、余弦、方波和锯齿波的四种不同的周期性时间序列 如果我们添加随机噪声和距原点的距离来沿 y 轴…...
vue3的reactive源码解析
reactive源码解析 总结一句: reactive是个函数。reactive函数返回了一个createReactiveObject函数,createReactiveObject又返回了一个“经new Proxy实例化”的对象。 详细介绍: 我们使用时传给reactive函数一个对象类型target,reactive又将target传给cr…...

【ElasticSearch系列-04】ElasticSearch的聚合查询操作
ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…...
Redisson初始
最近的自己,一直都在做些老年的技术,没有啥升级,自己也快麻木了,自己该怎么说,那必须行动起来啊!~来来,我们一起增长自己的内功 分布式锁的最强实现: Redisson 1.概念 在介绍之前,我们要知道这个Redisson是啥? 难道就是Redis的son?(我第一次就这么认为的哈哈!) 事实也的确如…...

【华为OD题库-018】AI面板识别-Java
题目 Al识别到面板上有N(1<N≤100)个指示灯,灯大小一样,任意两个之间无重叠。由于AI识别误差,每次识别到的指示灯位置可能有差异,以4个坐标值描述Al识别的指示灯的大小和位置(左上角x1,y1,右下角x2.y2)。请输出先行…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...