清华发布工具学习框架,让ChatGPT操控地图、股票查询,贾维斯已来?

news2024/11/18 5:48:41

7e9fbed94e18c7e46e28d673785627a6.png

文|小戏

首先来考大家一道初中历史题:人区别于动物的根本标志是什么?书上的标准答案是人会制造与使用工具。那么再来一道思考题,如果 AI 会使用甚至会制造工具了以后,会发生什么呢?是像贾维斯一样的 AI 私人助手?还是科幻片里按下核弹发射按钮的 AI 机器人?

46ed6a05b87f134f76c3d620e0ab0ce7.png

最近,清华浩浩荡荡的研究天团放出了一篇长达 74 页的论文 《Tool Learning with Foundation Models》,详述了以 GPT-4 为代表的大规模语言模型(基础模型)如何更好的和现有的专业工具相结合,使得基础模型学会去操作与使用工具。并依此定义了一个新的研究领域——工具学习,研究如何更好的将专业工具和基础模型的优势相互结合,大幅增强 AI 在专业领域的问题解决能力。

88a92571979480ed4da121e1077089d3.png

论文从工具本身以及大模型的基础定义出发,详细阐释了专业工具与基础模型结合的巨大优势,并依次系统的定义了工具学习的框架,明确了工具学习需要解决的核心问题,并为我们如何去训练与泛化一个工具学习的模型提出了一些经营层面的指导。最重要的是,论文还开源了自己构建的一个可以使用涵盖日常生活中方方面面工具的工具学习模型,帮助我们更好的理解工具学习面对的主要问题和现在的能力水平。那么话不多说,上论文!

论文题目:

Tool Learning with Foundation Models

论文链接:

https://arxiv.org/pdf/2304.08354.pdf 

开源代码:

https://github.com/OpenBMB/BMTools

1. 什么是工具?什么是工具学习?

工具,是人类为解决生产生活中遭遇的问题并提升生产力而创造的扩展人类自身能力的设备。从百万年前直立人手中的锤子,到如今科学实验室里复杂精密的仪器设备,工具使得人类做到了许多令人类自身都无法设想的伟大成就,也是人类智慧最杰出的代表。

从使用者的角度而言,工具大体可以被分为三类——物理交互工具、GUI驱动工具以及基于程序的工具。物理交互工具是我们最常见也是最常用的工具,刀子锤子斧子再到复杂的机械臂机器人,我们与工具大量的互动方式都是物理上的直接使用。当然对许多复杂的工具而言,尽管其使用方式主要是物理的,但是通常也提供了使用 GUI 或程序去操作的可能性。而使用 GUI 的工具往往是允许用户通过交互式的界面预定义的操作去使用它们,最典型的代表就是大量成熟的商业软件,如浏览器、Microsoft Office、Adobe PhotoShop等等。最后一类是基于程序的工具,通过使用代码的方式调用与控制这些工具,具有高度的灵活性与可定制性。

91a52bedd207d04306251a2fac477728.png

工具的出现使得人们人类可以更轻松、更高效的完成复杂任务,从而解放了时间与资源去更多的探索这个世界更大的可能性。一直以来,人类本身都是这些复杂仪器最好的“代理人”,但是伴随着大规模语言模型——在这篇论文中被称为基础模型(Foundation Models)的出现,我们惊讶的发现基础模型可以完成许多精密的语义理解与输出决策的能力。正如小屋之前的一篇关于卡耐基梅隆大学做出的基于 GPT-4 的自主实验智能体的介绍一样(又一恐怖技能!卡耐基梅隆大学发布超强智能体,炸翻科研圈),以 GPT-4 为代表的大规模语言模型可以出色完成许多操作工具、阅读工具说明书乃至自我纠错的工作,这使得我们可以开始畅想,GPT-4 是否已然具有了和人类一样使用和操作复杂机器的能力

cb48c36f42cec13b6d9e867656d9fc5c.png

因此,这篇论文应运而生,提出了一个新的研究领域——工具学习,旨在让类似 GPT-4 的大规模语言模型学会如何去更好的使用专业工具,从而极大增强模型在专业领域的应用能力,解决复杂的实际问题

