从第一性原理看大模型Agent技术

本文由下面的内部分享视频文字稿重新整理而成

从第一性原理看大模型Agent技术

一个乐观主义者的悲观估计

随着大规模模型技术的兴起,我们正处于一个崭新的智能时代的黎明。我们有一个大胆的预测,未来的5到10年将可能带来一场大变局:99%的开发、设计和文字工作将被AI接管。这不仅仅是一个想象,而是对未来可能趋势的深思熟虑。

图片

在互联网时代,我们目睹了大量网站的崛起,成为互联网时代的原生应用的主要载体,这个时代有了 Web 相关的新技术,这些技术承载着 Google、Facebook、Twitter 等互联网明星企业的崛起。进入移动互联网时代,App 成为了主要载体,它们占据了整个移动互联网时代人们注意力的中心。然而,当我们进入智能时代,开始思考:什么将会成为这个时代的核心载体?我们预测可能不再是 App,也不再是网站,而是 Agent,也许几年后的现实才能给出答案,但历史告诉我们一个新鲜事物的演进总会找到一个稳定的术语来概括这个载体,而今天我们看到 Agent 最具有这个潜力。

图片

对于这个猜想,随着我们后面讲的越来越深入,大家可能体会也会越来越深,因为它可能抓住的一些智能时代一个非常本质性的东西,基于大模型把 Agent 的能力推高到了一个全新的水平,这个在学术界研究了几十年的全新物种才开始走入人类舞台的中央。在范式上我们也在思考是什么样的底层技术和架构会驱动 Agent 技术的快速发展,从现在的趋势来看,我们觉得在人类的智能原理处于核心地位的面向目标架构很可能会成为驱动这个 Agent 技术发展的主要范式。

而且现在全球对Agent的关注也是非常狂热的,几个月前,OpenAI 在内部就开始高度关注智能体(Agent)领域,Deep Mind的联合创始人最近也提到下一代 AI 技术走向并非是生成性 AI,而应该是交互性 AI。这种交互性 AI 在很大程度上类似我们今天提到的智能体,用户要求完成各种任务,智能体则可以对软件进行操作或者与人进行协作,完成相关的工作。

希望这些想法可以帮助大家在战略层面或者是产品和技术层面得到一个很好的思考框架,能够在各自的领域去推演未来。

导读

走马观花、抛砖引玉

整个 PPT 一百多页,内容繁杂。我给大家做一个简单的导读,主要还是梳理脉络,提出思考的框架和基点,起到抛砖引玉的作用,其中涉及的很多细节部分我们并没有做得非常细致。期望大家在看完这个分享之后,对智能体技术有一个新的认知,并能应用在你们自己的研究方向或者职业规划上。

图片

我们将整个内容分为四个部分:首先,会对从大模型到现在的智能体的技术发展做一个串讲;接着,介绍通用智能原理和面向目标架构这个两个根本性问题;最后,基于这两个原理,分析现在的智能体架构仍存在的缺陷,以及未来可能的发展方向。

1. LLM Agents综述

如果你一直关注 AI 领域,你应该能看到一个清晰的技术脉络,一开始大家玩 Prompt 工程,接着是Prompt Chain或Flow,再到Agent,多Agent,很清晰的一个脉络架构,我们也会沿着这个脉络给大家分享相关的经典工作。

图片

我们回到 Agent 这个概念上,实际上,人类是这个星球上最强大的 Agent。Agent是一个能感知并自主地采取行动的实体,这里的自主性极其关键,Agent要能够实现设定的目标,其中包括具备学习和获取知识的能力以提高自身性能。

Agent 的复杂程度各不相同,一个简单的恒温器可以是一个 Agent,一个大型的国家或者一个生物群体也可能是个 Agent。感知环境、自主决策、具备行动能力,设定明确的目标和任务,适应环境及学习能力,都是 Agent 的关键特点。

图片

Agent 这一概念的起源并不明确,可以是学术界逐渐发展沉淀而来,但是我们可以考虑马文·明斯基80年代《智能社会》这本书中在人工智能领域发扬光大了这个概念。Agent 理论在大模型时代之前已经被学术界研究了很多年,甚至是汗牛充栋,许多理论研究都试图创造出具有人类智能水平的 Agent。然而,在大模型出现之前,Agent 的技术始终面对天花板限制,无法取得实用的进步,它的本质问题还是AGI问题,反过来说,只有AGI的技术进步才能让 Agent 技术进步。

图片

在学术领域,最经典的案例可能是与机器人相关的研究,都涉及到了Agent 技术。在大模型时代之前,比较知名的垂直领域 Agent 的例子比如 Alphago,它有感知环境、做决策、采取行动的闭环,当时的主要研究方向还有使用强化学习打游戏的DeepMind的Agent57,后来更加通用的Gato,还有OpenAI玩“躲猫猫”的多智能体。

我们认为Agent技术是未来实现社会全面自动化的关键技术。在大模型出现之前,自动化更多的是一些偏结构化固定模式环境中通过实现固定算法流程来完成自动化任务,而大模型智能体的通用性带来了灵活性,使其可能应对人类在脑力劳动中面临的各种复杂长尾任务,进一步实现体力和脑力任务的全面自动化。

大模型和Agent技术开启了全面自动化的新时代。大模型是第一个可以自主学习并拥有广泛知识的模型,所以在大模型时代,Agent技术开始迅速发展。今天,我们可能只是在起点,我们看到的Agent还偏向于玩具,但是预计在未来几年,这个领域将产生极大的改变,它的发展速度可能会超越我们的想象,因为我们现在看到改进每天都在发生,天花板远未来到,甚至天花板可能不会再来了。

1.1 Prompt工程

图片

在大模型刚出来的时候,大家都喜欢做的事就是Prompt工程,把大模型当成一种编程语言来看待。人们通过描述角色技能、任务关键词、任务目标及任务背景,告知大模型需要输出的格式,并调用大模型进行输出。这种方法就是经典的把大模型当做工具来调用,我们可以称为工具模式。

图片

为此,大家也发展了各种各样的Prompt工程的玩法,如角色扮演、零样本提示和少样本提示。比如一个澳大利亚少年编写了一个15000个字符的提示词,成功地让他变身为人类的导师,教授各种知识。这种方式就像能直接构建软件一样,是我们将Prompt工程发挥到极致的一个经典案例。

图片

https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor

1.2 Prompt外挂

