当前位置: 首页 > news >正文

UI-TARS论文解读 并提供镜像

原文链接: UI-TARS: Pioneering Automated GUI Interaction with Native Agents
ui-tars镜像链接: LLaMA-Factory/ui-tars_omni-parser_llama-factory

一、关键技术

  1. 数据驱动
    不同于agent框架,采用端到端大模型,数据驱动。
  2. 记忆
  • 短期记忆
    输入限制N个最近的历史结果,但是完整的先前行为和思想历史都被保留为短期记忆
    [Image]

  • 长期记忆
    通过不断交互和训练将记忆融入到模型中。与智能体框架不同,原生智能体模型在其内部参数中编码了任务的长期运行经验,将可观察的交互过程转换为隐式参数化存储。

  1. 任务数据
  • 元素描述:描述元素的类型、视觉特征、元素功能、位置信息。
  • 密集描述:在密集的目标中捕获目标并感知空间关系。
  • 状态转换描述:识别并描述两个连续屏幕截图之间的差异,并确定是否发生了动作。
  • 问答:包括界面理解、图像解释、元素识别和关系推理。
  • 标记集:训练不同标记元素的描述。
  1. 训练模式
  • 持续预训练阶段:使用完整数据集(排除反思微调数据)进行持续预训练,学习率保持不变。 此基础阶段允许模型学习自动 GUI 交互所需的所有知识,包括感知、grounding和动作轨迹,确保在各种 GUI 元素和交互中具有强大的覆盖范围。
  • 退火阶段:选择感知、grounding、动作轨迹、反思微调数据的高质量子集进行退火。 退火过程逐渐调整模型的学习动态,促进更集中的学习,并更好地优化其在现实世界 GUI 交互场景中的决策策略。
  • DPO阶段:使用来自在线自举数据的标注反射对进行DPO训练。 在此过程中,模型改进其决策能力,强化最佳行动,同时惩罚次优行动。 此过程提高了模型在现实世界GUI交互中做出精确、上下文感知决策的能力。
  1. 数据处理
  • 推理增强
    选择MINT和 OmniCorpus图文数据集,使用分类器、规则、vlm、等方式进行数据过滤优化,获取到GUI教程相关的优质数据,来训练模型的推理能力。

  • ActRe
    进行思考推理,同时使用中文和英文标注思想,扩展了语言多样性。
    [Image]

  • 从长期记忆中的先前经验学习
    通过规则、VLM、人工的方式对模型的输出进行筛选优化、再训练,不断迭代优化模型。
    [Image]

  • Reflection Tuning
    在发送错误操作的数据上,标注者必须承认先前错误的影响,弥补其影响,并提供正确的操作以重新调整任务进度。利用正样本进行SFT训练,并且只针对已纠正的步骤计算损失,而错误步骤则不考虑用于训练。

  • DPO

[Image]

有两个模型,一个是SFT模型(不训练)一个是训练模型,‘期望’以下两种理解方式:

  1. 训练模型比SFT模型更偏向chosen结果、训练模型比SFT模型更远离rejected结果,两者求和
  2. 训练模型趋近chosen和rejected的概率差,比原始SFT模型更大

二、架构

[Image]

为了优化内存使用并在通常受限的符元预算(例如,32k 序列长度)内保持效率,将输入限制为最近的N个观测结果。 此约束确保模型能够处理必要的上下文,而不会压垮其内存容量。 完整的先前行为和思想历史都被保留为短期记忆。 UI-TARS迭代地预测思想tn和行为an输出,这取决于任务指令和之前的交互:
[Image]

  1. 增强感知,使用特殊工具提取元数据:类型、边界框和文本内容。用作以下任务:1.元素描述,2.
    密集式字幕生成,旨在通过描述整个GUI布局(包括空间关系、层次结构以及元素之间的交互)来实现对界面的整体理解;3.状态转换字幕生成,捕捉屏幕上细微的视觉变化,4.问答,旨在增强智能体的视觉推理能力,5.标记集提示,使用视觉标记将GUI元素与特定的空间和功能上下文关联起来。
    整个GUI布局,包括空间关系、层次结构和交互之间的关系
  2. 在系统2上,通过将不同的推理模式——例如任务分解、长期一致性、里程碑识别、试错和反思——注入模型中,来增强所有收集到的动作轨迹的推理能力。
  3. 利用数百台虚拟机,UI-TARS基于构建的指令探索各种现实世界任务,并生成大量轨迹。 严格的多阶段过滤——结合基于规则的启发式方法、VLM评分和人工审查——确保了轨迹的质量。 然后,这些经过改进的轨迹被反馈到模型中,从而在连续的训练周期中不断迭代地增强智能体的性能。 此在线自举过程的另一个核心组成部分是反思调优,其中智能体通过分析自身次优行为来学习识别和恢复错误。 我们为此过程标注了两种类型的数据:(1)错误纠正,其中标注者指出代理生成的轨迹中的错误并标记纠正措施;(2)事后反思,其中标注者模拟恢复步骤,演示代理如何在发生错误后重新调整任务进度。 这两种类型的数据创建了配对样本,这些样本用于使用直接偏好优化 (DPO)(Rafailov et al., 2023)来训练模型。