但是显然,工具学习本身面临着很多的问题,让 GPT-4 去操作复杂精密的仪器与让它去理解弱智吧提出的脑筋急转弯甚至去解鸡兔同笼是两种难度截然不同的任务。首先,工具操作的知识是隐式的、模糊的,甚至是不可表述的。哪怕一些工具拥有详细的说明书或开发文档,但是仍然有许多经验性的技巧是无法被明确阐释的,因此如何准确地捕获和表示这种知识是一个难题。其次,利用工具去解决一个复杂现实问题实质上是一个序贯决策的问题,在不同状态下的不同动作可以能会产生完全相同亦或截然相反的结果。因此如何从不同的序列中准确地预测下一步操作也是一个难题。此外,在操作工具的过程中有极大可能会出现不同的错误,基础模型如何去捕捉并纠正错误也是一个极其重要的问题

当然,一旦提出了问题,我们就有可能找到问题的答案。除了解决问题之外,我们也应该看到基础模型的工具学习带给我们极大的想象空间。譬如工具学习有能力将 AI 系统由传统的被动反应型转变为主动利用型,从而可以适应一系列的任务,一旦工具学习问题可以被良好的解决,无疑有可能是人类生产生活中的又一次工业革命

2. 工具导向学习与工具增强学习

从某种程度而言,工具与基础模型是高度互补的。一般而言,工具具有诸如缓解记忆负担,将高度复杂的运算抽象为一个接口而减轻记忆成本,增强专业知识,满足特定领域的需求,高度可解释性,高度鲁棒性等优势。而相对于基础模型而言,尽管它展现了不错的记忆性,但是显然无法与专业化的工具相比,但是如果利用它本身决策制定和推理的能力让它学会如何利用工具,那么将会极大的增强基础模型的能力。同时,专业工具高昂的学习成本与基础模型 Prompt 驱动的使用方式使得基础模型可以为使用者带来更好的用户体验,初学者可以快速的掌握并开始使用新工具,而不需要先验的专家知识。同时,模型对工具的使用也可以在一定程度上增强对基础模型行为的可解释性,让基础模型更好的服务于人类。

4e697f0f37c6e92013ff9277e02ab42e.png

具体而言,这篇论文将基础模型与使用工具融合的工具学习分为两大类,分别是工具增强学习与工具导向学习。如上图所示,工具增强学习的主要目标是扩展原有工具的能力,突破原有工具的限制。最典型的就是检索增强的学习,例如 New Bing,通过将基础模型与现有工具融合,从而使得现有工具获得更好的性能。

而工具导向学习则侧重于是模型学会如何去使用工具,这种模型侧重于开发可以综合管理和使用工具的基础模型,从而在一定程度上代替人类进行序贯决策,完成许多任务。一般而言,可以分为命令生成,即生成操作特定工具的具体指令,如 Shell 命令,Python 脚本等;操作推荐,即基于用户的行为为用户下一步的操作做出推荐,譬如智能的代码补全、代码块推荐等;策略制度,即一体化的操作不同设备完成综合的工具,如之前介绍的实验智能体,这种学习也是三类中难度最大的一种,必须考虑不同操作之间的相互关系与操作顺序影响。

3. 全面理解——正式的工具学习定义

工具学习由工具集、环境、控制器、感知器四个模块组成。其中工具集即包含不同功能的不同工具的集合,一般而言,工具集中的工具可以具有不同的接口,但是这种接口往往可以被利用某种方式实现统一,在论文中作者们主要使用 API 作为交互手段,将工具理解为输入输出的黑盒。环境是指工具所操作的外部世界,环境通过提供感知器来向工具使用者传递工具操作的执行结果,类似强化学习,这种环境可以是虚拟的也可以是现实的,但是显然,现实环境会带来更大的访问成本与实验成本。控制器是工具学习框架中的“大脑”,一般就是使用基础模型训练得到的大规模语言模型,控制器需要解决的是理解用户(也就是人类 Prompt 的意图)并与工具集建立连接,决策出使用策略与工具的使用计划。在复杂的任务场景中,甚至需要将大问题切割为不同的子问题完成复杂问题的解决方案输出。最后,感知器主要负责处理工具操作与环境的互动形成的反馈,通过读入这些反馈为控制器生成信号或摘要,指导控制器下一步的行动。譬如当程序报错时,应该反馈给控制器以报错信息帮助控制器进行自我纠错。

1c8484640b27fec622dd240bf070da08.png