仅凭Prompt工程根本无法满足人们日益增长的大模型需要,鉴于大模型本身的诸多缺陷,如不能及时更新知识,上下文有限等等,人们开始给大模型加入插件,如引入向量数据库,把数据索引进向量数据库,再召回数据,再提交给大模型做Prompt工程,这样就可以使用最新的知识和比大模型里的知识更准确的知识。

图片

这些还不够,人们又开启了外挂模式,尝试让 GPT 调用函数和使用工具,一系列关于工具使用的实践开始出现,ChatGPT也推出了插件体系。当人们发现大模型的推理能力很差时,开始试图让模型自身清楚地描述问题,把问题转化为 PDDL (Planning Domain Definition Language)格式的描述语言,通过调用通用规划器来解决规划问题,再把解决方案转化为可执行的动作,以更好地逻辑推理和规划等任务。

图片

更加经典的外挂形式当然是让大模型调用外部工具了,OpenAI也搞出了ChatGPT Plugins的开放体系,这些今天回头看都是非常顺理成章的形式,ChatGPT的爆发激发了全世界大量的Idea,这些创新很快就被OpenAI吸纳进产品迭代中。

图片

此外,大模型虽然具备一定的推理能力和思考能力,在很多推理任务上依然力不从心,能不能让模型自己不做规划推理,让他把问题描述清楚,转化成一个 PDDL 的一个关于规划描述的语言,然后使用通用的规划器去做规划,再转化成动作执行,这就把大模型作为一个中转器,把规划器当做了一个外挂。

我们可能会思考,大模型或许真的就是我们以前想象的那样,会达到人类智慧水平的普适性机器么?显然从各项评测来看还有很多任务做不到,更何况这些任务评测本身的覆盖度也不够完备。

图片

有一个经典概念被誉为"通用任务解决器",在达特茅斯会议之后得名“GPS”,即General Problem Solver。这是由赫伯特·西蒙(Herbert Simon)和艾伦·纽维尔(Allen Newell)在早期提出的概念,他们尝试寻找可用于解决数学问题的通用解决方案。这套理念其实很简洁,可以看作是早期的面向目标架构。它的主要内容是将目标状态列出,然后在解空间中搜索可以将初始状态转化为目标状态的操作组合,这样的组合便是问题的答案。

图片

1.3 分解与组合

然而,目前我们发现,在通用人工智能(AGI)的漫长旅途中,大模型虽显强大,仍存在着显著的技术天花板。许多人开始探索如何挖掘大模型在大任务执行能力上的可能性,其中一个基本策略就是能够分解和组合。例如,经典的 MapReduce 模式可以将一个大型文本进行摘要,因为它的上下文有限,一种解决办法是扩大 context 的范围。另一个解决方案是,在有限的 context 中,我们先将文本拆分成小片段,对每个片段进行摘要,然后再将其组合,从而得出结果。

图片

大家也发现大模型直接给出答案似乎并不靠谱,那么是否可以让它像人类一样,一步一步思考呢?毕竟,人类在解决问题时,也是逐渐构建解决方案,而并非立即给出答案。因此,开始出现了一系列的尝试解法,比如思维链、多思维链、思维树和思维图等。

图片

我们一一讲解,首先是思维链(Chain of Thought,CoT),它要求模型展示其思考过程,而非仅给出答案。这可以通过两种方式实现,一种是具体说明,即要求模型详细地、一步步地思考;另一种是示例说明,即通过给定问题和答案的同时,提供思考过程。这样,当询问模型时,模型会模仿此过程,逐渐思考并给出答案。再往后,我们发现一个CoT有时可能出现错误,然后开始尝试让它发散,尝试多种思路来解决问题,然后投票选择最佳答案,这就是CoT-SC了。

图片

图片

在这过程中,我们发现,这种发散的方法也有局限性,例如24点问题,它不能很好地解决,那么我们就会尝试把这个问题进行垂直分解,分成三步来做,每一步分解成多个子问题,类似于动态规划的做法,就好像把一个大任务拆解成了三个小的子任务,然后再一步一步地去实现它。

图片

这就是思维树(ToT, Tree of Thought)的一个主要思路,它会根据当前的问题分解出多个可能,然后每一个树节点就是父节点的一个子问题,逐层扩散,遍布整个解空间,一些节点就直接会发现不合适而终止掉,达到了有效剪枝的作用。然而 ToT 的方式也存在问题,对于一些需要分解后再整合的问题,比如排序问题,排序你可能需要分解和排序,然后再merge,就不行了。

图片

为了解决这个问题,一种名为思维图(Graph of Tree,GoT)的方法被提出。这种思维图既可以分解,也可以合并。

图片

9月26日,清华姚期智团队又提出了更新的方法——累计推理,在24点问题上成功率已经达到98%的SOTA。他们方式很接近主流 Agent 的实现方式,具备一定的通用性。它首先会提出一个初步的想法,然后再对这个想法进行验证,看这个提案是否合适。如果提案合适,就将它添加到图的下一个节点,每一步都基于已经建立的图节点进行下一个思考节点的创建,这样发散、合并或删除直到达到最终目标状态,完备性和灵活性大大增强。

1.4 反馈

上述的讨论主要是任务分解和组合,他们尽管强大,却不能与外界进行互动,这就不得不讲到反馈机制了。反馈是整个控制论的基石,也是动物体从诞生之初就具备的基本能力。

图片

最经典的方法实际就是 ReACT,这个方法非常经典,基本把智能体最核心的能力圈出来了,当然它也有它的缺陷,我们将在后面讨论为什么还会有 Agent 更多的复杂技术以克服它的不足。ReACT让大模型先进行思考,思考完再进行行动,然后根据行动的结果再进行观察,再进行思考,这样一步一步循环下去。这种行为模式基本上就是人类这样的智能体主要模式。

比如,询问一个关于科罗拉多造山带的相关问题,它就会去通过搜索工具进行搜索,如果搜索结果没有提到东部地区,它会继续搜索东部地区的数据,然后继续一步一步地思考,根据结果反复思考,直到完成这一项任务。

ChatGPT的代码解释器主要采用的就是这种模式。首先,代码解释器能够与用户进行简单的互动,如用户的问侧和解释器的回应。当用户的问题需要外部调用时,例如询问天气情况,解释器会生成相应的代码,利用代码调用外部工具获取结果。基于这些结果,代码解释器会将信息反馈给用户,如“今天天气很好”。下图是,我们调研的ChatGPT Code Interpreter 的主要实现方式。

图片