三、形态对比

  1. 传统的guiagent是由多个模块组成,grounding和memory都是外接,扩展性和适应性不如端到端模型。在哲学上,代理框架是设计驱动的,需要大量的 manual engineering 和预定义的工作流程来保持稳定性和防止意外情况;而代理模型本质上是数据驱动的,使它们能够通过大规模数据和迭代反馈进行学习和适应
  2. 训练端到端智能体模型需要将所有组件整合到统一工作流程中的数据,以捕捉感知、推理、记忆和行动之间无缝的交互作用。 此类数据包含来自人类专家的丰富工作流程知识,历史上鲜有记录。 缺乏全面、高质量的数据限制了原生智能体在不同现实场景中泛化的能力,阻碍了其可扩展性和鲁棒性。
  3. 系统1(快思考)&系统2(慢思考),系统1直接输出动作,系统2会先思考再输出动作。
  4. 智能体框架仍然依赖于人为定义的工作流程来组织其行动。
    1. 脆弱性和维护开销:每当任务、接口或使用场景发生变化时,开发人员必须重新设计或扩展工作流程的手动规则或提示——这是一个容易出错且劳动密集型的过程。
    2. 不相容的学习范式:基于框架的方法很少将新的经验数据整合到更新底层LLM/VLM参数中。 相反,它们依赖于离线的提示工程或工作流程设计。 当任务偏离原始领域时,这些框架通常会失败,从而限制了适应性。
    3. 模块不兼容性:复杂的任务需要多个模块(例如,视觉解析、内存存储、长远规划),这些模块必须通过提示或桥接代码进行协调。 任何模块中的不一致或错误都可能导致整个流程失败,诊断这些问题通常需要领域专家来调试流程。
  5. 设计驱动VS数据驱动

四、能力

  1. 1.实时感知,2.在一个预定义的空间内准确预测和执行行动,3.模拟人类的思维去思考,4.记忆,特定任务的知识和先验知识。
  2. 智能体主动与其环境互动以提出任务、执行任务并评估结果。 这些智能体可以根据其行动的成功自主分配自我奖励,强化积极行为,并通过持续的反馈循环逐步改进其能力。 这种自我导向的探索和学习过程允许智能体发现新知识,改进任务执行,并增强解决问题策略,而无需过度依赖人工标注或明确的外部指导。
  3. 系统2推理:
    1. 任务分解侧重于通过将任务分解成更小、更容易管理的子任务来制定实现总体目标的计划
    2. 长期一致性,通过始终参考初始目标,智能体模型可以有效避免在复杂的多阶段任务中可能发生的任何潜在偏差,从而确保从始至终的一致性和连续性。
    3. 里程碑识别 允许智能体模型估计当前的进度状态,分析观察结果并确定后续目标。 这确保了多步骤工作流程能够有效执行,不会迷失方向。
    4. 反复试验为智能体模型提供了更多机会来假设、测试和评估潜在行动,从而提高决策的精确性,尤其是在模糊和复杂的情况下
    5. 反思使智能体模型能够评估过去的行动,识别错误并进行调整以提高未来的性能(Shinn et al., 2023; Renze & Guven, 2024)。 这个迭代过程提高了可靠性,并有助于防止重复错误。
  4. 记忆
    与智能体框架不同,原生智能体模型在其内部参数中编码了任务的长期运行经验,将可观察的交互过程转换为隐式参数化存储。 可以采用上下文学习 (ICL) 或链式思考 (CoT) 等技术来激活这种内部记忆。
    短期记忆: 它作为任务特定信息的临时存储库,捕获代理的即时上下文。 这包括代理的动作历史、当前状态详细信息以及任务的正在进行的执行轨迹,从而实现实时的态势感知和适应性。
    长期记忆: 它作为一个长期数据储备库,捕获并保护先前交互、任务和背景知识的记录。 它保留诸如先前任务的执行路径之类的细节,提供一个全面的知识库,支持未来任务的推理和决策。