现在,假设我们拥有工具集 ,在时间步 ,通过感知器获取到了工具执行的反馈   并生成了报告给控制器  的信号摘要 。控制器从而生成计划  ,这一过程可以被表示为:

其中  表示控制器  的参数, 表示用户输入的 Prompt, 表示历史的反馈和历史的计划。更进一步的,上边右式还可以被分解为与工具集相关,即表示为:

通过这部分解可以发现,工具学习可以被拆分为两个任务,分别是基于用户意图选择适当的工具和基于所选工具决策待执行的操作。例如,给定指令“我想预订下周去北京的飞机票”时,控制器  首先推断出用户的目标是预订一张飞往北京的机票,旅行时间是下周。然后,模型选择某航空公司预订系统作为工具完成工具选择阶段。最后,将时间和目的地输入初步计划完成第二个子任务。

良好的工具学习模型必须需要具有纠错的能力,譬如如果下周没有飞往北京的航班,控制器必要可以接受到这一信息并生成替代的计划。在执行计划  后在  中执行,并将  的反馈结果  传递给感知器,由感知器生成报告传递给控制器,重复多轮直至完成任务。

从上面这个简单的例子可以看出,工具学习的核心是处理上述四个组件之间复杂的相互作用,具体而言,其核心任务有:

理解意图/理解工具集

控制器本身必须要准确的解读用户传递的 Prompt,并理解传递的 Prompt 代表的用户的意图,这是 NLP 领域的核心任务,而目前大规模语言模型在意图理解上做的已经相当不戳,但是这里面依然存在的 Gap 是意图空间几乎是无限的,但是基础模型本身只能学习到有限的意图,因此对于模糊的意图如何分析以及个性化多样化的意图如何理解仍然是一个问题。而工具理解需要控制器明白工具集中不同工具真正的功能与用途,这一方式可以通过让基础模型阅读工具集中工具的“说明书”来实现。

b722a2d2fb948e4d13103464ae7f7904.png

如上图所示,作者们提供了两种学习工具知识的方法——Zero-shot 与 Few-shot。通过 Prompt 的方式促使感知器学会去阅读并获取工具文档的知识。这两种方法最大的好处是可以很好的适应工具文档的快速更新,调整模型的行为,然而其主要问题在于这种学习工具文档的方式非常受 Prompt 输出长度与工具集大小的制约。

生成计划——推理能力

理解意图与理解工具只是完成工具学习的基础,真正的关键核心在于如何完成对意图和工具的匹配,这也是工具学习的核心任务之一。大规模语言模型已经展现了不错的完成这一任务的能力,有许多任务,诸如智能代码编写,视觉 ChatGPT 等例子的成功应用都展现了基础模型的推理能力。

a23d61a9754e0866abbbb9a5abd240d7.png

但是工具学习真正具有挑战的地方并不在于如上图左图所示的单步的计划生成与推理,而是在于如上图右图展示的多步计划生成与推理。人类完成复杂任务时不会只单单使用一个工具,而是将复杂任务拆分为不同的子任务,多步迭代的完成一个复杂任务。这就对大模型的能力提出了全新的挑战,多步的推理任务要求基础模型可以做到:

  • 理解不同工具之间的相互作用

  • 同时拥有顺序使用与并行使用工具的能力

  • 从单一控制器到多控制器的协作

4. 如何更好的训练与泛化工具学习?

想象一下一个婴儿学会使用工具的场景——主要是通过对成人操作的模仿以及一定程度上自己的探索。因此,非常传统的,工具学习的训练方法也主要分为需要人工注释的模仿学习与更具有探索性的强化学习。利用专家知识的模仿学习可以被符号化的定义为:

其中  指我们拥有的专家知识数据集。这套训练策略可以沿着监督学习——半监督学习——自监督学习的思路向前发展。

而强调探索性的强化学习的方法可以被符号化的定义为:

其中,对于控制器参数的更新主要来自于由原始控制器参数  生成的一系列轨迹获得的奖励指导。如大模型的训练方法一样,这种奖励信号可以来源于环境反馈也可以来源于人类反馈,需要综合考虑任务类型进行恰当的选择。