然而,我们始终觉得这样仍然不够,我们希望大模型在完成每一个任务后,能够积累经验,故而产生了借鉴强化学习思路的"反射"机制。反射机制能够让机器记住每一次任务的完成情况,无论效果好坏,以供未来参考,提升模型的性能。

图片

Agent的框架都会让模型输出JSON进行函数调用,OpenAI也就推出了Funtion Calling,将外部调用内化到模型中,变成了一种原生能力。

图片

考虑到前面说的ReACT和Reflection这些不彻底性,更大的变革轰然袭来,这就是Agent,今天4月AutoGPT横空出世,短短数周Star数就超过PyTorch达到90k,赚足了眼球。

图片

1.5 Agent

今天,全世界都在关注这个领域,Agent 模式的研究和应用都在迅猛发展,作为一个"共识"可预见的未来该技术的进步将势不可挡。AutoGPT模型刚在10月15日宣布获得1200万美金的资金支持,也小道消息称OpenAI将在11月份发布面向 Agent 的原生模型和规范。百度在发布"文心一言4.0"时也表示,他们考虑在升级系统时重点考虑了系统2的能力,这也是Agent 模式的关键设计。

图片

下图是AutoGPT 发布的进行中的架构图,旨在实现对任务的有效管理。生成的任务将会被加入优先级队列中,随后系统会不断从优先队列中选择优先级最高的任务进行执行,整个过程中,任何反馈都会通过记忆进行迭代优化代码。

图片

这个主要框架虽然相对简单,但其设计理念具有重要意义。首先,创建一个初始的计划,然后进入主循环。系统会让模型判断在当前计划下该进行何种行动,接着会执行行动。执行完毕后,结果会写入下一次循环中。如此,每次决策都会基于之前的结果、记忆和计划,从而制定出新的行动方案。

图片

在该框架中,模型的决策过程涉及到动作选择,这也是主要的功能之一。此外,整个过程中我们主要关注的一些工具包括“Start Another Agent”以及“Task Complete”。这两个工具体现了Agent可以被调用,从而将大任务拆解为若干小任务进行处理,继而形成层次化的树状结构,这种结构与人类分工和协作的工作方式极为相似。

图片

值得一提的是,微软的贾维斯 (Jarvis)一个深度学习任务调度系统,也采用了类似思想。他们主要关注如何调用模型来执行各种深度学习任务,涉及到了先做计划,再选择模型,然后执行任务,获取反馈,然后进入下一轮循环等环节。

图片

有的研究者会尝试使用大模型写小说,借鉴LSTM这个经典深度网络的思想发明RecurrentGPT,还引入了长时记忆和短时记忆机制,使模型拥有了更佳的记忆和学习功能。

图片

其他方向,我们看到把大模型视作一个虚拟世界中的智能体,如MineCraft游戏中所设定的角色。这个角色可以沿着指定的路线,完成一些在环境中探索的任务,如建房子、挖矿、打怪等。这个角色首先需要被告知怎样去执行任务,例如自动训练课程计划的使用。然后逐步的完成任务,形成自己的执行代码库、技能库等,这样就算是在以后遇到相似的任务,它都能快速调用已有的技能和经验来完成任务。某种意义上,这就是一种强化学习的方式。

图片

图片

这个方向的变化真的是一日千里,就在昨天,清华联合面壁发布了XAgent,提出了双循环机制在效果上碾压了AutoGPT。这种机制中,外循环负责宏观规划,而内循环则负责细节的执行。

图片

双循环模式

图片

图片

在完成各类任务的时候,它的能力也大大胜过 GPT 4。这里需要解释一下,研究者为什么把 GPT 4 和 Agent 进行对比,看起来GPT 4只是 Agent 的一个组件,自行车的轮子怎么能和自行车对比呢?这是因为从任务完成的视角看,GPT-4也是一种Agent,Agent的概念是大模型的超集,这也是为什么我们说智能时代的核心载体是 Agent 而不是大模型的原因,这个事物的发展形态终将会走到一个最稳定的形态,这个形态目前看只有 Agent 最配这个颜值担当。当能不大众所接受的对等 Agent 含义的词汇可能还在发明中,至少目前看伙伴、助手这些命名的水平都不够高,让我们拭目以待。

1.6 Multi-Agent

图片

进一步,人们很自然地想到了多智能体(Multi-agent)模式, "斯坦福小镇"开了一个好头。在这个虚拟的小镇里,每个角色都是一个单独的智能体,每天依据制定的计划按照设定的角色去活动和做事情,当他们相遇并交谈时,他们的交谈内容会被存储在记忆数据库中,并在第二天的活动计划中被回忆和引用,这一过程中就能涌现出许多颇有趣味性的社会学现象,我们成为群体智能的涌现。

图片

再看今年7月份,一个被命名为MetaGPT的项目引起了广泛关注,这个项目中定义了产品经理、架构师、项目管理员、工程师和质量保证等角色,各角色之间通过相互协作,基本可以胜任完成500行左右代码的小工程了。

很简单的一个实现就能够完成500行,后续改进后,是否有可能完成5000行或者是5万行代码的项目呢?譬如前两天微软刚发布的 Code Plan 项目已经开始尝试实施大型工程的改造计划。

Meta GPT 最有价值的思想是借鉴人类社会中的协作方式,尤其是SOP,之于Agent 设计则平平无奇,也包括观察、思考、状态管理、任务行动以及结果反馈等等必备组件。

同样的思路,清华开发了一个名为ChatDev的系统,进一步引入了CEO等角色,这里就不再展开描述。

图片

值得一提的是,Agent 的应用方向其实非常广泛。比如 RPA 公司实在智能把 Agent 用于他们的产品调用常见桌面软件,如淘宝网、钉钉,来自动完成桌面任务。

图片

而任何一个 Agent 的实现,似乎共性都挺多,都需要有长短时记忆能力、工具使用能力、通信能力,甚至包括 SOP 的能力,自然而言就有人要做这样的框架了,如 agents。

图片

1.7 简单的难题

尽管 GPT-4 等模型非常强大、Agent的发展似乎牛气冲天,它们仍然无法满足很多任务的需要,甚至一些在我们看来很简单的任务都完成不了,比如我们构造的这个任务:

给小学生展示一下两数相加的每一步计算过程,如1135 + 78答:计算详细过程如下5+8=13, 进位13+7+1=11, 进位1一个数已经加完,剩余数11 + 1 = 12结果为:1211下面请列出以下两数的详细计算过程:81728738271872871871672 + 28781729836746721

