【EAI 004】LLM+P:借助LLM和PDDL赋予机器人最优规划能力

论文标题:LLM+P: Empowering Large Language Models with Optimal Planning Proficiency
论文作者:Bo Liu, Yuqian Jiang, Xiaohan Zhang, Qiang Liu, Shiqi Zhang, Joydeep Biswas, Peter Stone
作者单位:Department of Computer Science, The University of Texas at
Austin, Department of Computer Science, State University of New York at Binghamton, Snoy AI
论文原文:https://arxiv.org/abs/2304.11477
论文出处:–
论文被引:78(01/05/2024)
论文代码:https://github.com/Cranial-XIX/llm-pddl

Abstract

大型语言模型(LLMs)已经展现出非凡的零样本泛化能力:最先进的聊天机器人可以为日常生活中出现的许多常见问题提供似是而非的答案。然而,到目前为止,LLMs 还不能可靠地解决机器人的长周期规划问题。相比之下,经典规划器一旦以格式化的方式给出问题,就能使用高效的搜索算法快速确定正确甚至最优的规划。为了两全其美,本文介绍了 LLM+P,这是第一个将经典规划器的优势融入 LLM 的框架。LLM+P 接收规划问题的自然语言描述,然后用自然语言返回解决该问题的正确(或最优)计划。LLM+P 首先将语言描述转换成用规划域定义语言(PDDL)编写的文件,然后利用经典规划器快速找到解决方案,再将找到的解决方案翻译回自然语言。除了 LLM+P,我们还从机器人规划场景中定义了一系列不同的基准问题。通过对这些基准问题的综合实验,我们发现 LLM+P 能够为大多数问题提供最佳解决方案,而 LLM 甚至无法为大多数问题提供可行的计划。我们还展示了 LLM+P 能够让家用机器人解决用户用自然语言指定的复杂操纵任务

I. INTRODUCTION

自从这一领域诞生以来,人工智能研究人员就一直在努力创造能用自然语言交谈的程序,并使其具有与人一样的优雅和灵活性。虽然即使是相对简单的模型,如 1966 年的 Eliza [1],也能对一些提示生成看似合理的回答,但生成提示总是相对容易,这暴露了它们与人相比的弱点–缺乏真正的理解

虽然 GPT-4 [2] 和 ChatGPT [3] 等大型语言模型(LLM)已经远远超出了几年前的预期,但它们在这方面并没有什么不同。事实上,互联网上现在充斥着这样的例子:人们陶醉于让 ChatGPT 生成连 5 岁的人类小孩都知道是不明智的输出结果。

鉴于 LLM 的设计和训练方式,这种现象不足为奇。LLMs 并不是专门为展示理解能力而设计的,而是为了在人类在事先设定的上下文下生成可能对人类来说是合理的单词序列。用 Mahowald et.al 的话说[4],LLMs 在语言能力(知道怎么说)方面已经达到了惊人的熟练程度;但在功能能力(知道说什么)方面却差强人意。举例来说,如果询问一个在他们的训练语料库中没有出现过的简单算术问题的结果,或者询问一个需要了解世界如何运作的新颖规划问题的解决方案,他们(相对)很容易上当受骗。

这是否意味着我们应该加大力度,将所有算术和规划问题都纳入他们的训练语料库?显然,这是痴人说梦。另一方面,这又有什么必要呢?我们已经有了能保证得出正确答案的计算器和通用符号规划器。因此,将 LLM 与这些工具连接起来是一种自然而然的替代方法,当然我们也不是第一个探索这种方法的人。

有鉴于此,本文研究目标是首次使 LLM 能够正确解决规划问题。我们的目标是在不改变 LLM 本身的情况下实现这一目标,即使是微调 [5], [6]。相反,我们引入了一种称为 LLM+P 的方法,通过这种方法,当我们向 LLM 提供规划问题的自然语言描述时,LLM:

  • 1)输出适合作为通用规划器输入的问题描述;
  • 2)使用通用规划器解决问题;
  • 3)将规划器的输出转换为自然语言(或连接到机器人的动作执行器)。