另一方面,从某种程度而言,工具集也可以是一个近似无限的集合,那么这也就对工具学习的泛化能力提出了挑战。正如人类一样,人类只要学会使用了一把锤子,那不论这把锤子的锤柄锤头如何变换,人类都可以完成对不同锤子的使用。同时,人类在不同工具间的使用经验也可以被泛化,如人类在使用剑的时候学会了刺的动作,那么在使用长枪时也可以泛化使用刺的动作,因此工具学习模型如何扩大自己的通用能力便至关重要

通用的工具学习需要强调抽象的重要性,即识别工具的基本特征。譬如当工具学习模型学会了使用 Photoshop,那么关于 Photoshop 图层、色彩调整等的只是就应该可以迁移到其他图像软件之中。而这一步骤很可能单靠模型本身是很难完成的,因此需要我们去设计一个通用的界面或协议统一工具集,使得工具学习模型可以在这个统一工具集的基础上识别抽象工具的基本特征,并快速适应新的工具的出现,类似于对工具的分类,这种统一工具的设计也可以分为三类:

  • 语义界面:将工具动作与特定的文本段落相统一,把特定的文本段落作为动作触发器,充分利用基础模型语义理解的能力;

  • GUI界面:搭建一个所有工具集共享的 GUI 界面,辅助模型与不同工具进行交互;

  • 编程页面:统一使用代码语言作为与工具交互的方式。

通用的工具学习也应该考虑更加高效的学习与迁移知识,作者仍然考虑了两种潜在的实现通用化的策略方案:

  • 元工具学习(Meta Tool Learning):模型能够反思自己的学习过程并在必要时调整新的工具使用策略;

  • 课程工具学习(Curriculum Tool Learning):通过课程学习逐步向模型介绍更复杂的工具以便其建立在先前的基础上,并深入了解工具的方法来提高模型的泛化效果

5. 实验

通过利用现有的大规模语言模型的 API 以及相关工具,论文给出了一系列实验验证当前工具学习的能力与局限。论文选取涵盖翻译器、计算器、地图、游戏、绘画、烹饪、化学、股票查询、天气查询、幻灯片制作、表格处理、搜索引擎、维基百科、知识图谱、亚马逊购物、3D建模、电影搜索共 17 个有代表性的工具进行试验

c7384ef2caa8496aabe510da85d71a52.png

论文作者使用工具学习的框架集成并实现了操纵这 17 个工具的工具学习模型,并且划重点开源在了 BMTools 这个代码仓库中。这个模型的控制器主要由 text-davinci-003 以及 ChatGPT 进行实现。对如机器翻译、计算、搜索引擎等任务,作者使用现有的数据集进行测试,而对于一些不存在数据集的任务,作者通过手动收集编写了用户查询作为示例。具体结果如上图所示,可以发现在大多数情况下,模型可以学会如何有效地使用工具,以及如何提高任务表现

而对于一些模型本身自己就可以完成的任务,如翻译与计算而言,往往模型的结果总是劣于工具的结果,这也从侧面反应了使用工具的必要性。此外,比较 ChatGPT 和 text-davinci-003 的性能,可以观察到有时 ChatGPT 效果并不如 text-davinci-003 的效果好。这可能是因为 ChatGPT 为了照顾生成能力削弱了它的上下文学习的能力,同时,作者也猜测有可能 ChatGPT 模型要比 text-davinci-003 要小,从而难以处理复杂的情况。

而对比不同的工具,可以看到例如地图、绘画、天气查询、幻灯片与表格的制作及处理、烹饪助手等任务展现了对比其他工具更好的效果,因此从经验上将,可以认为在没有经过微调的情况下 text-davinci-003 和 ChatGPT 能更熟练的使用这些工具。但对于如维基百科、知识图谱、亚马逊购物、3D建模等任务,即使使用了 Few-shot 的方法,但是效果依然不佳,这有可能是模型在工具理解这一环节出现了问题,使得模型并没有熟练的掌握这些工具的使用方法

6. 结论与讨论

无疑,工具学习这个概念的提出只是一个开始,但是这更需要我们深入看到蕴藏在这个概念背后大模型无穷的潜力,“AI 有可能可以创造工具吗?”,“我们有可能制造出更加便于 AI 使用的工具吗?”,“AI 与工具的交互会催生出具有具身性的人工智能吗?”。而另一方面我们也应该要看到,工具学习背后所可能存在的潜在问题,比如“哪些工具应该允许被 AI 使用,哪些工具不应该允许被 AI 使用?”,“当模型本身的知识和工具使用出现冲突了应该如何解决?”,“工具学习得到的智能体在如自动驾驶及临床医疗场景下真的具有鲁棒性和安全性吗?”等等