我们必须明白,尽管AI在一定程度上模仿了人脑的工作方式,但实际上,机器人和人脑在处理信息时采用的策略有很大的不同。因此,即使在未来,我们也需要继续改进 AI 框架,以解决这种差距。比如一个百万位数的加法任务,GPT-4囿于token数的限制是不可能完成这个任务的,但人类却可以,这恰是人类和AI需要弥补的Gap。我们进行了一些简单的试验,还没有发现大模型和Agent能搞定这个任务。其中,ChatGPT4的Code Interpreter是表现最好的,因为它调用了外部计算器,但中间的过程描述还是发生了错误。如果你能做出来这个小作业,欢迎联系我。

图片

至此,我们已经讲述了大模型到 Agent 的发展历程。接下来的时间,我们将从人类智能的视角,结合面向目标架构的理念,分析 Agent 技术的本质、存在的缺陷以及未来可能的发展方向。

2. 通用智能基本原理

图片

首先我们来看看这个众人熟知的认知飞轮,感知、认知、决策、行动,今天的人工智能代理更像是基于这个认知飞轮构建的。但是从本质上,人类智能远比这复杂。

图片

在漫长的进化历史中,生物神经网络从简单的条件反射逐渐进化到今天的主动预测,我们已经可以在大脑中构建世界模型,进行强大的推理和分析。看似繁杂的过程,实际上都发生在核心的架构上,并且逐步完善。无论是工作记忆,还是人类处理语言的能力的诞生,这些都是智能的必不可少的元素,尤其是符号能力,对人类智能的发展有着不可替代的作用。

图片

因此,让我们先提出一个更为宏观的问题,智能究竟是什么?我强烈推荐这本名为《预测算法》的书,它在20年发表,那一年,GPT 3也刚刚问世,我在阅读之后,就有这样一个感觉:生成模型是战略正确的。在之前关于AGI的分享中,也提到过这个观点,智能是通过预测来解决应对世界的不确定性的,分享视频参见这里https://www.bilibili.com/video/BV16h4y1w79A/

让我们深入理解一下模拟的概念,当一个低等动物接触到外界的刺激,它会收缩来逃避潜在的风险。这其实是一种模拟,只不过这个模拟反射神经元对有些过于反应敏锐,它假设所有的刺激都是潜在的危险。然而,对于人类来说,我们的模拟则更为精细。我们对世界进行建模,把世界以实体、关系、属性描绘出来。然而,这也是我们认知的极限,我们只能理解一个对象化的世界,非对象化的世界我们无法理解。比如,当我们探索量子的时候,我们还常常用对事物进行对象化的方式去理解,但是发现我们的理解力有时候是有限的,因为量子世界的真相超出了人类认知能力的范围,我们智能使用低维空间的投影去推断它,就像我们无法在三维世界去想象十一维世界的样子。

图片

在过去的四十年里,科学家对认知架构有很多深入的研究,并尝试据此研发出通用人工智能,但天地不仁以万物为刍狗,当前来看只有GPT系列模型距离实现通用人工智能最近,当然这些认知理论依然具有巨大的参考和指导意义。

图片

深入地聊认知架构和智能原理之前,我们必须要聊的是绕不开的《思考快与慢》,这是一本畅销书,其后面的学术道理也十分受用。大脑中的系统1和系统2是我们所有人都熟知的,尽管在实际实现中,系统2可能由系统1涌现,但至少在表现上,我们的大脑看起来有两个系统,系统1和系统2,分别负责不同的功能。知识和情感的快速反应被称为系统1,而逻辑性强、思考速度慢的反应被称为系统2。

接下来我们看看这些认知架构中,有一个叫做GWT(Global Workspace Theory,全局工作空间理论),如下图所示:

图片

全局工作空间理论(GWT)是认知科学家伯纳德·巴尔斯(Bernard Baars)和斯坦·富兰克林(Stan Franklin)在20世纪80年代后期提出的一种意识思维框架。它被开发出来,以定性地解释一系列有意识和无意识过程之间的匹配。GWT在建模意识和高级认知方面具有影响力,认为它们是从广泛、并行的神经过程中信息的竞争和集成流动中产生的。

系统1涵盖了神经网络的外围连接,涉及长期记忆、价值系统、感知运动控制相关的神经网络,系统2则是一个高度集中的“舞台”,人类的有意识思考,如做数学题时,脑中想象数字相加的过程,都在这个舞台上进行。这个舞台叫全局工作空间,记忆在这个舞台上被拉进来加工,然后被扔出去。LIDA (Learning Intelligent Distribution Agent) 受到多种计算范例的启发,并且实现了GWT。 认知模块包括知觉关联记忆,情景记忆,意识,程序性记忆和行动选择。由 LIDA 架构控制的认知机器人和软件代理将能够进行多种学习机制。

图片

其实在大模型Agent技术出现之前,人们就已经意识到,试图集成各种深度学习模型以实现人工普遍智能(AGI)并不够,还需要更高层次的认知模型。Lecun在思考AGI时对大模型的出现也提出过意见,它认为世界模型才是关键,但前两天新的研究却认为大模型中有世界模型。但毫无疑问的一点是,世界模型对于我们对世界的认知是非常关键的,无论大模型中是否包含世界的认知,Agent都必须对世界有准确的理解才能做出正确的决策。当模型不能正确运行时,决策就会出错;只有当世界模型构建的正确,才能选择正确的模型,进而做出正确的决策。

总结一下,系统2包含意识、思考、符号主义、逻辑推理图灵、机制结构化和模型。而系统1包含快速思考、神经网络连接主义、长期记忆、深度学习、亚符号、潜意识和非结构化数据。在构建 Agent 时,可以参考这两种系统的思维框架。在理解智能架构的概念时,我们需要从记忆空间、符号系统、世界模型构建与加工三个方向去考虑。记忆空间是基础,符号系统是思考和推理的核心,而世界模型的构建和加工则是其中最重要的环节。在现在的大模型中,如 GPT,虽然很多人认为它没有符号系统,但我们认为,其内部的注意力机制可能已经在激活流转过程中模拟了世界模型的加工过程,只是这个过程并不显式,而且无法控制,只能通过Prompt工程引导它进行,但它会经常跑偏。

图片

我们通过学习掌握了对世界的知识,并针对感知数据尝试在符号系统中构建世界模型,进行预测和行动。如弹钢琴这样的行动,我们需要通过反复训练,逐渐将运动序列内化,变成肌肉记忆和反射。这些在系统2中反复出现的行为,会逐渐沉淀到系统1中。这个过程可以理解为一个“快捷通道”的形成过程,称为Shortcut。