我们广泛的经验评估表明,LLM+P 能够为更多的规划问题生成正确的解决方案,其能力远远超过 LLM 本身。虽然本文展示的是规划问题,但这一通用方法也可应用于任何一类拥有完善求解器的问题,例如算术问题(利用计算器)

Limitation:本文并没有要求 LLM 识别它所收到的提示是否适合使用 LLM+P 管道进行处理。未来一个有价值的研究方向是考虑识别提示何时应由 LLM+P 处理

II. BACKGROUND

本节将介绍我们用来表示将由 LLM 解决的规划问题的符号,并回顾经典规划器的标准表示方法。

A. The Classical Planning Problem

从形式上看,规划问题 P P P 的输入是由 ⟨ S , s i n i t , S G , A , f ⟩ ⟨\mathscr{S}, s^{init}, \mathscr{S}^G, \mathscr{A}, f⟩ S,sinit,SG,A,f 元组定义的:

  • S \mathscr{S} S 是一个有限且离散的状态集合,用来描述世界的状态(即状态空间)。我们假设有一个因子状态空间(factored state space),即每个状态 s ∈ S s\in \mathscr{S} sS 是由一组固定变量的值定义的。

  • s i n i t ∈ S s^{init} \in \mathscr{S} sinitS 是初始世界状态(world state)。

  • S G ⊂ S \mathscr{S}^G \subset \mathscr{S} SGS 是一组目标状态。 S G \mathscr{S}^G SG 通常被指定为一系列目标条件(goal conditions),所有这些条件都必须在目标状态下成立。

  • A \mathscr{A} A 是一组符号化的动作(symbolic actions)。

  • f f f 是底层状态转换函数。 f f f 将当前状态和一个动作作为输入,并输出相应的下一个状态。

规划问题 P P P 的解是由 ⟨ a 1 , a 2 , . . . , a N ⟩ ⟨a_1, a_2, ..., a_N⟩ a1,a2,...,aN 组成的抽象的规划 π π π。使得 a 1 a_1 a1 的先决条件在 s i n i t s^{init} sinit 中成立, a 2 a_2 a2 的先决条件在应用 a 1 a_1 a1 后的状态中成立,以此类推,目标条件都在应用 a N a_N aN 后的状态中成立。

B. Planning Domain Definition Language (PDDL)

规划域定义语言(PDDL)是经典规划问题的标准化编码[7], [8]。规划问题 P 的 PDDL 表示分为两个文件:领域文件(domain file)和问题文件(problem file)。

  • 领域 PDDL 文件提供了世界底层规则的提升表示(lifted representation)。它包括一组谓词,这些谓词定义了状态空间 S S S 和行动 A A A 及其前提条件和效果(即转换函数 f)。
  • 问题 PDDL 文件提供了一个对象列表,用于定义域,问题的初始状态 s i n i t s^{init} sinit 和目标条件 S G \mathscr{S}^G SG存在着大量的符号规划器(symbolic planners),它们可以实现高效的搜索算法,以解决 PDDL 形式化的规划问题

在这项工作中,我们的目标是将描述初始状态 s i n i t s^{init} sinit 和目标条件 S G \mathscr{S}^G SG 的自然语言提示用 PDDL 格式化,并利用符号规划器输出正确的计划。我们假设领域规则是可用的(参见第三节中的假设)。

在这里插入图片描述

III. METHOD

本节首先使用一个运行示例来研究在 PDDL 中制定计划提示的方法,然后介绍 LLM+P 方法。

A. Large Language Model as a PDDL Writer

LLM 不擅长规划或长周期推理(long-horizon reasoning)[9],但擅长描述和翻译文本输入,包括以 PDDL 格式重写规划提示(planning prompts)。直觉告诉我们,我们可以将 PDDL 视为一种不同于英语的语言,因此用 PDDL 重写规划提示实质上是一项机器翻译任务,而这正是众所周知的 LLM 所擅长的。在此,我们提供了一个由 GPT-4 编写的 PDDL 问题文件示例,该文件未进行任何提示工程。生成的文件似乎具有正确的 PDDL 语法,但却使用了一个虚构的谓词(empty),并且忽略了 b1 在桌子上的初始条件。