五、任务数据

[Image]

  1. 元素描述Element Description
    为了增强对GUI中特定元素(尤其是微小元素)的识别和理解,我们专注于为每个元素创建详细且结构化的描述。 此类描述基于使用解析工具提取并由VLM进一步合成的元数据,涵盖四个方面:(1)元素类型(例如,窗口控件类型):我们根据视觉线索和系统信息对元素(例如,按钮、文本字段、滚动条)进行分类;(2)视觉描述,描述元素的外观,包括其形状、颜色、文本内容和样式,直接来自图像;(3)位置信息:我们描述每个元素相对于其他元素的空间位置;(4)元素功能,描述元素的预期功能和可能的交互方式。 我们训练UI-TARS枚举屏幕截图中所有可见的元素并生成它们的元素描述,以屏幕截图为条件。
  2. 密集描述Dense Captioning
    密集标注的目标是为 GUI 截图提供全面、详细的描述,不仅捕捉界面元素本身,还包括它们的空间关系和整体布局。
  3. 状态转换描述State Transition Captioning
    训练模型识别并描述两个连续屏幕截图之间的差异,并确定是否发生了动作,例如鼠标点击或键盘输入。
  4. 问答Question Answering (QA)
    综合了一套多样化的QA数据,涵盖了广泛的任务,包括界面理解、图像解释、元素识别和关系推理。
  5. 标记集Set-of-Mark (SoM)
    我们根据解析元素的空间坐标,在 GUI 截图上绘制视觉上明显不同的标记。这些标记在形状、颜色和大小等属性上有所不同,为模型提供清晰、直观的视觉线索,以便准确定位和识别特定元素。通过这种方式,UI-TARS 能够更好地将视觉标记与对应的界面元素关联起来。我们将 SoM 标注与密集标注、问答等任务结合,例如,模型可能被训练来描述由标记高亮显示的元素

六、数据模式

1. 统一的动作空间

[Image]

还定义了两个终端动作:Finished(),表示任务完成,以及CallUser(),在需要用户干预的情况下调用,例如登录或身份验证。

2. 动作轨迹收集

1.内部标注高质量数据,2.开源数据:我们还整合了多个现有数据集(MM-Mind2Web (Zheng et al., 2024b),GUIAct (Chen et al., 2024c),AITW (Rawles et al., 2023), AITZ (Zhang et al., 2024d), AndroidControl (Li et al., 2024c), GUI-Odyssey (Lu et al., 2024a), AMEX (Chai et al., 2024))并将它们标准化为统一的动作空间格式

3. 提升grounding能力

收集了屏幕截图并使用专门的解析工具提取了元数据,包括元素类型、深度、边界框和文本内容。模型的任务是输出相对于屏幕尺寸归一化的相对坐标,确保跨不同分辨率设备的一致性。 例如,给定描述“右上角标有提交的红色按钮”,模型会预测该按钮的标准化坐标。 描述与坐标之间的这种直接映射增强了模型准确理解和定位视觉元素的能力。
整合了开源数据(Seeclick (Cheng et al., 2024),GUIAct (Chen et al., 2024c),MultiUI (Liu et al., 2024b),Rico-SCA (Li et al., 2020a),WidgetCaption (Li et al., 2020b),MUG (Li et al., 2024b),Rico Icon (Sunkara et al., 2022),CLAY (Li et al., 2022),UIBERT (Bai et al., 2021),OmniACT (Kapoor et al., 2024),AutoGUI (Anonymous, 2024),OS-ATLAS (Wu et al., 2024b))并将它们标准化为我们统一的动作空间格式。我们在表 2中提供了用于训练的定位数据的基本统计数据。此组合数据集使UI-TARS能够实现高精度定位,从而显著提高其在点击和拖动等操作中的有效性。

4. 推理增强