图片

人的视觉识别过程是一个层次性的关系,从最初级的视觉皮层一直到更高级的皮层,从简单的视觉边缘特征到线条的方向性,再到线条之间的组合,如角等更高维特征的形成,直到形成物体的感知。这些物体的概念再对应符号系统和自然语言的绑定,当图像信息经过解码过程进入符号系统后,我们的关联记忆会帮助我们召回数字等语义概念。

以人类做加法为例,假设我们要解决“219 + 13”的问题,这个过程可能会遇到一个看似相同的图形,比如图中有"13"和"B"的歧义。这就打破了现在很多人的想法,通常我们喜欢做前向过程,先使用一个视觉模型处理输入,然后再将其输出传递给大模型进行处理。实际上,人在理解这个场景时是一个双向过程,首先有一些直觉的特征传入到系统2,系统2会推断这是一个做加法任务,并将看似“B”的图形解释为13,这个过程称为Projection。例如,我们经常从一些像素点中识别出人脸,这就是由上至下的功效发挥作用,这是对未来人工智能代理(Agent)的一种启发。

图片

另一个关键的能力是关联记忆。当我们开始观察某个物体时,比如进行加法操作时,我们的大脑并不会以固定模式运作。相反,我们的神经网络会并行运行,有的神经网络开始将加法的概念、数字的概念以及加法规则等各种信息激活,所有这些信息都会基于一个关联网络唤醒出来,这样我们就可以开始下一步的工作。接下来就是所谓的结构推理,我们会开始将这些符号结构化,例如,如果它是一个三位数,我们就会开始理解它的每一位构成整体和部分之间的关系。

图片

当我们已经理解到219 + 13是加法时,我们也会执行Structure Inference得到结构的认知A+B=C的两位数加法结构,并将219和A对应上,13和B对应上,这个过程就是Variable Binding了,我们将具体的实例与它的角色对应上了。

图片

接着我们要遵循加法规则进行运算以实现我们的目标——完成加法任务。根据我们打算完成的目标以及现在的状态,我们需要规划出达成目标所需要的具体步骤,即执行加法规则。进入到这样一个循环过程之中,我们会额外提到两个概念,即"Shortcut"和"Exception"。

那么什么是Shortcut呢?当我们初次开始书写数字时,速度往往很慢,但随着练习,我们将逐渐写得越来越快。这个过程实际上包含了一个叫做“Recoding”的过程,我们会将熟悉的操作或流程用神经元重新表示,这样就把一个复杂的操作简化为了一个子任务,通过类似于传参的方式控制一个子神经网络完成任务。比如开车,一开始,每个动作都需要集中注意力,严重依赖系统2,但是开了一段时间之后,就可以自如地进行了,这就是因为系统2的控制能力已经被沉淀到了系统1里面,称为Shortcut。

图片

另一个重要的方面是异常处理能力,人类最强大的能力就是能够随时应对异常。譬如,你在走路时突然被绊了一跤,你首先需要应对的就是摔倒这个状况,然后再回到原来的路线上继续走。

因此,在执行加法过程中,并不是由于一个细节被中断或遇到各种异常,才开始执行加法。我们会发现,在遇到各种问题时,我们总是会奔着目标勇往直前。人是一个运作着面向目标架构的复杂过程。面向目标架构是人类智能的一个核心机制,当然并不是唯一的。有时,我们也会没有具体的目标或者说目标不是显式的,比如citywalking,同时有一些底层的目标机制,诸如生存,这说明人的面向目标架构要复杂许多,这就是我们不得不说的智能核心的面向目标架构。

3. 面向目标架构

我们的情绪系统其实也在解决目标问题,例如,你会因为目标无法达成而生气,因为目标可能无法达成焦虑,因为别阻碍你的目标而愤怒。显而易见,许多情绪都与目标机制有所关联。因此,这套面向目标的机制在人的智能运作中占有极其核心的地位。

图片

让我们通过一个简单的模型来描述该机制。首先,我们需要对这个世界有理解,因此我们会在脑中构建一个关于世界的模型。这个模型在结构化之后,就会变成了当前世界状态。而我们的目标是对应的一个目标世界状态。因此,人类就是在不停地消除当前状态和目标状态之间的差异,这个消除的过程就是目标驱动的过程。

在目标驱动的过程中,你开始尝试去解决这个问题,消除这个差异,你也可能有现成的解决方案,直接动用已有的解决方案执行已知的运动序列,也可能需要进行一定的思考,做出推理分析帮助你解决问题。

一旦你找到了一些执行序列,这些序列可能会变成一个子序列,子序列里有子目标。每个子目标的执行有可能是直接完成的,也可能需要进一步思考才能完成。正如我们可以看到,GPS这段代码就是在为了达成某一个目标而工作,它会遍历所有的目标,尝试让每一个目标都能够达成,一旦达成就结束。有兴趣的同学可以读一下这个代码,就是做暴力遍历找出达到目标状态的操作序列。

图片

不过,像GPS这种理想的解决方案在现实世界中可能并不奏效,因为真实世界的解空间过于庞大,想想AlphaGo的故事就理解了,这也是为什么虽然此想法在理论上看起来很好,但在实际操作时却无法实施。

但这种思考很有启发,在Newell和Simon1972年出版的《Human Problem Solving》一书中,他们研究了人类如何解决问题,并意识到我们经常进行手段-目的分析(means-ends)

举一个例子:

"我想把儿子送到幼儿园。我现在的状态和我想要的状态之间有什么区别?其中一个是距离。

是什么因素会改变距离?我的汽车。可是我的汽车坏了。要让它工作需要什么?一个新电池。

哪里能买到新电池?汽车修理店。我想让修理店为我安装一个新电池,但店里不知道我需要一个新电池。问题出在哪里?是沟通的问题。什么能让沟通变得容易?一部电话……以此类推。"

在计算机领域,有很多方法都与目标机制相关。例如,过程描述语言(PDL)就是一种经典的方法,主要用于解决机器人问题。我们可以描述世界上的对象,它们当前的状态是怎样的,目标状态是怎样的,有哪些可以采取的操作,然后我们可以基于这些操作,使用规划器寻找一个合适的运动序列来解决问题。

但在今天计算机领域的工程实践中,人们更多采用的是面向过程架构,无论是接口、函数、UI界面,还是组件,又或者是一个应用程序,都是以接口的形式存在的。而这个接口实质上是一种被调用的子流程,借此过程的完成,我们希望执行结果符合我们的预期,但程序并不为结果负责。它解决的是过程和流程问题,系统内没有目标的概念。