在这里插入图片描述

B. In-Context Learning

众所周知,LLMs 能够在不对其参数进行微调的情况下进行上下文学习(in-context learning),即 LLMs 能够通过简单地对一些输入标签对(demonstrations)进行调节,从而执行未见过的下游任务[10]。下面是一对用自然语言和 PDDL 编写的问题描述,作为上下文提供给 GPT-4。当上下文与上述示例中的提示一起包含时,规划器就能直接解决生成的 PDDL 问题文件。

在这里插入图片描述

C. Large Language Model + Classical Planner (LLM+P)

在这里插入图片描述

在介绍了 LLM 在 PDDL 和上下文学习中对问题进行编码的能力之后,介绍 LLM+P 解决方案(图 1 的底部)。具体来说,我们假设对于每个问题领域,人类专家都能提供一个领域描述(即动作前提条件和效果),该描述将固定用于该领域中发生的所有问题实例。虽然自动生成描述的问题是另一个有价值的研究课题,但在本文中,我们假定描述可以作为 PDDL 域文件提供。LLM+P 方法可直接用作向机器人系统下达任务的自然语言接口。例如,假设我们想让机器人扮演调酒师,调制鸡尾酒。合理的做法是告诉它可以采取哪些行动,但让它自己去推断如何在一组配料的组合下最有效地调制新的鸡尾酒。此外,我们假设Agent会得到一个最小示例,该示例展示了该领域内一个简单问题的示例问题 PDDL 是什么样子的。接下来,Agent将面临一个可能相当复杂的新问题(P)。一旦生成了问题 PDDL 文件,我们就会将其与所提供的领域 PDDL 文件一起输入任何经典规划器,以生成 PDDL 规划 [11]。最后,LLM 将 PDDL 计划翻译回自然语言,完成 LLM+P 管道:

  • 1)根据与人类用户的对话,机器人知道何时触发 LLM+P。
  • 2)提供领域 PDDL,以定义机器人能够执行的操作。该规范与任务无关,与任务相关的实体在 LLM 生成的问题 PDDL 中指定
  • 3)还提供了用自然语言描述的简单问题及其相应的问题 PDDL 文件。

IV. RELATED WORK

本节首先简要介绍了经典规划算法。然后总结了在使用大型语言模型完成规划任务方面的最新进展。最后,本节还将讨论最近关于利用外部模块增强 LLM 的研究。

A. Classical Planning

自动规划或经典规划技术可用于计算实现给定目标的行动序列 [12],[13],[14]。自动规划算法已广泛应用于机器人系统。

  • Shakey 是第一个配备规划组件的机器人,它是用 STRIPS [15] 构建的。之前的一些通用规划架构也被证明可用于机器人规划,如 PRODIGY [16] 和 HTN [17]。
  • 最近为机器人设计的经典规划系统经常使用规划域描述语言(Planning Domain Description Language, PDDL)或答案集编程(Answer Set Programming, ASP)作为规划器的底层动作语言 [18],[19],[20],[21]。例如,研究人员使用经典规划算法为执行配送任务的移动机器人安排行动序列 [22],为自动驾驶车辆推理安全高效的城市驾驶行为 [23],以及为移动机器人团队规划行动 [24]。
  • 任务与运动规划(Task And Motion Planning, TAMP)是一种分层规划框架,它将离散空间中的经典规划与连续空间中的机器人运动规划相结合 [25], [26]。

上述大多数规划方法都需要特定领域的编程语言作为问题及其解决方案的基础表述。而 LLM+P 则利用 LLM 的优势,作为机器人的自然语言接口来解决复杂的规划任务。促使我们使用此类经典规划系统的主要原因是,这些规划系统大多是完善的,它们能保证逻辑上的正确性,并在存在规划的情况下输出规划。许多规划系统还能找到最优(最短)计划,至少在时间充足的情况下是这样。