我们选择了 MINT 和 OmniCorpus 这两个广泛认可的图文交错预训练数据集作为初始数据来源。然而,这些数据集存在大量噪声,只有一小部分符合 GUI 教程的标准。为了提取高质量的教程数据,我们实施了一个多阶段的数据收集与过滤流程:

  1. 粗粒度过滤:为了筛选类似教程的内容,我们使用 fastText 分类器,基于人工精选的高质量教程作为正例,并从 MINT 和 OmniCorpus 中随机抽取样本作为负例进行训练。然后,利用训练好的分类器进行初步筛选,去除无关样本,生成候选数据集
  2. 细粒度过滤:为了进一步优化候选数据集,我们使用 LLM 识别并去除误判的样本,确保剩余数据符合 GUI 教程的特征。粗粒度和细粒度过滤过程进行了多轮迭代,以最大化高质量 GUI 教程的召回率。
  3. 去重与数据优化:在过滤后的数据集上,我们进一步处理重复项、广告和残余噪声。去重采用基于 URL 和 局部敏感哈希(LSH) 的方法。最后,我们使用 LLM 对教程中的文本内容进行重写,以优化内容质量,并去除无关或低质量信息

5. 通过思想增强进行推理刺激ActRe

(1) ActRe (Yang et al., 2024b):如(4)所示,对于在§ 4.3中收集的每个轨迹,我们将其拆分为多个步骤。 对于每个步骤n,其思想tn是通过使用之前的上下文和当前目标动作an提示视觉语言模型 (VLM) 来迭代生成的。 此方法试图使生成的思考在逻辑上立足于之前的语境,并与当前的动作保持一致。
[Image]

在 ActRe 标注期间,我们提示 VLM 展现更高阶的、系统 2 推理,这涉及到深思熟虑的、循序渐进的决策和反思。 通过促进这些推理模式,我们鼓励模型进行深思熟虑的、长期的规划和反思,以解决复杂的任务。 如图 6 所示,我们提示 VLM 遵循的推理模式包括:

  • 任务分解:引导模型将复杂的任务分解成更小、更易于管理的子任务,使其能够逐步解决复杂的工作流程。
  • 长期一致性:确保模型在整个任务中保持一致的目标,参考总体目标和操作历史,避免在复杂的多步骤任务中出现偏差。
  • 里程碑识别:使模型能够识别中间目标的完成情况,促进向后续目标的顺利过渡。
  • 试错:使模型能够假设、测试和评估潜在的动作,尤其是在模糊的情况下,例如在不直接交互的情况下验证搜索结果。
  • 反思:使模型能够识别和纠正操作失败时的错误,通过反思性推理鼓励适应性和错误恢复。
    (2) 思想引导:基于真实动作(即 ActRe)的思想反向标注可能会导致误报,因为生成的思想可能在表面上与相应的动作相匹配,而没有建立真正的因果关系
    为了解决这个问题,我们采用了一种引导式方法,在不知道真实动作的情况下生成思想。 通过采样多个思想-行动对,如 (5) 所示,我们识别出导致正确行动的思想,确保推理在因果上与所选择的行动一致。 这种方法可以产生更高质量的标注,因为它迫使模型模拟真实的决策过程,而不仅仅是为预先确定的行动提供理由(UI-TARSearly 表示早期模型检查点)。
    [Image]

我们用中文和英文标注思想,扩展了语言多样性。 尽管我们为所有轨迹增强了想法,但在训练过程中我们也包含了普通动作轨迹(无想法)。

6. 从长期记忆中的先前经验学习

通过半自动化的数据收集、过滤和细化,模型在最大限度地减少人工干预的同时不断改进。 通过利用长期记忆,UI-TARS在其积累的知识基础上,随着时间的推移改进其性能,并更有效地适应新的任务。
获取多样化的任务目标(task goals),既包括 人工标注 的指令,也包括 模型生成 的指令
在迭代中,代理在目标GUI环境(例如,虚拟PC)中执行这些指令,产生一组原始轨迹。通过以下步骤丢弃噪声或无效的轨迹: (1) 基于规则的奖励:启发式规则删除具有明显异常的轨迹(例如,不会改变环境的冗余操作); (2) VLM评分:VLM为剩余轨迹分配质量分数,低于预定义阈值的轨迹将被删除; (3) 人工审核:部分轨迹由标注者进一步检查,他们确定发生错误的步骤,丢弃任何后续操作,只保留有效的开头部分。
利用由此产生的过滤后的轨迹集进行微调。对于每一轮,我们都雇佣标注者来细化或扩展指令集:
[Image]