当然,也存在一些以目标导向为核心理念的的软件工程,例如声明式编程,它只需要你描述你想要什么,而无需关心执行的过程,像HTML和SQL便是其经典例子。在这样的架构下,程序能够自行寻找达成目标的方法。

然而问题在于,这种面向目标的架构只能应用于垂直领域,而无法普遍应用到所有领域,只有在特定的领域内才能发挥作用,这就限制了它的应用范围。

图片

总的来说,尽管面向目标架构在计算机领域有一席之地,但由于其只能在特定领域发挥作用,而无法解决所有领域的问题,因此它的应用还是有所限制,更多出现在特定的DSL(领域特定语言)中,这种架构的确也发挥了巨大的作用。在软件工程的范式迁移中,我们发现面向过程架构与面向目标架构之间的重要区别点:随着人类的生产方式的变化,软件工程可能正逐步演化为智能体工程(Agent Engineering);以前我们主导的生产方式是人类处于中心位,AI做辅助。而未来可能会变成以 AI 为中心,人类变为辅助。由此,整个产品形态和平台的构成可能会发生这样的转变。

在这一转变中,原本由人类主导的功能开发,逐渐演变为以智能体为主要驱动力。传统的用户界面,由于其垂直的任务层级架构,每一层都需要人类逐一生成,未来这个过程可能会被智能体自主生成并改良。此外,原本只能解决有限范围的任务,未来的架构则可以解决无限域的任务。就如同头条这样的平台,它是一个信息的分发平台。那么,是否会出现新的平台模式?比如一种知识和世界模型的分发平台。以前我们只能处理大量长尾数据,在未来可能能解决大量长尾任务。以前是廉价的规模化加昂贵的个性化,以后是廉价的规模化的个性化。

4. 前瞻性分析

根据上面的分析,我们能看到 Agent 技术在未来的发展还有很大的提升空间。我认为,这些提升主要可以从几个方向开始,包括引入中央执行机构、学习能力、输入感知、输出执行、世界模型和记忆等几个方面,这些构成因素是完备非正交的,都对提升 AI 技术至关重要。

图片

4.1 Central Executive

首先,中央执行机构,这是一个核心的概念,但常常被人们忽视。现在的 Agent 只是一个规划器,它负责做规划。但实际上,这个流程中还存在很多未明确的问题,比如,是否存在一个内部加工过程,以及这个过程是否透明可控等。一种可能的解决办法是,将内部加工过程外部化,用系统2包裹起来,使每一步细粒度的思考都可以展现出来。

图片

其次是世界模型,现在的大模型只能输入语言,显然这样是不够的,进一步理解世界需要多模态输入。这是我们在未来需要处理的关键问题。同样地,对于时间和自身的身体运动控制的认知也需要能够输入到大模型里面去。我们观察到,无论是自动驾驶汽车、大模型Agent,还是其他的诸多智能体模型,都已经在应用这种面向目标的架构。目前的挑战在于如何在细节上加以改进,如找出此架构未能完成某些任务的原因,以及这些缺陷是源于大模型底层的子任务能力不足,还是需要对框架本身做出改进,比如增加更多的思考层次,或加入更多的内部推演等。

另一个重要的问题是宏观注意力,由于大模型的上下文限制,是否可以让模型自身主动去探索外部世界,将其精力和注意力主动地投入到解答某些具有目标性的问题上去,实现主动的注意力机制?这不仅涉及到搜索和尝试的问题,如针对一些无法思考出解决方案的情况,模型应如何去进行尝试,而且这些尝试何时能够带来进步,以及如何去寻找更为优秀的解决空间,进行推理和规划。

4.2 Memory

值得注意的是,数学和逻辑学习也会涉及到上述问题,比如人类在很多情况下不擅长规划,那么我们是否可以利用网络和记忆机制来实现规划的功能?这其中就涉及到记忆的内化,也就是把大模型从外部世界获取的经验转化为内部参数,或者说把这些经验转化为内存。

图片

目前,我们依赖的记忆机制主要是把所有的信息存储在历史记录里,然后在需要的时候进行召回。然而,这些信息并未经过整理,在一些试图整理记忆的尝试中,我们发现人类是具有这种能力的。人类在获得大量相关的知识后,不会简单地把它们堆积在脑中,因为人的神经元存储空间是有限的。相反,人脑会通过海马体进行整理,而在我们做梦时,大脑会重新构造这些相关的知识,使得记忆网络变得有序。

然而,现在我们怎么去实现这种能力?目前还未见到具有遗忘功能的模型,也就是删掉一些垃圾信息或错误的信息。在大模型训练过程中,产生了许多无用甚至是错误的信息,而我们在工作中只是采用了许多方式来规避这些错误的信息,但为什么不试图去删掉它们呢?如果能够将这些信息替换为有价值的信息,那将是一件有价值的事。我注意到在人工智能领域中,对于长短时记忆与工作记忆,以及它们之间的关系讨论并不深入,更常见的是,人们将长短时记忆简化为向量数据库。我想解决这个问题,尝试对这两者进行深层次的理解,并建立更完备,更正交的关系也很重要。

4.3 Sensory

当人工智能Agent融入人类生活后,它与我们的体验和经历能否成为Agent自身的存储内容?如果可以,那么在未来,我们与Agent之间的互动将会变得更加实用,更加贴近现实生活,更加有温度。

图片

在输入的问题上,我明确地看到了多模态输入的必要性,同时,对于时间感知我认为也非常重要,时间性对于运动控制任务极其重要。引入多模态输入后,我们还要解决一个自上而下的机制问题,就是Projection启发的这个点,OCR嫁接术一定会在某类任务存在缺陷。

4.4 Motor

在交流方式上,我认为不应仅仅依赖于语言,虽然现在的交流基本都是基于语言的,但是,语言是一个低带宽且低效的通信工具。我在想,我们能否引入一种新的沟通方式 - 类似心灵感应的方式,让Agent在隐空间通信。

关于运动控制,当前的方式包括一些机器人应用,都比较结构化。但我认为,在未来,大模型的神经网络应该可以直接连接到运动控制的神经网络,实现层次化控制,使得运动更为流畅,甚至比人类更为灵活。

在另一方面,运动控制也应该是数据化的,而不是仅仅处于我们所说的”计划者“的层面。如果有一个命令下达,神经网络应该可以直接执行。