B. Planning with Large Language Models

近年来,人们开发了各种大型语言模型(LLM),如 Bert [27],CodeX [28],Opt [29],GPT-3 [10],ChatGPT [30],GPT-4 [2],Llama [31],Llama2 [32] 和 PaLM [33]。由于 LLM 经过大量离线文本数据的预训练,因此它们具有惊人的零样本泛化能力,可用于机器人规划任务 [34],[35],[36],[37],[38],[39],[40],[41],[42],[43],[44],[45]。最近有几种方法成功地从 LLMs 中提取了任务知识,从而用自然语言为机器人分解指令或指示。例如,

  • 通过迭代增强提示,LLMs 可用于家居领域的任务规划 [38]。
  • SayCan 是另一种方法,它利用 affordance functions 对机器人进行规划,以考虑行动的可行性,其中的服务请求是用自然语言指定的[34]。
  • ChatGPT for Robotics [3] 研究了如何将 ChatGPT 应用于通用机器人领域 。

然而,现有 LLM 的一个主要缺点是缺乏对复杂任务的长周期推理能力(见 [9], [46] 和 [2] 第 8.2 节)。当遇到此类任务时,它们产生的输出往往是不正确的,即按照输出计划实际上并不能解决任务。因此,在这项工作中,我们将重点利用经典规划器的特性来解决这个问题。同样,最近的一些工作也研究了将经典规划与 LLM 结合起来的方法 [47],[48],[49],[50],[51],[52],[53],[54],[55],[56],[57]。它们或使用提示,或使用微调,使 LLM 能够解决 PDDL 规划问题。通过迭代查询 LLM,长周期规划能力也得到了提高,这在 Minecraft [58] 中得到了验证。相比之下,我们并不完全依赖 LLM 作为问题求解器,而是更多地利用规划器(即生成准确和最优的规划)和 LLM 本身(即将自然语言问题描述转换为 PDDL 的 one-shot 泛化)的优势

C. Augmenting LLMs with External Modules

最近开发的方法表明,通过将 LLM 与外部模块相结合,可以提高 LLM 下游任务的性能。例如,

  • WebGPT [59] 是 GPT-3 的微调版,它结合了网络知识来回答开放式问题。
  • Lazaridou et al.研究了如何利用谷歌等搜索引擎作为 LLM 的外部工具[60]。
  • MemPrompt [61] 提出了一种人在回路系统,在该系统中,不断增长的错误记忆和用户反馈将作为过去的经验,融入提示中,以更准确地回答新问题。
  • REPLUG [62] 是另一种检索增强语言建模范例,它将语言模型视为一个黑盒子,并用一个可微调的检索模型对其进行增强。
  • [63],[64] 研究了使用计算器进行计算。

在最近与我们相关的工作中,Schick et al.训练了一个名为 ToolFormer 的模型,该模型可以通过对 LLMs 提示的在线增强来决定何时以及如何调用某些工具 API [65]。在这项工作中,我们提出经典规划器可以成为另一个特别有用的外部模块。相比之下,LLM+P 并不依赖于对 LLM 的任何微调或再训练。LLM+P 只需将经典规划器的知识融入现有的 LLM 中,就能实现长周期推理和规划功能

作者获悉,同时进行的一项工作[66]介绍了使用 SayCan 数据集[34]将 LLM 与 PDDL 集成的初步结果。不过,SayCan 数据集的范围有限,因为它只包含三个预定义的操作。因此,原论文中评估的所有模型变体都达到了约 90% 的成功率。由于 SayCan 数据集的同质性,Lyu et al.并不需要对领域 PDDL 进行严格定义,这可能会导致计划不可行。因此,我们认为我们的 LLM+P 方法是对增强具有最佳规划能力的 LLM 的更全面研究。

V. EXPERIMENTS

我们进行实验来回答这些问题:

  • 1)How well does LLM-AS-P work? To what extent can state-of-the-art LLMs and LLM-based reasoning methods be directly used for planning? (Not at all)
  • 2)How well does LLM+P work compare to LLM-AS-P? (Much better)
  • 3)What role does the context play in the success of LLM+P? (It’s crucial)
  • 4)Can LLM+P help make service robots more efficient on realistic tasks? (Yes)