基于此,论文提出了几条开放问题供我们讨论与思考:

  • 如何在“模型自己解决”与“寻求使用工具”间找到一个平衡点,即模型如何判断什么时候使用自己的能力(如翻译、计算等),什么时候需要求助于工具?

  • 对工具性能的掌握程度可以成为下一个评定 AI 智能程度的评判标志吗?

  • 在工具学习框架下,人与智能体如何更好的协作?如何规避内涵的道德风险问题?

  • 基础模型使用工具的安全性问题应该如何解决?

  • 工具学习有能力在科学研究中发现某些新的现象吗?

  • ……

一切还只是个开始,但是我们已然可以看到未来已来的曙光。钢铁侠中针对个性化 AI 最极致的幻想贾维斯或许也正以一种我们没有意识到的速度向我们飞奔而来。工具学习尚且是一个刚刚被开发与定义的领域,尚且有许多工作等待我们去开垦与播种,希望最后开花结果,变成一个真正的 AI 私人助手吧!

5e451211afff8e38091788639cfc6beb.png

6f904023aa885668a0aa5fac88dc51ee.png卖萌屋作者:小戏

在商学院学优化搞算法读哲学的兼职NLP新闻写手~

作品推荐

  1. 神网站PaperWithoutCode:举报无法复现的论文,让一作社死??

  2. NLP哪个细分方向最具社会价值?

  3. 吴恩达发起新型竞赛范式!模型固定,只调数据?!

  4. 仅仅因为方法 Too Simple 就被拒稿,合理吗?

  5. 忘掉Xavier初始化吧!最强初始化方法ZerO来了

56fa3c09def5c18f4c863abae20baefe.jpeg后台回复关键词【入群

加入卖萌屋NLP、CV、搜推广与求职讨论群

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

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

相关文章

【Java基础】day16

day16 一、switch-case 和 if-else 谁更快? switch-case 在 switch-case 中,case 的值是连续的话,会生成一个 TableSwitch 来进行优化,这样的情况下,只需要在表中进行判断即可。 这里使用 0-4 的连续值来进行测试 如…

UE4: Niagara系统实现雨天效果,并跟随人物移动

目录 创建雨丝Niagara系统雨丝跟随人物移动 创建雨丝Niagara系统 1.创建一个Niagara系统 选择Fountain选项,点一下加号,再点完成: 命名一下打开: 先从粒子生成的方向入手,在Niagara的界面中删掉“Add Velocity in…

springboot+vue小区物业管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的小区物业管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

C11新特性之Lambda表达式

一.lambda语法 优点: 1.可以定义简短的函数。 2.使用lambda表达式使代码更紧凑,可读性更好。 语法: []表示不捕获任何变量[this]表示值传递方式捕捉当前的this指针 [&]表示引用传递方式捕捉所有父作用域的变量(包括this&…

[架构之路-170]-《软考-系统分析师》-5-数据库系统-1-数据库模式、数据模型、数据库访问的标准接口

在当今的知识经济时代,信息是经济发展的战略资源,信息技术已经成为社会生产力中重要的组成部分。人们充分认识到,数据库是信息化社会中信息资源管理与开发利用的基础,当今的计算机信息系统也都以数据库技术为基础。对于一个国家来…

Linux DNS服务

DNS 作用 DNS是 域名系统 的英文缩写,作为将域名与IP地址相互映射的一个分布式数据库,让人可以通过域名访问互联网 正向解析 将域名解析为IP反向解析 根据IP查找对应域名 域名结构 http://www.sina.com.cn./ http://主机名.子域.二级域.顶级域.根域 / 每…

【Linux学习】信号——预备知识 | 信号产生 | 核心转储

🐱作者:一只大喵咪1201 🐱专栏:《Linux学习》 🔥格言:你只管努力,剩下的交给时间! 信号 🔔信号🎵预备知识🎵信号处理方法的注册 🔔信…

C/C++每日一练(20230421)

目录 1. 位1的个数 🌟 2. 递归和非递归求和 ※ 3. 俄罗斯套娃信封问题 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 位1的…

大数据技术之Kafka——Kafka入门

目录 一、概述 1.1 为什么要有Kafka ​编辑 1.2 定义 1.3 消息队列 1)消息队列的应用场景 2)消息队列的两种模式 1.4 基础架构 二、Producer生产者 2.1 生产者消息发送流程 2.1.1 发送原理 2.2 异步发送API 2.2.1 普通异步发送 2.2.2 带回调…