除此之外,还有一些亚符号的控制,在大模型直接对接神经网络时,我们应当避免通过语言来描述,因为我们可以通过这种方式得到的信息量会比通过语言描述来得多。

同时,也需要进行一些外部工具的优化,让现有的工具更适应我们的需求,比如一些愿意为了方便Agent调用进行改造的工具服务商将会在新的价值网络中占据一席之地,如一个旅游服务供应商,加入下一代Agent平台之后,Agent在完成用户旅游类任务时可能会有限调用它,并使用类似Web3的技术进行价值分配。

4.5 Learning

任何一个产品,或者说Agent,都需要学习。学习的过程是十分重要的,尤其是模型需要学会对自身的可靠性进行判断,知道自己知道什么,更重要的是,知道自己并不知道什么,不擅长什么,这将会对模型的发展产生重大影响。关于大型模型的优化,我认为最关键的问题就在于模型需要明确自己的能力范围。有些问题,大模型不能张口就来直接给出答案,过于逞能,它应该经过仔细的思考,保证任务目标的准确达成。

图片

同时,我们也需要考虑模型的权威性问题。大模型可能从互联网和垃圾信息中学到很多知识,但这并不意味着它在解决问题时能提供最权威、最佳的做法。我们需要把这个模型训练到,即使是在面对垃圾信息输入时,它也能输出更好的、更有价值的解决方案。

另一方面,我们还需要考虑到模型的多样性。很多时候,为了保证任务的有效执行,我们往往会控制模型的温度参数,以保持其输出的稳定性。但是,在保证模型正确性的同时,我们也不应该忽略它的思维活跃度。我们应允许智能体在解决任务时有更大的解空间,以便找到最优的解决方案。

4.6 World Models

关于世界模型 ,我们需要注意的是,尽管模型的训练数据中可能含有很多垃圾信息和错误信息,我们还需要让模型具有辨别和整理这些信息的能力,以构建一个无矛盾、统一的实体网络,这一点鲜被提及,我认为现在黯然神伤的之前做知识图谱的同学可以重点考虑一下这个方向。

在此基础上,我们还需要让模型具备推理能力。一个优秀的智能体不应该仅仅依赖于内部推理,而应该有能力借助外部推理,当然这个外部推理可以当做工具来使用。

最后,我们还必须强化模型的内部思考机制。当调用一些有成本的接口时,模型不能只是“想到就做到”,而应该有自我觉知的能力,或者叫Mental Simulation,预判自己的行动可能会带来的结果,并在内部进行纠错,以保证行动的可靠性,这不同于Reflection是执行后根据执行结果再反思。进一步,我们可能更大的关注点应该是它在家庭生活及现实社会中的应用上,将其实现为实体化的机器人,那么动力学机制和时间性认知还是很重要的,而当前的大模型仅是一个简单的循环调用,无法实现这方面的任务。

好,以上就是我对一些方向的浅显思考。

图片

最后,我们以伟人的一段话来结尾:Agent 技术,它是站在海岸遥望海中已经看得见桅杆尖头了的一只航船,它是立于高山之巅远看东方已见光芒四射喷薄欲出的一轮朝日,它是躁动于母腹中的快要成熟了的一个婴儿。

参考文献

  1. Wikipedia Agent. https://en.wikipedia.org/wiki/Intelligent_agent

  2. Intelligent Agents 综述. https://vsis-www.informatik.uni-hamburg.de/getDoc.php/publications/373/INTELLIGENT_AGENTS_v7_final.pdf

  3. Prompt经典收集。https://github.com/f/awesome-chatgpt-prompts

  4. LLM+P: Empowering Large Language Models with Optimal Planning Proficiency

  5. https://github.com/Cranial-XIX/llm-pddl

  6. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

  7. Self-Consistency Improves Chain of Thought Reasoning in Language Models

  8. Tree of Thoughts: Deliberate Problem Solving with Large Language Models

  9. Graph of Thoughts: Solving Elaborate Problems with Large Language Models

  10. Cumulative Reasoning with Large Language Models

  11. ReAct: Synergizing Reasoning and Acting in Language Models

  12. Reflexion: Language Agents with Verbal Reinforcement Learning

  13. https://openai.com/blog/function-calling-and-other-api-updates

  14. 人大综述https://arxiv.org/pdf/2308.11432.pdf

  15. 复旦综述 https://arxiv.org/pdf/2309.07864.pdf

  16. https://github.com/Significant-Gravitas/AutoGPT

  17. https://github.com/microsoft/JARVIS

  18. HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face

  19. GPT-Researcher https://github.com/assafelovic/gpt-researcher

  20. RecurrentGPT https://arxiv.org/abs/2305.13304

  21. Voyager https://arxiv.org/abs/2305.16291

  22. https://github.com/OpenBMB/XAgent

  23. 斯坦福小镇代码 https://github.com/joonspk-research/generative_agents

  24. 斯坦福小镇论文 Generative Agents: Interactive Simulacra of Human Behavior

  25. MetaGPT代码 https://github.com/geekan/MetaGPT

  26. MetaGPT论文 https://arxiv.org/pdf/2308.00352.pdf

  27. https://github.com/OpenBMB/ChatDev

  28. https://github.com/OpenBMB/AgentVerse

  29. https://arxiv.org/pdf/2307.07924.pdf

  30. Agents: An Open-source Framework for Autonomous Language Agents

  31. https://lilianweng.github.io/posts/2023-06-23-agent/

  32. Phase transitions of brain evolution that produced human language and beyond

  33. A Review of 40 Years in Cognitive Architecture Research Core Cognitive Abilities and Practical Applications

  34. LIDA: A Computational Model of Global Workspace Theory and Developmental Learning

  35. https://hal.science/hal-03311492/document

  36. https://ai.meta.com/blog/yann-lecun-advances-in-ai-research/

  37. Projection: A Mechanism for Human-like Reasoning in Artificial Intelligence

  38. https://en.wikipedia.org/wiki/Planning_Domain_Definition_Language

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

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

相关文章

Java异常:toString()和getMessage()区别