A. Benchmark Problems

我们从以往的 International Planning Competitions 中借鉴了七个机器人规划领域,并为每个领域提供了 20 个自动生成的任务 [67]。以下是规划领域的列表,以及每个领域的简要概述。

1)BLOCKSWORLD:给定桌子上的一组积木,机器人的任务是将它们重新排列成指定的目标配置。

2)BARMAN:机器人调酒师的任务是利用现有的配料和容器为顾客调制鸡尾酒。

3)FLOORTILE:一组机器人的任务是在地砖上绘制颜色图案。机器人可以走动并变换颜色,但不能踩在涂有油漆的地砖上。

4)GRIPPERS:一组有两个抓手的机器人的任务是在不同房间之间移动物体。

5)STORAGE: 给定一组升降机,目标是使用升降机将板条箱提升并投放到仓库中。板条箱最初存放在不同的区域,升降机可以在不同的存放区域之间移动。

6)TERMES:机器人的任务是通过搬运和放置积木来建造复杂的结构,还可以爬到积木上建造塔楼。

7)TYREWORLD:机器人的任务是更换爆胎,例如,给轮胎充气,拧紧螺母,完成后按正确顺序将工具搬回引导箱。

B. Experiment Setup

我们使用 GPT-4 进行所有实验。将 temperature 设置为 0,并使用概率最高的响应。因此,LLM 返回的响应是确定性的。生成文本 PDDL 响应后,我们将其输入 FAST-DOWNWARD 规划器,并尝试使用 SEQ-OPT-FDSS-1(保证最优)和 LAMA(不保证最优)两种 alias,最大搜索时间为 200 秒。我们报告了最优 alias 的成功率,对于超时的域,我们在括号中显示了次优 alias 的成功率。对于基线方法,我们手动计算最优方案的数量,并在括号中报告正确方案的数量(如果存在次优方案)。

我们还对最近一种基于 LLM 的深思熟虑的推理方法 Tree of Thoughts [68] 进行了评估,简称为 LLM-AS-P (TOT)。我们将原始 ToT 实现中的广度优先搜索算法用于规划。我们会提示 LLM 从允许的行动中扩展搜索树,并评估路径达到目标的可能性。时间限制同样为 200 秒

C. Results and Analysis

在这里插入图片描述

表 I 提供了在 7 个领域应用 LLM-AS-P 和 LLM+P 的结果。

Findings (LLM-AS-P):

  • 1)尽管 LLM-AS-P 为每个问题提供了一个自然语言计划,但其中大多数计划并不可行。主要原因是 LLM-AS-P 缺乏对先决条件的推理能力。

  • 2)在大多数情况下,无论是否将示例计划作为上下文,LLM-AS-P 的失败方式都是一样的。特别是在 BLOCKSWORLD 领域,LLM-AS-P 无法跟踪 ON 和 CLEAR 等属性。在 BARMAN 域中,LLM-AS-P 的计划无法在再次使用前清洁酒杯。

  • 3)最难处理的域是具有复杂空间关系的域。LLM-AS-P 方法(无论有无上下文)在此类问题上完全失败。在 FLOORTILE 域,LLM-AS-P 生成 “move right to tile 0-4 and paint tile 1-2 black”,但机器人只能将邻近的地砖涂成黑色。在 TERMES 和 STORAGE 中,LLM-AS-P 忽略了机器人不能在原位置卸载木块/木箱的要求。

  • 4)LLM-AS-P (TOT) 在每个树节点上调用 LLM,提供可用行动列表,然后调用 LLM 将树上的每条新路径作为部分计划进行评估。我们发现,LLM 能够对部分计划给出合理的排序,但它往往无法识别计划是否能达到目标。由于 LLM 调用次数较多,LLM-AS-P (TOT) 在大多数情况下都会超时,因此不适合解决长周期问题

