大模型GUI系列论文阅读 DAY1:《基于大型语言模型的图形用户界面智能体:综述》

摘要

图形用户界面(Graphical User Interfaces, GUIs)长期以来一直是人机交互的核心,为用户提供了直观且以视觉为驱动的方式来访问和操作数字系统。传统上,GUI交互的自动化依赖于基于脚本或规则的方法,这些方法在固定工作流中虽行之有效,但缺乏动态和实际应用场景中所需的灵活性和适应性。大型语言模型(Large Language Models, LLMs),尤其是多模态模型的出现,开启了GUI自动化的新纪元。这些模型在自然语言理解、代码生成、任务泛化以及视觉处理方面展现出卓越能力,为新一代“以LLM为大脑”的GUI智能体奠定了基础。这些智能体能够理解复杂的GUI元素,并基于自然语言指令自主执行操作,标志着一种全新的范式转变,使用户能够通过简单的对话命令完成复杂的多步骤任务。它们的应用涵盖了网页导航、移动应用交互以及桌面自动化,为用户体验带来革命性变革,重新定义了人与软件的交互方式。

这一新兴领域正在快速发展,无论在研究还是工业界都取得了显著进展。为了提供对这一趋势的系统性理解,本文对基于LLM的GUI智能体进行了全面综述,探讨了其历史演变、核心组件及其高级技术。我们关注以下关键研究问题:现有的GUI智能体框架、用于训练专业GUI智能体的数据收集与利用、针对GUI任务的大型动作模型的开发,以及评估其有效性所需的评价指标与基准。同时,我们还审视了由这些智能体驱动的新兴应用。通过详细分析,本文识别了关键研究空白并制定了未来发展的路线图。通过整合基础知识和最前沿的研究进展,本综述旨在指导研究人员和实践者克服挑战,释放LLM驱动的GUI智能体的全部潜能。