第八章_Redis复制(replica)

是什么 官网地址 一句话 就是主从复制,master以写为主,Slave以读为主 当master数据变化的时候,自动将新的数据异步同步到其它slave数据库 能做什么 读写分离容灾恢复数据备份水平扩容支撑高并发 怎么使用 配从(库)不配主(库) 权限细节&am…

YOLOv8 更换主干网络之 MobileNeXt

《重新思考瓶颈结构以实现高效移动网络设计》 倒置残差块成为了移动网络架构设计的主流。它通过引入学习倒置残差和使用线性瓶颈的两个设计规则,改变了经典的残差瓶颈。在本文中,我们重新思考了这种设计改变的必要性,并发现它可能会带来信息丢失和梯度混淆的风险。因此,我们…

助力工业物联网,工业大数据之ODS层构建:代码结构及修改【九】

文章目录 01:ODS层构建:代码结构及修改02:ODS层构建:连接代码及测试03:ODS层构建:建库代码及测试04:ODS层构建:建表代码及测试 01:ODS层构建:代码结构及修改 …

漏扫常见(可验证)漏洞复现方法

SSL/TLS协议信息泄露漏洞(CVE-2016-2183) 检测到目标服务支持SSL弱加密算法 检测到目标服务支持SSL中等强度加密算法 nmap -sV -p 端口 --script ssl-enum-ciphers 目标ipSSH支持弱加密算法 nmap -sV -p 端口 --script ssh2-enum-algos 目标ipApache Tomcat示例脚本信息泄露…

YOLOv8 更换主干网络之 ShuffleNetv2

《ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design》 目前,神经网络架构设计多以计算复杂度的间接度量——FLOPs为指导。然而,直接的度量,如速度,也取决于其他因素,如内存访问成本和平台特性。因此,这项工作建议评估目标平台上的直接度量,而…

Vue 表单

文章目录 Vue 表单输入框复选框单选按钮select 列表修饰符.lazy.number.trim Vue 表单 这节为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 输入框 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框 实例中演示…

Maven(二)高级操作

目录 一、分模块开发与涉及(重点)1.工程模块划分2.modules_common拆分3.modules_pojo拆分4.modules_dao拆分5.modules_service拆分6.modules_controller拆分7.总结 二、聚合(重点)1.多模块构建维护2.聚合 三、继承(重点…

HTML5 <param> 标签、HTML5 <progress> 标签

HTML5 <param> 标签 实例 HTML5 <param>标签为<object>标签提供嵌入内容的运行时参数的name与value对。请参考下述示例&#xff1a; 设置参数 "autoplay" 为 "true"&#xff0c;音频载入后会自动播放&#xff1a; <object data&qu…

基于AT89C51单片机的电子时钟设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87695258?spm1001.2014.3001.5503 源码获取 主要内容&#xff1a; 1.设计出电子数字钟的电路&#xff0c;并用protus进行仿真画出对应的电路图 2.设计出电子数字钟…

2021地理设计组二等奖:基于GIS的东江源区土壤侵蚀及其影响因素空间分析

一、作品背景 水土保持情况普查对我国具有重要意义。我国目前是世界上水土流失最严重的国家之一&#xff0c;水土流失面积极其广且量大&#xff1b;严重的水土流失问题是我国生态环境问题的重要板块&#xff0c;若是持续恶化&#xff0c;将会严重影响我国的生态安全、饮水安全…

不得不说的创建型模式-抽象工厂模式

抽象工厂模式是一种创建型模式&#xff0c;它提供一个接口来创建一系列相关或相互依赖的对象&#xff0c;而不需要指定它们的具体类。这个接口被称为“抽象工厂”&#xff0c;它可以被不同的具体工厂实现来创建不同的产品族。 下面通过一个简单的示例来说明抽象工厂模式的底层原…