Findings (LLM+P):

  • 1)LLM+P 可为大多数问题生成最优规划。大多数失败案例都是由于问题文件指定错误造成的,例如缺少一个初始条件(例如,在 FLOORTILE 中让瓷砖断开连接),导致规划问题无法解决

  • 2)在没有上下文(即示例问题及其相应的问题 PDDL)的情况下,我们发现 LLM 无法生成正确的问题 PDDL 文件。因此,上下文对 LLM+P 的工作非常重要

D. Robot Demonstration

我们将 LLM+P 部署到一个负责整理家居的真实机器人身上,从而验证了 LLM+P 能够高效地解决现实中的服务机器人问题。用户要求机器人将一个芥末瓶从茶几上移到储藏室,并将空汤罐从边桌上扔掉。由于边桌和回收箱都在从茶几到餐具室的途中,因此最佳方案是将芥末瓶搬到边桌上,扔掉汤罐后再重新抓起,总成本为 22。图 2 显示了 LLM+P 找到的最优计划。提示的部分内容和生成的 PDDL 如下所示。LLM-AS-P 输出了一个次优计划,即先把瓶子拿到储藏室,然后再回去拿汤罐,总成本为 31。

在这里插入图片描述
在这里插入图片描述

VI. CONCLUSION AND FUTURE WORK

在这项工作中,我们建议利用经典规划器,使大型语言模型具备最佳规划能力。LLM+P 框架的关键设计选择是让 LLM 专注于将规划问题从自然语言转换为结构化 PDDL 格式。此外,我们还表明,让 LLM 意识到一个简单的 (problem, PDDL) 对作为上下文学习的示范(或上下文)也很重要。进一步扩展 LLM+P 框架的一些有趣方向包括:

  • 1)使 LLM 能够自动检测何时以及如何应用 LLM+P。
  • 2)减少 LLM+P 对人类信息的依赖,可能涉及微调。

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

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

相关文章

【前端设计】小球loading动画

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 html <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

【深度学习:Few-shot learning】理解深入小样本学习中的孪生网络

【深度学习&#xff1a;Few-shot learning】理解深入小样本学习中的孪生网络 深入理解孪生网络&#xff1a;架构、应用与未来展望小样本学习的诞生元学习小样本学习孪生网络的基本概念孪生网络的细节Triplet Loss架构特点关键组件训练过程主要应用领域未来展望示例图片结论 深入…

[AutoSar]基础部分 RTE 06 对runnable的触发和SWC的影响

目录 关键词平台说明一、runnable二、RTE的event2.1Mode类型event2.2周期触发类型2.3 数据交互触发 三、internal runnable value四、专属运行区指定五、per_instance memory 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商T…

Kali Linux——设置中文

【问题现象】 从下图可以看到&#xff0c;菜单全是英文的。对于英文不好的同学&#xff0c;使用起来很难受。 【解决方法】 1、获取root权限 su root 2、进入语言设置 dpkg-reconfigure locales 3、选择zh_CN.UTF-8 UTF-8 4、设置默认 5、安装完成 6、重启虚拟机 reboot…

深度学习数据集大合集—鱼类数据集

最近收集了一大波有关于各类鱼类的数据集&#xff0c;有淡水鱼、有深海鱼、有鱼的状态、有鱼的分类。大家可以详细查看。废话不多说&#xff0c;接下下来逐一的给大家介绍&#xff01;&#xff01; 1、鱼类检测数据集 包含鱼类的对象检测数据集 本数据集包含4种鱼类及其相关…

【数据结构—排序—交换排序】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、排序的概念及其运用 1、排序的概念 2、排序运用 3、 常见的排序算法 二、交换排序 1、冒泡排序 1.1算法讲解 1.2冒泡排序的实现&#xff1a; 1.2.1头文件的…

记.backward()报错

最近我在模型训练损失里加入了LPIPS深度感知损失&#xff0c;训练的时候就出现了如上的报错&#xff0c;具体解释为&#xff1a;调用梯度反向传播loss.backward()时&#xff0c;我们计算梯度&#xff0c;需要一个标量的loss(即该loss张量的维度为1,只包含一个元素&#xff09;&…