我们希望本综述既能作为构建LLM驱动GUI智能体的实践手册,也能作为推动该领域研究的权威参考。综述中提到的论文集合将托管在GitHub仓库(https://github.com/vyokky/LLM-Brained-GUI-Agents-Survey)上,并定期更新。此外,还提供了一个便于访问与探索的可搜索网页(LLM-Brained GUI Agents Survey)。

关键词
大型语言模型、图形用户界面、人工智能智能体、自动化、人机交互

1 引言
图形用户界面(Graphical User Interfaces, GUIs)一直是人机交互的基石,从根本上改变了用户在数字系统中导航和操作的方式 [1]。GUI 的设计旨在让计算更加直观和易于访问,用以视觉驱动和用户友好的环境替代了命令行界面(Command-Line Interfaces, CLIs)[2]。通过使用图标、按钮、窗口和菜单,GUI 使更多用户能够通过简单的操作(如点击、输入和手势)与计算机交互。这一转变普及了计算机的使用,使非技术用户也能高效地操作复杂系统。然而,GUI 往往在追求可用性的同时牺牲了效率,尤其是在需要重复或多步骤交互的工作流中,CLI 通常仍然更为简洁高效 [3]。

尽管 GUI 革新了可用性,但其主要为人类视觉交互设计的特性,在自动化方面带来了显著挑战。GUI 的多样性、动态性以及平台特定性使得开发灵活且智能的自动化工具变得困难,这些工具需要适应各种环境。早期的 GUI 自动化尝试主要依赖于基于脚本或规则的方法 [4][5]。虽然这些方法对预定义的工作流有效,但其本质上范围狭窄,主要集中在软件测试和机器人流程自动化(Robotic Process Automation, RPA)等任务 [6]。这些方法的刚性使得在应对新任务、GUI 布局的变化或工作流的演变时需要频繁手动更新,限制了其可扩展性和灵活性。此外,这些方法缺乏支持动态、人类式交互的复杂性,因而在复杂或不可预测的场景中应用受限。

大型语言模型(Large Language Models, LLMs)的兴起 [8][9],特别是那些增强了多模态能力的模型 [10],为 GUI 自动化带来了颠覆性变化,重新定义了智能体与图形用户界面交互的方式。从 ChatGPT [11] 等模型开始,LLMs 展现了在自然语言理解、代码生成以及跨任务泛化方面的卓越能力 [8][12]–[14]。视觉语言模型(Visual Language Models, VLMs)的引入进一步扩展了这些能力,使这些模型能够处理视觉数据,例如 GUI 的复杂布局 [15]。这一演进弥合了语言与视觉理解之间的差距,使智能体能够以更类似人类和更具适应性的方式与 GUI 交互。通过利用这些进展,LLMs 和 VLMs 展现了变革性的潜力,使智能体能够在复杂的数字环境中导航、动态执行任务,并彻底革新 GUI 自动化领域。

1.1 LLM驱动GUI智能体的动机
以大型语言模型(LLM)作为“核心大脑”的支持,LLM驱动的GUI自动化引入了一类全新的智能体。这些智能体能够理解用户的自然语言请求、分析GUI界面及其元素,并自主执行适当的操作。值得注意的是,这些能力的实现并不依赖复杂的、特定于平台的脚本或预定义的工作流。这些智能体被称为“LLM驱动的GUI智能体”(LLM-brained GUI agents),其形式定义如下:
在GUI环境中操作的智能体,以LLM作为其核心推理和认知引擎,以灵活和适应性的方式生成、规划和执行操作。

这一范式代表了GUI自动化领域的重大飞跃,促进了跨各种平台的动态、类人交互。它使智能、适应性系统的创建成为可能,这些系统能够推理、实时决策,并灵活应对不断变化的任务和环境。我们在图1中展示了这一高级概念。

传统的GUI自动化通常受限于预定义的规则或专注于特定任务,限制了它们适应动态环境和多样化应用的能力。相比之下,LLM驱动的GUI智能体通过将自然语言理解、视觉识别和决策能力整合到一个统一框架中,实现了范式的转变。这使得它们能够在广泛的用例中泛化,彻底改变任务自动化,并显著提升人机交互的直观性和效率。

此外,与当前兴起的纯应用编程接口(API)智能体趋势不同——后者依赖于并非总是公开或可访问的API——GUI智能体利用图形界面的通用性。GUI提供了控制大多数软件应用程序的一般机制,使智能体能够以非侵入的方式运行,而无需访问内部API。这一能力不仅拓宽了GUI智能体的适用性,还使外部开发者能够基于现有软件在不同平台和生态系统上构建高级功能。综合这些创新,GUI智能体被定位为未来智能自动化领域中多功能且变革性的技术。 

这一新范式使用户能够通过对话命令控制通用的软件系统。通过减少多步骤GUI操作的认知负担,LLM驱动的智能体让复杂系统变得对非技术用户更易接近,同时简化了各个领域的工作流程。典型示例包括用于网页导航的SeeAct [16]、用于移动交互的AppAgent [17],以及用于Windows操作系统应用的UFO [18]。这些智能体类似于《钢铁侠》中的J.A.R.V.I.S.,是一种直观且适应性强的系统,能够理解用户的目标并自主执行跨应用操作。一个由人工智能驱动的操作系统的未来概念——能够以流畅和精准的方式执行跨应用任务——正在迅速成为现实 [20][21]。 

LLM驱动的GUI智能体的实际应用已经逐渐出现。
例如,微软的Power Automate利用LLM简化了低代码/无代码自动化 [2],使用户能够以较少的技术知识设计跨微软应用的工作流。在生产力软件中集成的AI助手(如微软Copilot [3]),正在弥合自然语言指令与应用操作之间的鸿沟。此外,LLM驱动的智能体在提升可访问性方面显示出潜力 [22],例如通过将自然语言命令转换为可执行步骤,可能让视障用户更有效地导航GUI。这些进展凸显了LLM驱动GUI智能体在各种应用中的时效性和变革性潜力。

LLM与GUI自动化的融合解决了人机交互中的长期挑战,并带来了智能GUI控制的新机遇 [23]。
这一整合催生了研究活动的激增,涵盖了应用框架 [18]、数据收集 [24]、模型优化 [15] 和评估基准 [25] 等领域。尽管取得了这些进展,仍然存在关键的挑战和局限性,许多基础性问题尚未被深入探索。然而,目前缺乏对这一快速发展的领域的系统性综述,导致对该领域的理解存在重要空白。 

1.2 调查范围
为了填补这一空白,本文提供了一篇开创性的、全面的关于“LLM驱动的GUI智能体”的综述。我们将回顾GUI智能体的发展历史,提供构建这些智能体的分步指南,汇总基本和高级技术,评审与框架、数据和模型相关的重要工具和研究,展示典型应用,并概述未来发展方向。具体而言,本综述旨在回答以下研究问题(RQs):

  1. RQ1:LLM驱动的GUI智能体的发展历史轨迹是什么?(第4节)
  2. RQ2:构成LLM驱动GUI智能体的基础组件和高级技术有哪些?(第5节)
  3. RQ3:LLM GUI智能体的主要框架是什么?它们有哪些显著特征?(第6节)
  4. RQ4:有哪些现有数据集?如何收集全面的数据集以训练优化的LLM用于GUI智能体?(第7节)
  5. RQ5:如何利用收集的数据训练专用的大型动作模型(Large Action Models, LAMs)用于GUI智能体?当前领域中的领先模型有哪些?(第8节)
  6. RQ6:使用哪些指标和基准来评估GUI智能体的能力和性能?(第9节)
  7. RQ7:LLM驱动的GUI智能体最显著的实际应用是什么?它们如何适应实际用途?(第10节)
  8. RQ8:开发稳健且智能的GUI智能体面临的主要挑战、局限性及未来研究方向是什么?(第11节)

通过这些问题,本综述旨在提供对该领域现状的全面概览,为构建LLM驱动的GUI智能体提供指导,识别关键研究空白,并提出未来工作的方向。本综述是首批系统性研究LLM驱动GUI智能体领域的尝试之一,整合了LLM的进展、GUI自动化和人机交互的视角。

1.3 调查结构

本综述的组织结构如下,图2展示了具体的结构示意图:

  • 第2节:回顾与LLM智能体和GUI自动化相关的综述和文献研究。
  • 第3节:提供LLM、LLM智能体和GUI自动化的基础背景知识。
  • 第4节:梳理LLM驱动的GUI智能体的发展历程。
  • 第5节:介绍LLM驱动GUI智能体的关键组成部分和先进技术,作为全面指南。
  • 第6节:展示LLM驱动GUI智能体的典型框架。
  • 第7节:讨论数据集的收集以及用于优化GUI智能体中LLM的数据驱动研究。
  • 第8节:覆盖GUI智能体的基础和优化模型。
  • 第9节:概述评估指标和基准方法。
  • 第10节:探讨实际应用和用例。
  • 第11节:审视当前的局限性、挑战及潜在的未来研究方向。
  • 第12节:对本综述进行总结。

为便于理解,表1提供了缩略词列表。

2 相关工作

将大型语言模型(LLMs)与GUI智能体结合是一个新兴且快速增长的研究领域。一些相关的综述和教程提供了基础性见解和指导。我们简要回顾现有的关于GUI自动化和LLM智能体的综述文章,因为这些主题与我们的研究重点密切相关,并提供了重要的参考信息。

首先,我们对关于GUI自动化、LLM智能体及其整合的代表性综述和书籍进行了概述,具体内容总结在表2中。这些研究要么直接聚焦于GUI自动化和LLM驱动智能体的一个或两个核心领域,要么通过间接方式为推动该领域的发展提供了宝贵的见解,尽管其主题未直接针对本文的研究焦点。

2.1 GUI自动化综述

GUI自动化历史悠久,在工业界有广泛的应用,特别是在GUI测试 [26]–[28] 和用于任务自动化的机器人流程自动化(Robotic Process Automation, RPA)[6][41] 中。

Said等人 [29] 对移动应用程序的GUI测试进行了综述,涵盖了该领域的目标、方法和挑战。Li [30] 进一步缩小了研究范围,聚焦于Android应用程序,而Oksanen等人 [31] 探讨了Windows GUI应用程序的自动化测试技术,这一平台是智能体操作的重要基础。同样地,Moura等人 [60] 对Web应用程序的GUI测试进行了综述,包括多种工具、输入和方法学。Deshmukh等人 [32] 讨论了自动化GUI测试在提升用户体验方面的应用,这是LLMs展现新能力的领域之一。

现代GUI测试的基石是计算机视觉(Computer Vision, CV),它被用来解释用户界面元素并识别可操作控件 [33]。Yu等人 [34] 对CV在移动GUI测试中的应用进行了综述,突出了其重要性及相关挑战。在LLM驱动的GUI智能体中,应用程序UI的截图同样是关键输入,能够支持任务的可靠理解和执行。

另一方面,RPA专注于自动化重复性的人工任务,也在相关流程中大量依赖GUI自动化。Syed等人 [35] 对该领域进行了综述,指出了当代RPA的主题和未来研究中的关键挑战。Chakraborti等人 [36] 强调了从传统的、基于脚本的RPA向更智能、适应性更强的范式转变的重要性,并系统性地概述了这一方向上的进展。鉴于RPA在工业中的广泛应用,Enriquez等人 [37] 和Ribeiro等人 [38] 从工业视角对该领域进行了综述,强调了其重要性,并对RPA方法、发展趋势及实际挑战进行了全面概述。

无论是GUI测试 [39] 还是RPA [40],在实现更高的智能性和稳健性方面仍然面临显著挑战。LLM驱动的GUI智能体有望在这些领域中发挥变革性作用,通过增强能力和增加价值来解决这些长期存在的问题。

2.2 关于LLM智能体的综述

大型语言模型(LLMs)的出现显著提升了智能体的能力 [42],使其能够应对以前难以实现的复杂任务,尤其是在自然语言理解和代码生成领域 [43]。这一进展推动了基于LLM的智能体在广泛应用中的大量研究 [44]。

Xie等人 [45] 和Wang等人 [46] 提供了关于LLM驱动智能体的全面综述,包括基础信息、详细的组件分析、分类体系以及各种应用。这些综述为理解LLM驱动的智能体提供了宝贵的参考,奠定了进一步探索LLM驱动GUI智能体的基础。Xie等人 [55] 还广泛综述了多模态智能体,它们除了文本外,还能处理图像、视频和音频。这种多模态能力显著扩展了传统基于文本的智能体的应用范围 [56]。值得注意的是,大多数GUI智能体属于这一类别,因为它们依赖于图像输入(如截图)来有效地解释和操作图形界面。

多智能体框架在GUI智能体的设计中被频繁采用,以增强其能力和可扩展性。Guo等人 [47] 和Han等人 [48] 提供了关于当前多智能体系统的概述,包括其现状、挑战和未来方向。Sun等人 [49] 综述了利用强化学习增强多智能体LLM系统的最新方法,为提高其能力和适应性开辟了新路径。这些研究为设计高效的多智能体系统提供了宝贵的见解和指导。

在数字环境领域,Wu等人 [57] 提供了一篇关于移动环境中LLM智能体的综述,涵盖了移动GUI智能体的关键方面。在更广泛的范围内,Wang等人 [58] 综述了基础模型与GUI智能体的集成。另一个由Gao等人撰写的综述总结了跨各种数字平台运行的自主智能体 [59],突出了它们的能力、挑战和应用。这些综述不仅提供了关键的任务理解支持,还突出了这一领域中的新兴趋势,为进一步研究提供了重要参考。

关于LLM智能体的各个组件,一些综述提供了详细的见解,这些见解对于GUI智能体尤其重要。

Huang等人 [50] 探讨了LLM智能体中的规划机制,这对于执行长期任务至关重要——这是GUI自动化中的常见需求。
Zhang等人 [51] 研究了记忆机制,它使智能体能够存储关键的历史信息,从而帮助知识保留和决策制定。
此外,Shen [13] 综述了LLM使用工具(如API和代码)与环境有效交互的方法,通过这些工具将行动与能够产生实际影响的方式联系起来。
Chang等人 [52] 则提供了一篇关于LLM评估方法的全面综述,这对于确保GUI智能体的稳健性和安全性至关重要。
另外,其他两篇综述 [53][54] 对多模态LLM的基准测试和评估方法进行了综合概述。这些评估还支持了反馈循环,使智能体能够根据评估结果迭代改进。

总体而言,这些综述为LLM智能体的关键组件提供了宝贵的指导,并为基于LLM的GUI智能体奠定了坚实的基础。

我们的综述与现有研究的区别在于,它首次对LLMs与GUI智能体的交叉点和整合进行了开创性和全面的分析。本文深入探讨了基础组件、先进技术、框架架构、数据与模型优化策略、应用场景、关键挑战,以及面向未来的发展路线——这些领域在以往的研究中尚未得到充分的探索。

3 背景

LLM驱动GUI智能体的开发基于以下三个主要进展:

  1. 大型语言模型(LLMs) [8]:具备先进的自然语言理解和代码生成能力,构成这些智能体的核心智能。
  2. 相关的智能体架构和工具 [46]:扩展了LLM的能力,弥合了语言模型与物理环境之间的差距,使其能够产生实际的影响。
  3. GUI自动化 [61]:发展出一套健全的工具、模型和方法,为GUI智能体的功能提供了重要支持。

上述每个组件在LLM驱动GUI智能体的出现过程中都发挥了关键作用。在以下小节中,我们将简要概述这些领域,为后续讨论奠定基础。

3.1 大型语言模型:基础与能力

语言模型的研究有着悠久而丰富的历史 [62],从早期的统计语言模型 [63] 和小型神经网络架构 [64] 开始。在这些基础概念之上,近年来的进展集中于基于Transformer的大型语言模型(LLMs),如生成式预训练Transformer(Generative Pre-trained Transformers, GPTs)[65]。这些模型通过在大规模文本语料库上的预训练,具有显著更大的模型规模,不仅验证了扩展定律,还在广泛的自然语言任务中展现了卓越的能力。除了规模之外,这些LLMs还表现出增强的语言理解与生成能力,以及在小型语言模型中缺乏的涌现特性 [66]。

早期的神经语言模型基于循环神经网络(RNNs)[67] 和长短时记忆网络(LSTMs)[68] 构建,在性能和泛化能力上都有限。Transformer模型的引入,基于注意力机制 [69],标志着一个变革性的里程碑,确立了几乎所有后续LLMs的基础架构。这一发展催生了多种模型结构的变体,包括:

  • 仅编码器模型(如BERT [70]、RoBERTa [71]、ALBERT [72]);
  • 仅解码器模型(如GPT-1 [73]、GPT-2 [74]);
  • 编码器-解码器模型(如T5 [75]、BART [76])。

2022年,基于GPT-3.5的ChatGPT [11] 发布,这一具有突破性的LLM从根本上改变了人们对语言模型潜能的认知。从那时起,诸如GPT-4 [78]、LLaMA-3 [79] 和Gemini [80] 等众多先进的LLMs相继出现,推动了该领域的快速发展。

如今的LLMs高度多功能化,其中许多能够处理多模态数据,并执行多种任务,从问答到代码生成,使其成为各种应用中不可或缺的工具 [81]–[84]。

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

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

相关文章

BUUCTF_Web([GYCTF2020]Ezsqli)

1.输入1 ,正常回显。 2.输入1 ,报错false,为字符型注入,单引号闭合。 原因: https://mp.csdn.net/mp_blog/creation/editor/145170456 3.尝试查询字段,回显位置,数据库,都是这个。…

react使用react-redux状态管理

1、安装 npm install react-redux2、创建store.js import { createStore } from redux;// 定义初始状态 const initialState {counter: 888 };// 定义 reducer 函数,根据 action 类型更新状态 function reducer(state initialState, action) {switch (action.ty…

JAVA使用自定义注解,在项目中实现EXCEL文件的导出

首先定义一个注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.FIELD) public interface Excel {/*** 导出时在excel中排序*/int sort() default Integer.MAX_VALUE;/*** 导出到Excel中的名字.*/String name() default "";/*** 首行字段的批注*/String …

【2024年华为OD机试】 (B卷,100分)- 金字塔,BOSS的收入(Java JS PythonC/C++)

一、问题描述 微商模式收入计算 题目描述 微商模式中,下级每赚 100 元就要上交 15 元。给定每个级别的收入,求出金字塔尖上的人的收入。 输入描述 第一行输入 N,表示有 N 个代理商上下级关系。接下来输入 N 行,每行三个数&am…

光伏储能交直流微电网Matlab/Simulink仿真模型

博士毕业后项目和课题的交接工作也都基本上结束了,之前从20年我博一开始创作的博客,我也将从25年伊始重新进行更新,在保留原有内容的基础上,在对现如今的研究热点进行补充,希望能为各位校友提供一定的研究思路。首先是…

Windows中安装RabbitMQ

安装Erlang 下载地址:https://www.erlang.org/downloads 配置环境变量 变量名:ERLANG_HOME 变量值:D:\tools\Erlang-27.2 Path:%ERLANG_HOME%\bin 验证配置是否成功 erl 安装RabbitMQ 下载地址:https://www.rabbitm…

线性代数概述

矩阵与线性代数的关系 矩阵是线性代数的研究对象之一: 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,是线性代数中的核心概念之一。矩阵的定义和性质构成了线性代数中矩阵理论的基础,而矩阵运算则简洁地表示和…

2024年度总结:从后端Java到全栈成长的蜕变

目录 前言1. 用数据与实践书写成长篇章2. 技术与生活的双重蜕变3. 技术的进阶与生活的绽放 前言 今年是我入行的第十年,也是记录在CSDN平台上的第五年。这五年来,我始终坚持记录成长的点滴,将个人事业与博客创作紧密相连。一路走来&#xff0…

关于new和delete的匹配问题

目录 引入 原理 引入 大家先看如下代码: class A { private:int _a 0; };int main() {A* arr1 new A[10];delete arr1;return 0; } 可以发现这里new了一个数组但却用delete释放。先看运行结果: 可以看到程序正常结束并没有崩 ,别急我们…

蓝桥杯3526 子树的大小 | 数学规律

题目传送门 这个题目是一个数学题,比较好的方法是从上往下寻找子树的最左和最右的结点,每层统计子结点数,到树的底部时打印结果。 如何求最左、最右的子结点呢? 对于第i个结点,其前面有i-1个结点,每个结点各有m个孩子,再加上1号结…

计算机毕业设计Python+卷积神经网络租房推荐系统 租房大屏可视化 租房爬虫 hadoop spark 58同城租房爬虫 房源推荐系统

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

Mysql 主从复制原理及其工作过程,配置一主两从实验

主从原理:MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作…

00_专栏《Redis 7.x企业级开发实战教程》介绍

大家好,我是袁庭新。Redis作为一款高性能、多用途的内存数据库,凭借其丰富的数据结构、高速读写能力、原子操作特性及发布订阅等功能,在缓存加速、分布式锁、消息队列等场景中不可或缺,极大提升了系统性能与开发效率,是现代互联网应用架构的关键组件。 你是否在学习Redis…

TensorFlow DAY3: 高阶 API(Keras,Estimator)(完)

TensorFlow 作为深度学习框架,当然是为了帮助我们更便捷地构建神经网络。所以,本次实验将会了解如何使用 TensorFlow 来构建神经网络,并学会 TensorFlow 构建神经网络的重要函数和方法。 知识点 Keras 顺序模型Keras 函数模型Keras 模型存储…

Python自动化:基于faker批量生成模拟数据(以电商行业销售数据为例)

引言:个人认为,“造数据”是一个数据分析师的一项基本技能,当然啦,“造数据”不是说胡编乱造,而是根据自己的需求去构造一些模拟数据集,用于测试等用途,而且使用虚拟数据不用担心数据隐私和安全…

WPS数据分析000004

目录 一、表格阅读技巧 冻结窗格 拆分窗口 新建窗口 阅读模式 护眼模式 二、表格打印技巧 打印预览 打印缩放 打印区域 打印标题 分页打印 打印位置 页眉页脚 逐份打印 三、表格保护技巧 锁定单元格 隐藏公式 文档权限 文件加密 一、表格阅读技巧 冻结窗…

【前端】CSS学习笔记

目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式(行内样式)内部样式外部样式(推荐) 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…

SQL在线格式化 - 加菲工具

SQL在线格式化 - 加菲工具 打开网站 加菲工具 https://www.orcc.online 选择“SQL 在线格式化” 或者直接访问网址 https://www.orcc.online/tools/sql 输入sql,点击上方的格式化按钮即可 输入框得到格式化后的sql结果

50-《仙人掌》

仙人掌 仙人掌(学名:Opuntia stricta (Haw.) Haw. var. dillenii (Ker-Gawl.) Benson )是仙人掌科缩刺仙人掌的一种变种。是丛生肉质灌木,高1.5~3m。上部分枝宽呈倒卵形、倒卵状椭圆形或者是近圆形,绿色至蓝绿色&#…

【C++课程学习】:C++中的IO流(istream,iostream,fstream,sstream)

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 C学习笔记: https://blog.csdn.net/djdjiejsn/category_12682189.html 前言: 在C语…