7. 反思微调Reflection Tuning

假设在步骤发生错误,我们要求标注者识别此错误并标记已纠正的思想和动作。创新的是,我们进一步要求标注者基于错误的动作继续标记后续步骤,模拟错误已经发生的情况。 标注者必须承认先前错误的影响,弥补其影响,并提供正确的操作以重新调整任务进度。 例如,如果上一步打算将网页添加到书签,但错误地点击了关闭按钮,则下一步应重新打开最近关闭的网页,以重新尝试点击书签按钮。
我们利用正样本𝒯+进行SFT训练,并且只针对已纠正的步骤计算损失,而错误步骤则不考虑用于训练。 通过此过程,UI-TARS逐渐提高了其识别和恢复错误的能力,使其能够在面对不完美或不确定条件时做出有效的调整。 培养这种反思能力增强了智能体对动态环境和任务的适应性。
8. DPO
[Image]

七、训练

为了确保与现有工作(例如 Aguvis (Xu et al., 2024) 和 OS-Atlas (Wu et al., 2024b))进行公平比较,我们使用相同的 VLM 主干网络 Qwen-2-VL (Wang et al., 2024c),并采用三阶段训练过程。 此过程利用大约500亿个符元 的总数据量,改进模型在各种 GUI 任务中的能力。 每个阶段逐步整合更高质量的数据,以提高模型在复杂推理任务中的性能。
持续预训练阶段
我们使用§ 4中描述的完整数据集(排除反思微调数据)进行持续预训练,学习率保持不变。 此基础阶段允许模型学习自动 GUI 交互所需的所有知识,包括感知、grounding和动作轨迹,确保在各种 GUI 元素和交互中具有强大的覆盖范围。
退火阶段
然后,我们选择感知、grounding、动作轨迹、反思微调数据的高质量子集进行退火。 退火过程逐渐调整模型的学习动态,促进更集中的学习,并更好地优化其在现实世界 GUI 交互场景中的决策策略。 我们将此阶段后训练的模型称为 UI-TARS-SFT。
DPO阶段
最后,我们使用来自在线自举数据的标注反射对进行DPO训练。 在此过程中,模型改进其决策能力,强化最佳行动,同时惩罚次优行动。 此过程提高了模型在现实世界GUI交互中做出精确、上下文感知决策的能力。 最终模型记为UI-TARS-DPO。

八、评估