首先写了两个错误 Controller public class DemoController {RequestMapping("/show1")public String showInfo(){String str null;str.length();return "index";}RequestMapping("/show2")public String showInfo2(){int a 10/0;return &quo…

java多线程(并发)夯实之路-synchronized锁升级深入浅出

轻量级锁 使用场景:一个对象有多线程访问,但时间是错开的(如果多线程同时访问,也就是有竞争的,会升级为重量级锁) 轻量级锁对使用者是透明的,语法仍是synchronized 例: 以上的代码…

天津Java开发培训哪家好?选Java培训班要考虑

在当今社会,Java语言在软件开发领域具有举足轻重的地位,Java是一门面向对象编程语言,Java语言集合了C的优点,丢弃了缺点,所以Java语言表现的功能强大而简单易用,已经得到越来越多的应届毕业生和职场新人的认…

智慧公厕创造智能、整洁、舒适环境,让“方便”更方便

在现代城市建设中,智慧公厕已成为一项热点技术。通过物联感知、云管理数据处理和人性化智能设备的融合,智慧公厕让我们的“方便”变得更加方便。不仅实时感知和监控公共厕所的情况,还提升管理效率,为市民提供更人性化的服务。智慧…

Authing 入选中国信通院《 2023 高质量数字化转型产品及服务全景图》

近日,中国信通院“铸基计划”发布了《高质量数字化转型产品及服务全景图( 2023 )》。Authing 身份云成功入选 IT 维护与运营领域并获得证书。 “十四五”时期,我国数字经济转向深化应用、规范发展、普惠共享的新阶段,数字化转型已成为传统企业…

STM32——电容触摸按键充电时间测量实验

1电容触摸按键 无手指触摸:上电时,电阻作用下,电容Cs进行充电,直到电容充满,这时候会有一个充电时间Tcs。 有手指触摸:上电时,电阻作用下,电容Cs和Cx进行充电,电容充满时…

2719. 统计整数数目

给你两个数字字符串 num1 和 num2 &#xff0c;以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件&#xff0c;我们称它是一个好整数&#xff1a; num1 < x < num2min_sum < digit_sum(x) < max_sum. 请你返回好整数的数目。答案可能很大&#xff…

jquery(一)

目录 &#x1f338;基本使用 &#x1f341;两大特性 &#x1f338;操作文档 &#x1f338;样式操作 &#x1f338;属性操作 &#x1f338;文档操作 &#x1f341;内部追加 &#x1f340;原来界面 &#x1f340;追加后界面 &#x1f341;外部追加 &#x1f340;原来界…

进阶Docker2:数据卷和挂载目录

目录 准备 删除容器 创建并运行一个容器 数据卷&#xff08;Volumes&#xff09; 挂载数据卷 虚拟机端口映射 挂载目录&#xff08;Bind mounts&#xff09; 挂载目录 挂载文件 部署在线项目 docker 在容器中管理数据主要有两种方式&#xff1a; - 数据卷&#xff0…

陪诊小程序开发|陪诊软件定制|陪诊系统成品功能包含哪些?

陪诊小程序是一种便捷的工具&#xff0c;为用户提供一系列服务和功能&#xff0c;方便患者在就医过程中获得更好的体验和效果。接下来我们将介绍几个主要的陪诊小程序功能。 陪诊小程序开发功能&#xff1a; 一、预约挂号功能。陪诊小程序能够连接用户和医疗机构的系统&#x…

ART-Adversarial Robustness Toolbox检测AI模型及对抗攻击的工具

一、工具简介 Adversarial Robustness Toolbox 是 IBM 研究团队开源的用于检测模型及对抗攻击的工具箱&#xff0c;为开发人员加强 AI模型被误导的防御性&#xff0c;让 AI 系统变得更加安全&#xff0c;ART支持所有流行的机器学习框架 &#xff08;TensorFlow&#xff0c;Ker…

什么是JAVA的包装类?用了有什么好处?

目录 一、包装类概述 二、包装类和基本数据类型的转换 三、使用包装类的ValueOf方法 四、基本类型和包装类的自动转换 一、包装类概述 Java的包装类是为了方便操作基本数据类型而提供的类。Java的基本数据类型&#xff08;如int、char、boolean等&#xff09;是非对象的&a…

【备战蓝桥杯】——Day1

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-xKn7nmq36s9pgUXR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

Django教程第4章 | Web开发实战-三种验证码实现

系列&#xff1a;Django学习教程 验证码的存在是为了防止系统被暴力破解攻击&#xff0c;几乎每个系统都有验证码。下面将介绍三种生成验证码方式。 您可以根据你自己的需要进行学习。 手动生成验证码 安装绘图依赖&#xff0c;利用的是画图模块 PIL 以及随机模块 random 在后…

python解决求最短路径、最短时间问题

对于一个求最短路径的经常遇到的问题&#xff0c;对于从某一个节点到其余全部节点所需要的最短时间的问题&#xff0c;可以使用广度优先搜索算法的思路来进行解决&#xff0c;这是一个广度优先搜索算法在二维空间的应用。 问题描述为给定一个节点总数为N和一个列表list&#x…

fastadmin答题考试系统开源二次开发带拍照搜题版本

应用介绍 应用介绍 一款基于FastAdminThinkPHPUniapp开发的小程序答题考试系统&#xff0c;提供全部前后台无加密源代码&#xff0c;支持私有化部署 前端截图&#xff1a; 后台截图&#xff1a; 功能介绍&#xff1a;

LeetCode 每日一题 Day 37-43

终于考完试了&#xff0c;寒假期间将会每天持续更新&#xff01; 447. 回旋镖的数量(Day 37) 给定平面上 n 对 互不相同 的点 points &#xff0c;其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 &#xff0c;其中 i 和 j 之间的欧式距离和 i 和 k 之间的欧…

颜色对话框 QColorDialog

1. 颜色对话框 QColorDialog 1.1 基本函数 QColor getColor(const QColor &initial Qt::white, QWidget *parent nullptr, const QString &title QString(), QColorDialog::ColorDialogOptions options ColorDialogOptions())返回值&#xff1a;QColor&#xff0c;…

SpringBoot+SSM项目实战 苍穹外卖(11) Apache ECharts

继续上一节的内容&#xff0c;本节学习Apache ECharts&#xff0c;实现营业额统计、用户统计、订单统计和销量排名Top10功能。 数据统计效果图&#xff1a; 目录 Apache ECharts入门案例 营业额统计用户统计订单统计销量排名Top10 Apache ECharts Apache ECharts 是一款基于 …

使用 Clojure 进行 OpenCV 开发简介

从 OpenCV 2.4.4 开始&#xff0c;OpenCV 支持使用与 Android 开发几乎相同的接口进行桌面 Java 开发。 Clojure 是由 Java 虚拟机托管的一种现代 LISP 方言&#xff0c;它提供了与底层 JVM 的完全互操作性。这意味着我们甚至应该能够使用 Clojure REPL&#xff08;Read Eval …