安装ps显示找不到MSVCP140.dll的多种解决方法,轻松解决dll问题

在使用Photoshop&#xff08;简称PS&#xff09;时&#xff0c;有时会遇到“MSVCP140.dll丢失”的错误提示。这个问题可能是由于系统缺少相应的运行库文件导致的。为了解决这个问题&#xff0c;我们需要采取一些措施来修复丢失的MSVCP140.dll文件。本文将介绍五个有效的解决方法…

【MySQL】索引基础

文章目录 1. 索引介绍2. 创建索引 create index…on…2.1 explain2.2 创建索引create index … on…2.3 删除索引 drop index … on 表名 3. 查看索引 show indexes in …4. 前缀索引4.1 确定最佳前缀长度&#xff1a;索引的选择性 5. 全文索引5.1 创建全文索引 create fulltex…

dnSpy调试Web应用程序

文章目录 前言一、dnSpy是什么&#xff1f;二、如何使用dnSpy三、如何调试Web应用程序四、下载总结 前言 dnSpy是一个.NET程序集调试器和编辑器&#xff0c;主要用于调试和编辑没有源码的.NET程序集。 一、dnSpy是什么&#xff1f; dnSpy是一个.NET程序集调试器和编辑器&#…

静态网页设计——极乐迪斯科(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV11k4y1X7mH/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

SpringCloud系列篇:核心组件之配置中心组件

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.前言 二.配置中心组件是什么 三…

揭秘六大热门认证考试

六大热门认证考试是什么❓今天为大家详细解读PMP、ACP、CDGA、软考中项、软考高项、NPDP、CISP等热门认证考试&#xff0c;让你不再彷徨&#x1f447; 1️⃣PMP &#x1f451;PMP认证是全qiu公ren的项目管理专业认证&#xff0c;旨在评估项目管理人员在项目过程中所需的知识、技…

重生奇迹MU游戏中勇者大陆

玩重生奇迹MU&#xff0c;我们进入游戏首先会来到勇者大陆。在看到勇者大陆市场&#xff0c;有很多交易的玩家也在这里&#xff0c;在勇者市场里面有商店。接下来介绍主要的NPC 的作用和怪物有那些&#xff1f; 勇者大陆卖药的商店老板莉雅 商店里面会有卖治疗药水&#xff0…

06-微服务-SpringAMQP

SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址&#xff1a;https://spring.io/projects/spring-amqp SpringAMQP提供了三个功能&#xff1a; 自动声明队列、交…

红队打靶练习:EVM: 1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 目录探测 1、gobuster 2、dirsearch WEB wpscan get username get password MSF get shell 提权 get root get flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interf…

NACHI机器人模拟示教器如何切换中文

前言 现在开始学习机器人的编程语言&#xff0c;那么要学习会用首先得用模拟示教器来学习&#xff0c;但是全是英文确实比较难受一些些&#xff0c;没有中文来的直观。所以摸透一下如何给示教器更换语言。 具体步骤 步骤一&#xff1a;将中文的汉化包下载下来。具体的下载链…

STL——string详解

目录 &#x1f4a1;介绍 &#x1f4a1;string的基本操作 &#x1f4a1;string的构造函数 &#x1f4a1;string赋值操作 &#x1f4a1;string字符串拼接 &#x1f4a1;string的查找和替换 &#x1f4a1;string字符串比较 &#x1f4a1;string字符存取 &#x1f4a1;str…

爬虫实战 - 微博评论数据可视化

简介&#xff1a; 我们都知道在数据比较少的情况下&#xff0c;我们是可以很轻易的获取到数据中的信息。但是当数据比较庞大的时候呢&#xff0c;我们就很难看出来了。尤其是面对现如今数以万计的数据&#xff0c;就更了。 不过好在我们可以通过计算机来帮我们进行分析&#…

算力-计算量,关于TOPS和FLOPS,及FLOPs

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/zaibeijixing/article/details/135425642 ———————————————— 目录 一、易混淆的三…