UI-TARS 在 OSWorld(Xie et al., 2024) 和 AndroidWorld(Rawles et al., 2024a) 等具有挑战性的基准测试中取得了优异的成果。

  1. 感知评估
    1. 数据集
      VisualWebBench (Liu et al., 2024c) 重点关注智能体的网页理解能力,而 WebSRC (Chen et al., 2021) 和 ScreenQA (Hsiao et al., 2022) 通过问答 (QA) 任务评估网页结构理解和移动屏幕内容理解。 此外,GUI-World (Chen et al., 2024a) 提供多种选择题、自由问答和对话格式的广泛查询,以评估 GUI 理解能力。
    2. 评测指标
      根据不同的问题格式,采用了一系列指标。 例如,对于多项选择题 (MCQ) 任务,准确率被用作关键指标;在字幕或光学字符识别 (OCR) 任务的情况下,采用 ROUGE-L 指标来评估性能。
  2. grounding评估
    1. 数据集
      ScreenSpot (Cheng et al., 2024) 评估了跨多个平台的单步GUI定位性能。 ScreenSpot v2 (Wu et al., 2024b) 是一个重新标注的版本,它解决了原始 ScreenSpot 中存在的标注错误。
    2. 测指标
      定位评估的指标通常取决于模型预测的位置是否准确地位于目标元素的边界框内
  3. 离线能力评估
    1. 数据集
      AITW (Rawles et al., 2023), Mind2Web (Deng et al., 2023), MT-Mind2Web (Deng et al., 2024), AITZ (Zhang et al., 2024e), AndroidControl (Li et al., 2024c) 和 GUI-Odyssey (Lu et al., 2024a)
    2. 评测指标
      1. 单一动作预测,2.任务级指标
    3. 动作匹配分数 (Rawles et al., 2023; Zhang et al., 2024e; Li et al., 2024c; Lu et al., 2024a) 仅当动作的类型及其具体细节(例如,像键入内容或滚动方向这样的参数)与真实情况一致时,才认为该动作正确。 一些基准 (Li et al., 2020a; Burns et al., 2022) 要求智能体根据提供的指令和屏幕截图生成一系列可自动执行的动作。 这些基准主要使用任务级指标来评估性能,这些指标通过输出结果是否与预定义标签完全匹配来确定任务成功与否,例如完整和部分动作序列匹配精度 (Li et al., 2020a; Burns et al., 2022; Rawles et al., 2023)。
  4. 在线能力评估
    1. 数据集
      (1) Web:WebArena (Zhou et al., 2023) 和 MMInA (Zhang et al., 2024g) 提供了真实的网络环境。 (2) 桌面:OSWorld (Xie et al., 2024)、OfficeBench (Wang et al., 2024f)、ASSISTGUI (Gao et al., 2023) 和 WindowsAgentArena (Bonatti et al., 2024) 在真实的计算机桌面环境中运行。 (3) 移动:AndroidWorld (Rawles et al., 2024a)、LlamaTouch (Zhang et al., 2024f) 和 B-MOCA (Lee et al., 2024)
    2. 评测指标
      为了评估在线评估中的性能,采用了任务级指标,提供了对智能体有效性的全面衡量。 具体而言,在线智能体能力评估领域中,这些任务级指标主要根据智能体是否成功达到目标状态来确定任务成功与否。 此验证过程检查预期结果是否已实现,或者结果输出是否与标签精确一致。
  5. 领域内评估
    我们首先在三个领域内代理基准上评估性能:Multimodal Mind2Web、Android Control 和 GUI Odyssey,所有这些基准在 UI-TARS 中都有相应的训练数据。 为提高评估效率,我们随机抽取了 Android Control 和 GUI Odyssey 基准的 1000 个示例。 我们使用最佳 N 个 (BoN) 采样方法,其中 UI-TARS 为每个输入采样 k 个候选输出,k 设置为 1、16 和 64。 步骤成功率用作评估指标。
  6. 领域外评估
    我们在 AndroidWorld 上评估这两种推理方法,AndroidWorld 是一个领域外 (OOD) 基准测试,在 UI-TARS 中没有相应的训练数据。
http://www.xdnf.cn/news/209431.html

相关文章:

  • 深入理解Spring AI框架的核心概念
  • HarmonyOS ArkUI交互事件与手势处理全解析:从基础到高级实践
  • 阿里Qwen3 8款模型全面开源,免费商用,成本仅为 DeepSeek-R1 的三分之一
  • 深入理解 Linux 权限管理:从基础到进阶
  • Agent开源工具:mcp快速接入,mcp-use上手指南
  • 23G显存可以跑多大尺寸的Qwen3?
  • 第十六届蓝桥杯 2025 C/C++组 旗帜
  • 常见的 CSS 知识点整理
  • 20250429在Ubuntu 20.04.6下安装VMware Workstation16
  • [零基础]内网ubuntu映射到云服务器上,http访问(frp内网穿透)
  • Java controller接口出入参时间序列化转换操作
  • AimRT 从零到一:官方示例精讲 —— 六、pb_chn示例.md
  • OpenObserve API Usage Guide for Log Management
  • 四则运算+从单向链表中删除指定值的节点+名字的漂亮度+数独(Sudoku)
  • Dali 1.1.4 | 使用尖端技术将描述转换成独特艺术品、照片和图像,发挥无限创意
  • npm如何安装pnpm
  • Flip PDF Plus Corp7.7.22电子书制作软件
  • AimRT 从零到一:官方示例精讲 —— 一、工具链与基本概念
  • css3伸缩盒模型第一章(主轴以及伸缩盒模型)
  • P1903 [国家集训队] 数颜色 / 维护队列 Solution
  • neo4j暴露公网ip接口——给大模型联通知识图谱
  • Python 使用一等函数实现设计模式(案例分析:重构“策略”模式)
  • Linux 服务管理两种方式service和systemctl
  • Node.js 事件循环和线程池任务完整指南​
  • 香港科技大学广州|可持续能源与环境学域博士招生宣讲会—四川大学专场
  • 阿里云服务迁移实战: 05-OSS迁移
  • 【Linux系统】systemV共享内存
  • 基于tabula对pdf中多个excel进行识别并转换成word中的优化(五)
  • Go语言之路————接口、泛型
  • SpringMVC再复习1